필사 모드: モダン Lua & Luau 2026 — Lua 5.4 / LuaJIT / Roblox Luau / Neovim Lua / OpenResty / Defold / Love2D 徹底ガイド
日本語プロローグ — 「Lua は終わった」と言うのは誰か
2026年5月、「Lua はもう終わった」と言う人がいるなら、その人は過去5年間、ゲーム業界・エディタ界隈・高性能 Web サーバーの領域を一度も見ていない人だ。
数字を見よう。
- **Roblox**: MAU 4億超え。ゲームロジックは全部 **Luau**(Roblox がフォークした型付き Lua)。毎日数十万行の Luau が新たに書かれている。
- **Neovim**: 2024年の 0.10、2025年の 0.11、2026年の 0.12 — その間に **VimScript から Lua への移行はほぼ完了した。** LazyVim・AstroNvim・NvChad・LunarVim の4大ディストロの GitHub スター合計は10万を超えている。
- **OpenResty / NGINX Lua**: Cloudflare は今もエッジの一部で LuaJIT を動かしている。1ノードで秒間数百万リクエストを処理するワークロードの大半が Lua で書かれている。
- **World of Warcraft アドオン**: 20年経った今でも Lua。2026年のパッチごとに人気アドオンが数百本更新される。
- **Defold**: King(Candy Crush の開発元)が公開している Lua ゲームエンジン。モバイル市場で Unity・Godot と並ぶ3大選択肢の一角。
そしてこれらすべてが、**1行で説明できる言語**の上で動いている。リファレンス実装のインタプリタは25,000行未満、ANSI C 89 で書かれていて、ほとんどどこにでも組み込める。
本稿では、2026年の Lua/Luau エコシステムを一気に整理する。Lua 5.4 の新機能、LuaJIT のパフォーマンス、Roblox Luau の型システム、LazyVim の設定爆発、OpenResty の NGINX 組み込み、Defold・Love2D のインディエンジン、そして Hammerspoon・Wireshark のようなデスクトップ組み込みまで。
1章 · 2026年 Lua エコシステムの地図 — 4つの軸
まず一枚の絵から。
[ Lua コア本体 ]
|
+------------------------+------------------------+
| | | |
Lua 5.4 LuaJIT 2.1 Luau (Roblox) 変種言語
(PUC-Rio) (Mike Pall) (typed fork) (4 + α)
integer 型 Lua 5.1 ABI gradual types MoonScript
to-be-closed インタプリタ最強 native codegen Yuescript
bitwise FFI Teal (typed)
世代別 GC 最速の動的 parallel Luau Pluto
言語の一角 Fennel (Lisp)
| | | |
+-------+--------+--------+-------+-------+-------+
| | |
[ Neovim 0.12 ] [ OpenResty ] [ ゲーム / エンジン ]
LazyVim NGINX + Lua Roblox
AstroNvim Kong API GW WoW アドオン
NvChad Apache APISIX Defold (King)
LunarVim Tarantool DB Love2D
Solar2D
Garry's Mod
Tabletop Sim
Source 2 (CS2)
|
[ デスクトップ組み込み ]
Hammerspoon (Mac)
Adobe Lightroom プラグイン
Wireshark ディセクタ
ポイント整理。
- **Lua 5.4** — PUC-Rio(ブラジル・リオデジャネイロ・カトリック大学)発の最新安定版。**いまだに 5.5 のコミットメントはない。** Roberto Ierusalimschy がペースを決める。
- **LuaJIT 2.1** — Mike Pall によるトレース JIT。**5.3 以降の統合サポート後継はまだない。** Lua 5.1 ABI 互換に固定。それでも動的言語ランタイムの中では依然として最速級。
- **Luau** — Roblox がフォークした型付き Lua。グラデュアル型付け、ネイティブコード生成、parallel Luau(マルチスレッド)。2025年末にオープンソース・ロードマップを発表。
- **変種言語** — MoonScript(CoffeeScript ライク)、Yuescript(MoonScript フォーク)、Teal(typed Lua)、Pluto(Lua 5.4 + モダン機能のスーパーセット)、Fennel(Lua VM の Lisp)。
2章 · Lua 5.4 — 最新の安定版、しかし保守的
PUC-Rio Lua 5.4 は2020年6月に初期リリース、2024年までに 5.4.7 までパッチされている。2025–2026年現在も新しいメジャー(5.5)はまだ存在しない。Roberto Ierusalimschy はインタビューのたびに「**言語にとっては安定性が最重要**」と繰り返している。
5.4 で入った変更点。
整数 vs 浮動小数 — 別の型
5.3 から導入され、5.4 で洗練された変更。以前はすべての数値が double だった。
-- Lua 5.4
print(math.type(1)) -- integer
print(math.type(1.0)) -- float
print(math.type(1/2)) -- float (除算は常に float)
print(math.type(1//2)) -- integer (床除算)
-- ビット演算は整数限定
print(0xFF & 0x0F) -- 15
print(1 << 4) -- 16
LuaJIT は Lua 5.1 ABI ベースのままなので、この整数型を標準ではサポートしていない。これが両陣営の最大の分岐点。
to-be-closed 変数 — Lua の RAII
C++ の RAII や Python の with に近いリソース管理機能。
-- Lua 5.4
do
local file <close> = io.open("data.txt", "r")
-- ブロックを抜ける瞬間、メタテーブルの __close が自動で呼ばれる
-- 例外が発生しても呼ばれる(try/finally なしで安全)
for line in file:lines() do
print(line)
end
end
-- ここでは file はもう閉じている
`<close>` 注釈が付いた変数はスコープを抜けるときにメタテーブルの `__close` が呼ばれる。リソースリーク対策に非常に有効。
世代別 GC
5.4 の GC は**世代別(generational)モード**を第一級の選択肢として追加した。従来の incremental と切り替え可能。
-- generational GC に切り替え
collectgarbage("generational")
-- 短命オブジェクトの多いワークロード(パース・描画ループ)で 30–60% 高速化
新文法 — goto ラベル / const / close
local PI <const> = 3.14159 -- 再代入を試みるとコンパイルエラー
for i = 1, 10 do
for j = 1, 10 do
if i * j > 50 then goto done end
end
end
::done::
print("抜けた")
`<const>` は小さいが大きな安全性向上。意図しない再代入をコンパイル時に弾ける。
3章 · LuaJIT — Mike Pall、パフォーマンスの王、後継者は不在
LuaJIT を抜きにして Lua は語れない。Mike Pall がほぼ一人で築き上げ維持してきたこのプロジェクトは、**2026年でも動的言語ランタイムのゴールドスタンダード**の一つだ。
なぜ速いのか
- **トレースコンパイラ**: ホットループを検出してマシンコードへコンパイルする。PyPy と同じ発想、より堅牢な実装。
- **NaN タギング**: すべての Lua 値(数値・文字列・テーブル・関数)を 64bit double 内にパック。ボクシングなしの直接メモリアクセス。
- **FFI(Foreign Function Interface)**: C の関数や構造体を Lua から直接呼ぶ。C 拡張なしで。
-- LuaJIT FFI の例
local ffi = require("ffi")
ffi.cdef[[
typedef struct { double x, y, z; } Vec3;
double sqrt(double);
]]
local v = ffi.new("Vec3", 1, 2, 3)
local len = ffi.C.sqrt(v.x*v.x + v.y*v.y + v.z*v.z)
print(len) -- 3.7416...
このコードは C で書いたものとほぼ同じ速度で走る。ゲームエンジンやミドルウェアが LuaJIT を愛する理由。
5.3 以降の統合サポートがない理由
LuaJIT は **Lua 5.1 ABI に固定**されている。Mike Pall は2020年ごろ LuaJIT 2.1 beta の作業を中断し、2.1 はいまだに「beta」のタグを付けたまま世界中の本番で使われている。整数型・to-be-closed・64bit ビット演算は部分サポートか未サポート。
このため2026年現在、Lua エコシステムは**2つに分かれている。**
- **LuaJIT 陣営**: OpenResty、World of Warcraft(Wrath 以降)、Defold、Love2D(0.11 以降は LuaJIT デフォルト)、Wireshark。
- **純粋 Lua 5.4 陣営**: 組み込み環境(メモリ制約)、Roberto Ierusalimschy の PUC-Rio 本家、一部の新規プロジェクト。
LuaJIT の今後
- **OpenResty フォーク**: `openresty/luajit2` — LuaJIT 2.1 を積極的に PR で取り込むフォーク。事実上の本番標準。
- **Cloudflare 由来のパッチ**: 重要なパッチの一部は Cloudflare のエンジニアが投じている。
- **Mike Pall 本人は?** 2025年に新たな maintainer 募集の記事を再掲。後継体制の確立が2026年の課題。
4章 · Luau — Roblox の型付き Lua フォーク
Luau(発音は「ルーアウ」)は Roblox が2019年ごろにフォークした Lua 5.1 ベースの言語。2021年にオープンソース化、2026年現在 **Lua エコシステムで最も速く進化している変種**である。
何が違うのか
-- Luau の型システム
local function add(a: number, b: number): number
return a + b
end
type Vec3 = { x: number, y: number, z: number }
local function length(v: Vec3): number
return math.sqrt(v.x^2 + v.y^2 + v.z^2)
end
-- strict / nonstrict / nocheck をファイルごとに選択
--!strict
- **グラデュアル型付け(gradual typing)** — 型注釈なしでも動く。徐々に追加すれば徐々に安全になる。TypeScript と同じ思想。
- **strict / nonstrict** — ファイルの1行目に `--!strict` を書けば完全型チェック。
- **ネイティブコード生成(NCG)** — 2023年導入。ホット関数をマシンコードへコンパイル。LuaJIT のトレースコンパイルとは別アプローチで、メソッド単位。
- **parallel Luau** — Roblox 導入のアクターモデル・マルチスレッド。メインスレッド以外のワーカースレッドで Luau が走る。
- **Lua 5.1 互換ベース** — そのため LuaJIT のコードを比較的移植しやすい。ただし Roblox API に縛られるため丸ごとの移植はできない。
Roblox の外で使えるか
2025年末ごろから、Luau はスタンドアロンランタイムを真剣に整備してきた。`luau` コマンドラインツールが npm・Homebrew に上がり、Lune のような Luau ランタイムプロジェクトが Discord ボットや CLI ツールを Luau で書く道を開いた。
macOS でスタンドアロン Luau をインストール
brew install luau
実行
echo 'print(string.format("hello %s", "luau"))' | luau -
2026年ロードマップ
Roblox は四半期ごとに Luau RFC(正式提案)を公開する。2026年 Q1 の見どころ:
- **type function** — 型レベルの関数。TypeScript の conditional type に近いメタプログラミング。
- **buffer 標準 API 拡張** — バイナリデータ処理。
- **エラーハンドリング改善** — try/catch ライクな構造の RFC が進行中。
5章 · Roblox 開発 — 巨大な Luau 市場
Lua/Luau を無視できない理由の半分は Roblox だ。
- **MAU 4億超**、1日平均使用時間 2.5 時間。
- **ゲーム内ロジックはすべて Luau。** クライアントもサーバーも。Studio(エディタ)拡張も Luau。
- **Roblox 開発者フォーラム**: 投稿数は数百万。Stack Overflow に次ぐ Luau Q&A の最大プール。
始め方
1. Roblox Studio をダウンロード(Windows / Mac)
2. New Place → Baseplate テンプレート
3. Explorer で ServerScriptService を右クリック → Insert Object → Script
4. Luau を書く
-- 例:タッチされたら色が変わるパート
local part = workspace.Part
part.Touched:Connect(function(hit)
local character = hit.Parent
if character:FindFirstChild("Humanoid") then
part.Color = Color3.fromRGB(
math.random(0, 255),
math.random(0, 255),
math.random(0, 255)
)
end
end)
Roblox 開発者の経済圏
- **Robux 換金** — 一定額を超えると USD に換金可能。人気ゲームは月数十万ドルを稼ぐ。
- **2025年の新展開** — UGC(User Generated Content)マーケットプレイス拡大。衣装やアクセサリも Luau ベースのスクリプトで作る。
- **DataStore / OpenCloud API** — Luau だけでは足りないゲームは、外部バックエンド(Python / Go)と OpenCloud API でやり取りする。
日本・韓国の Roblox 開発
- 日本: Roblox JP が2025年に本格始動。Cygames や Bandai Namco 出身のインディが Luau でデビュー作を出す事例多数。
- 韓国: 2024–2026年に Roblox の韓国進出が加速。青少年向けプログラミング教育が Scratch から Roblox Studio へシフトする流れ。
6章 · Neovim Lua 設定の爆発 — LazyVim / AstroNvim / NvChad / LunarVim
Vim から Neovim への最大の変化は **VimScript から Lua への移行**である。0.5(2021)で Lua API が安定化し、0.10・0.11・0.12 と進むうちに VimScript は事実上レガシー化した。
2026年の Neovim 設定エコシステムは、4つのディストリビューションが 9割以上を占める。
LazyVim — Folke 製の一強ディストロ
[folke/lazy.nvim](https://github.com/folke/lazy.nvim) という lazy-loading 系プラグインマネージャの上に作られたディストロ。2024年登場以降、事実上の標準。
-- ~/.config/nvim/lua/plugins/example.lua
return {
{
"nvim-treesitter/nvim-treesitter",
build = ":TSUpdate",
config = function()
require("nvim-treesitter.configs").setup({
ensure_installed = { "lua", "python", "typescript", "rust" },
highlight = { enable = true },
})
end,
},
{
"neovim/nvim-lspconfig",
dependencies = { "williamboman/mason.nvim" },
config = function()
require("lspconfig").lua_ls.setup({})
end,
},
}
**長所**
- 起動が速い。`:Lazy` で GUI プラグインマネージャ。
- モジュール式。`lua/plugins/` にファイルを置けば自動ロード。
- Folke 本人による一貫したコードスタイル。
**短所**
- 抽象化レイヤが厚い。素の Neovim Lua を学びたい人には少し遠回り。
AstroNvim — 華やかな UI
ダッシュボード・ステータスライン・アイコンが最初から整っている。「**そのまま使える IDE のような Neovim**」を志向。
-- AstroNvim v4 の構造
return {
colorscheme = "catppuccin",
features = {
large_buf = { size = 1024 * 256, lines = 10000 },
autopairs = true,
cmp = true,
diagnostics_mode = 3,
},
diagnostics = { virtual_text = true, underline = true },
}
**好む層** — Vim を初めて触る開発者、IDE 出身者。
NvChad — 軽量・洗練 UI
インドの開発者 siduck によるディストロ。**起動時間 30ms 以下**を目標。日本・韓国でもユーザーが多い。
-- NvChad v2.5+
require("nvchad.configs.lspconfig").defaults()
local servers = { "html", "cssls", "tsserver", "lua_ls", "rust_analyzer" }
vim.lsp.enable(servers)
LunarVim — 総合 IDE 志向
伝統的な「**Vim を本物の IDE のように使おう**」系ディストロ。2022–2023年がピーク、今も安定したユーザー層。
どれを選ぶか
| 状況 | おすすめ |
| ------------------------------------- | ----------------------- |
| Neovim 初めて | LazyVim または AstroNvim |
| 高速起動・軽量 UI | NvChad |
| 一定の学習曲線・フル IDE 体験 | LunarVim |
| ディストロなしで一から作る | kickstart.nvim → DIY |
**from-scratch リバイバル** — 2025–2026年に nvim-lspconfig・blink.cmp・snacks.nvim といったモジュール式プラグインが成熟したことで、「**ディストロなしで自作する方がスッキリする**」という流れも再び強まっている。出発点は kickstart.nvim。
7章 · OpenResty (NGINX + Lua) — 高性能 Web の影の主役
NGINX のコアに LuaJIT を組み込み、**リクエスト処理を Lua で書く**プラットフォーム。2011年に Yichun Zhang(agentzh)が作り、現在は OpenResty Inc. が維持している。
なぜ速いのか
nginx.conf
location /api/users {
content_by_lua_block {
local user_id = ngx.var.arg_id
local redis = require "resty.redis"
local red = redis:new()
red:connect("127.0.0.1", 6379)
local user_json = red:get("user:" .. user_id)
ngx.header.content_type = "application/json"
ngx.say(user_json)
}
}
- リクエストハンドラは LuaJIT のマシンコードへコンパイルされる。
- NGINX イベントループ内で **non-blocking I/O** により Redis・Postgres・MySQL を呼べる。
- 同じハードウェアで Node.js の 2–5 倍の RPS。
誰が使っているか(2026年現在)
- **Cloudflare** — エッジ各所で LuaJIT ベースのモジュール。WAF・ルーティング・レート制限の一部。
- **Kong** — API ゲートウェイ。OpenResty ベース。2025年の Kong 4.0 では一部モジュールが Rust に置き換わったが、コアは依然 Lua。
- **Apache APISIX** — Kong の競合 OSS API ゲートウェイ。中国・浙江大学発、現在は Apache プロジェクト。
- **WeChat / Tencent** — 社内ゲートウェイの一部。
モジュール・エコシステム
`opm`(OpenResty Package Manager)または LuaRocks でインストール。
よく使うライブラリ
opm install openresty/lua-resty-redis
opm install openresty/lua-resty-mysql
opm install openresty/lua-resty-http
opm install bungle/lua-resty-prometheus
日本での OpenResty
- 通信キャリア・大手 SIer の社内ゲートウェイで採用事例。
- ゲーム会社(特にモバイル)が認証・マッチメイキングサーバで導入する例が多い。同時接続処理に強みがある。
8章 · Tarantool — インメモリ DB + Lua アプリケーションサーバ
ロシアの Mail.Ru で生まれ、今は独立したプロジェクトになった Tarantool は、**インメモリ DB + Lua アプリサーバ**という特異な組み合わせ。
-- Tarantool 内で実行
box.cfg{ listen = 3301 }
box.schema.space.create('users', { if_not_exists = true })
box.space.users:format({
{ name = 'id', type = 'unsigned' },
{ name = 'name', type = 'string' },
{ name = 'email', type = 'string' },
})
box.space.users:create_index('primary', { parts = { 'id' } })
-- ビジネスロジックも同じプロセス内に書ける
function add_user(id, name, email)
return box.space.users:insert{ id, name, email }
end
function find_user(id)
return box.space.users:get(id)
end
- **インメモリ + WAL** — Redis より強い整合性保証。SQL もサポート。
- **Lua アプリサーバ** — DB と同じプロセス内でビジネスロジックを実行。ネットワークホップを1段節約。
- **シャーディング** — `vshard` モジュールで自動シャーディング。
採用先:ロシアの大手インターネット企業、東欧のゲーム企業、そして増えつつある fintech 各社。
9章 · ゲーム — WoW アドオンから Source 2 まで
World of Warcraft アドオン
WoW は2004年のリリース直後から **Lua ベースのアドオンシステム**を提供してきた。22年経った今も変わらず。
-- 最もシンプルな WoW アドオン (MyAddon.toc + MyAddon.lua)
local frame = CreateFrame("Frame")
frame:RegisterEvent("PLAYER_ENTERING_WORLD")
frame:SetScript("OnEvent", function(self, event, ...)
print("|cFFFF0000Hello|r from MyAddon!")
end)
- 2024–2026年も人気アドオン(ElvUI・WeakAuras・Details!・Plater)はパッチごとに更新。
- WeakAuras は**ユーザー Lua スニペット**を受け取って実行するメタツールへ進化。事実上 WoW 用 Lua IDE。
Tabletop Simulator
2014年リリース、今も健在。**すべての MOD(ゲームルール)が Lua。** Steam Workshop に数万件の MOD。
Garry's Mod / Source 2 (CS2)
Garry's Mod の MOD はすべて Lua。Source 2 エンジン(2023年以降の CS2 等)も**部分的に Lua スクリプティングを採用** — マップメーカーやサーバプラグインは Lua で書かれている。
Defold — King の Lua エンジン
King(Candy Crush の開発元)が買収して OSS 化した 2D/3D エンジン。**ロジックは Lua、エンジン本体は C++。**
-- script.script
function init(self)
self.speed = 100
end
function update(self, dt)
local pos = go.get_position()
pos.x = pos.x + self.speed * dt
go.set_position(pos)
end
function on_input(self, action_id, action)
if action_id == hash("touch") and action.pressed then
self.speed = self.speed * -1
end
end
- **シングルバイナリのビルド** — Defold エディタから iOS・Android・HTML5・Switch まで一発でビルド可能。
- **ゲームサイズが小さい** — 空のプロジェクトが数 MB レベル。モバイルで人気。
- 2026年現在、King がメインスポンサー、コミュニティが活発に貢献。
Solar2D(旧 Corona SDK)
Corona Labs が消滅後、コミュニティが引き継いで Solar2D にリブランド。モバイル 2D ゲームエンジン。**メイン言語は Lua。** 日本・韓国の学校・インディ開発者が今も使用。
Love2D — 小さな 2D ゲームの定番
100KB クラスの小さな SDK。**`love.load` / `love.update` / `love.draw` の 3コールバック**さえあればゲームが動く。
function love.load()
player = { x = 100, y = 100, speed = 200 }
end
function love.update(dt)
if love.keyboard.isDown("right") then
player.x = player.x + player.speed * dt
end
if love.keyboard.isDown("left") then
player.x = player.x - player.speed * dt
end
end
function love.draw()
love.graphics.rectangle("fill", player.x, player.y, 50, 50)
end
- ゲームジャム(Ludum Dare・GMTK Jam)で最も頻繁に見るエンジンの一つ。
- LuaJIT を標準搭載しているのでパフォーマンスも十分。
10章 · 変種言語 — MoonScript / Yuescript / Teal / Pluto / Fennel
Lua は小さくシンプルだが、「これじゃちょっと足りない」と感じた人々が作った変種言語がある。
MoonScript — Lua 版 CoffeeScript
インデント文法、クラス、リスト内包表記。
-- MoonScript
class Animal
new: (@name) =>
speak: => print "#{@name} makes a sound"
class Dog extends Animal
speak: => print "#{@name} barks"
d = Dog "Rex"
d\speak!
2010年代前半に人気、今はメンテナンスモード。しかし **OpenResty 界隈の一部ライブラリは今でも MoonScript で書かれている。**
Yuescript — 活発に開発される MoonScript フォーク
台湾の開発者 Li Jin による MoonScript フォーク。Lua 5.4 互換、**活発に開発中。**
Teal — typed Lua、最も真面目な候補
-- Teal (.tl ファイル)
local record Point
x: number
y: number
end
local function distance(a: Point, b: Point): number
return math.sqrt((a.x - b.x)^2 + (a.y - b.y)^2)
end
- Hisham Muhammad(LuaRocks メンテナ)が作成。
- Lua 5.3・5.4 互換コードへトランスパイル。
- Luau の姉妹プロジェクトという雰囲気 — Luau は Roblox 同梱、Teal はスタンドアロン。
Pluto — Lua 5.4 + モダン機能
`continue`、`switch`、`??`(null 合体)、クラス、async/await などを Lua 5.4 に乗せたスーパーセット。
-- Pluto
class Player
function __construct(self, name)
self.name = name
self.hp = 100
end
function takeDamage(self, amount)
self.hp -= amount -- 複合代入
if self.hp <= 0 then
print(self.name .. " died")
end
end
end
local p = new Player("Alice")
p:takeDamage(50)
local config = json.decode(http.get("https://example.com/cfg")) ?? {}
活発に開発中で、ゲーム MOD コミュニティ(Stand 等)で人気。
Fennel — Lua VM 上の Lisp
Clojure 風 S 式文法、Lua VM 上で実行。
;; Fennel
(fn greet [name]
(print (.. "Hello, " name "!")))
(greet "World")
(local people [{:name "Alice" :age 30}
{:name "Bob" :age 25}])
(each [_ person (ipairs people)]
(print (.. person.name " is " person.age " years old")))
- Lisp のマクロや関数型スタイルを Lua の組み込み環境で使いたい時に。
- Love2D・TIC-80(ファンタジーコンソール)で人気。
- Neovim を Fennel で設定する人もいる(antifennel・hotpot.nvim)。
11章 · Hammerspoon (Mac) / Wireshark Lua ディセクタ
Hammerspoon — macOS 自動化
-- ~/.hammerspoon/init.lua
-- Cmd-Alt-R で右半分にウィンドウをスナップ
hs.hotkey.bind({"cmd", "alt"}, "R", function()
local win = hs.window.focusedWindow()
local f = win:frame()
local screen = win:screen():frame()
f.x = screen.x + screen.w / 2
f.y = screen.y
f.w = screen.w / 2
f.h = screen.h
win:setFrame(f)
end)
-- クリップボード履歴
local clipboardHistory = {}
hs.pasteboard.watcher.new(function()
local item = hs.pasteboard.readString()
if item then table.insert(clipboardHistory, 1, item) end
end):start()
- macOS のシステム API(`hs.window`、`hs.hotkey`、`hs.audiodevice` ほか)を Lua から直接呼べる。
- Karabiner・BetterTouchTool と並ぶ、Mac パワーユーザーの 3 大ツール。
Wireshark Lua ディセクタ
Wireshark でネットワークパケットを解析する際、**独自プロトコルを Lua で定義**できる。
-- Wireshark plugins/my_proto.lua
local my_proto = Proto("MyProto", "My Custom Protocol")
local fields = my_proto.fields
fields.id = ProtoField.uint16("myproto.id", "ID", base.DEC)
fields.payload = ProtoField.bytes("myproto.payload", "Payload")
function my_proto.dissector(buffer, pinfo, tree)
pinfo.cols.protocol = my_proto.name
local subtree = tree:add(my_proto, buffer())
subtree:add(fields.id, buffer(0, 2))
subtree:add(fields.payload, buffer(2))
end
DissectorTable.get("tcp.port"):add(8080, my_proto)
ゲーム会社や IoT 企業で自社プロトコルのデバッグに大活躍。C のディセクタを書く代わりに Lua 100行で済む。
12章 · Adobe Lightroom Lua プラグイン
あまり知られていない事実:**Adobe Lightroom のプラグインシステムは Lua ベース。** 2007年導入以来、変わらず。
-- Lightroom SDK プラグインの例 (Info.lua + Main.lua)
return {
LrSdkVersion = 12.0,
LrToolkitIdentifier = "com.example.exporter",
LrPluginName = "My Exporter",
LrExportServiceProvider = {
title = "My Cloud",
file = "ExportServiceProvider.lua",
},
}
- 一部の写真家が Photo Mechanic や Capture One へ移行しても、写真家のワークフロー自動化は依然として Lightroom + Lua プラグインが圧倒的多数。
- LR/Mogrify・Photo Mechanic Bridge・Photolemur 連携といった有名プラグインが Lua で書かれている。
13章 · 日本 / 韓国 の Lua
日本
- **Square Enix** — Final Fantasy シリーズの一部、社内ツール。東京本社で Lua を使う職種の募集が四半期ごとに出ている。
- **Bandai Namco** — グラフィックスミドルウェア・ゲームロジックスクリプトに Lua。日本製ゲームエンジン(Yebis ほか)が Lua プラグインをサポート。
- **Cygames** — Granblue Fantasy・Uma Musume などで社内ツールに Lua。モバイルゲームの hot-fix チャンネルに Lua を使うパターン。
- **その他インディ** — 東京・京都のインディシーンで Defold・Love2D を使うクリエイターが多数。Tokyo Indies などのミートアップで毎回発表がある。
韓国
- **Smilegate** — CrossFire・Lost Ark など自社エンジンゲームで MOD API の一部に Lua を活用。社内ツール・QA 自動化にも Lua。
- **NCSoft** — Lineage W・Blade & Soul などで一部のゲームロジックスクリプトに Lua。社内エンジンのツール群。
- **Krafton・Nexon** — ゲーム会社の多くがクライアント側 MOD・サーバ側 hot-reload に Lua を部分的に導入。
- **Naver・Kakao** — 一部サービスのゲートウェイ・CDN レイヤで OpenResty を採用。大規模トラフィック処理に適している。
14章 · 誰が Lua/Luau を学ぶべきか
Roblox ゲーム開発者
Luau は明白に必須。Roblox の外でもスタンドアロン Luau ランタイム(Lune)が育ちつつあり、活躍範囲が広がっている。
Neovim ユーザー
設定するだけでも Lua を最低限読めることが求められる。**VimScript から Lua への移行はほぼ完了した。** init.lua、lazy.nvim 設定、プラグイン開発はすべて Lua。
組み込み開発者
小メモリフットプリントのインタプリタ=Lua。ESP32 に Lua を載せて IoT を書く NodeMCU プロジェクトは健在で、ゲームエンジン・ミドルウェア組み込みでも Lua は標準。
NGINX・Web インフラエンジニア
OpenResty・Kong・APISIX を触る人にとって Lua はほぼ必須。Cloudflare Workers や Envoy(Lua extension)で出会うこともある。
ゲーム MOD 作者
WoW・Tabletop Simulator・Garry's Mod・CS2(マップメーカー)で MOD・プラグイン・拡張を作りたいなら、Lua が入口になる。
macOS パワーユーザー
Hammerspoon で自動化を書きたければ Lua 100行は知っておきたい。AppleScript の不便さから抜け出す道。
写真家・Lightroom ユーザー
自分のワークフローに合わせたエクスポータ・ファイル命名自動化を作りたいなら、Lua + Lightroom SDK が最も効率的。
15章 · 学習パス — 0 からモダン Lua まで
0週目 — 本体1時間
Programming in Lua (Roberto Ierusalimschy) 第4版 1–5章。基本文法・テーブル・関数・メタテーブルだけ。
1週目 — 実践環境を一つ選ぶ
- Roblox: Roblox Studio をインストール、Code Academy の Roblox コース。
- Neovim: kickstart.nvim をクローンして自分で改造。
- Love2D: 簡単なピンポンゲームを作る。
2週目 — メタテーブルと OOP パターン
OOP は Lua にビルトインではない。`setmetatable` でクラスを真似る練習を一度は自分で書くべき。
local Animal = {}
Animal.__index = Animal
function Animal.new(name)
local self = setmetatable({}, Animal)
self.name = name
return self
end
function Animal:speak()
print(self.name .. " makes a sound")
end
local Dog = setmetatable({}, { __index = Animal })
Dog.__index = Dog
function Dog.new(name)
local self = Animal.new(name)
return setmetatable(self, Dog)
end
function Dog:speak()
print(self.name .. " barks")
end
local d = Dog.new("Rex")
d:speak() -- Rex barks
3週目 — コルーチン・LPeg・リクエスト処理
- `coroutine.create` / `coroutine.resume` / `coroutine.yield` — Lua の強力な協調的マルチタスク。
- LPeg(Lua PEG) — PEG パーサライブラリ。JSON・CSV・DSL パーサを少量のコードで作れる。
- OpenResty をインストールしてシンプルな API サーバを書いてみる。
4週目以降 — 一つの領域を深掘り
- **Roblox ゲームのライブ運用**まで — DataStore・OpenCloud・MessagingService。
- **Neovim プラグイン開発** — nvim-treesitter・blink.cmp のソースを読んで自作プラグイン。
- **OpenResty 本番運用** — Kong・APISIX のソースコードを読む。
- **Defold・Love2D でゲームジャム参加** — Ludum Dare・GMTK Jam。
エピローグ — 小さな言語の大きな影
Lua は1993年の誕生からずっと変わらない。**シンプルな文法、8 つのデータ型、小さなインタプリタ、強力なメタテーブル。** Roberto Ierusalimschy は「**Lua は組み込まれるための言語**」と繰り返し言ってきたし、32年経った2026年でもその言葉は正確に正しい。
2026年の Lua/Luau エコシステムは、これまで以上に多彩だ。Roblox では4億人が毎日 Luau で作られたゲームをプレイし、何十万人もの Neovim ユーザーが LazyVim を通じて毎日 Lua を目にし、Cloudflare のエッジで LuaJIT が地球上のトラフィックの一部を捌き、WoW アドオンは22年生き残り、Lightroom の写真家が Lua プラグインでワークフローを自動化している。
**Lua は決して死なない。ただ静かに、どこにでもある。**
次の流行は Rust かもしれないし、Zig かもしれないし、別の何かかもしれない。それでも、ゲームエンジンがスクリプト言語を選ぶとき、エディタが設定言語を選ぶとき、Web サーバが組み込みハンドラ言語を選ぶとき、**Lua という選択肢は32年間ずっと最初の候補に挙がってきた。** そしてこれからもしばらく、同じだろう。
参考 / References
- Lua official site: https://www.lua.org/
- Lua 5.4 reference manual: https://www.lua.org/manual/5.4/
- Programming in Lua (4th ed.) by Roberto Ierusalimschy: https://www.lua.org/pil/
- LuaJIT: https://luajit.org/
- LuaJIT GitHub: https://github.com/LuaJIT/LuaJIT
- OpenResty fork of LuaJIT: https://github.com/openresty/luajit2
- Luau (Roblox) docs: https://luau.org/
- Luau GitHub: https://github.com/luau-lang/luau
- Roblox Developer Hub: https://create.roblox.com/docs
- Lune (Luau standalone runtime): https://github.com/lune-org/lune
- Neovim: https://neovim.io/
- LazyVim: https://www.lazyvim.org/
- AstroNvim: https://astronvim.com/
- NvChad: https://nvchad.com/
- LunarVim: https://www.lunarvim.org/
- kickstart.nvim: https://github.com/nvim-lua/kickstart.nvim
- OpenResty: https://openresty.org/
- Kong Gateway: https://konghq.com/
- Apache APISIX: https://apisix.apache.org/
- Tarantool: https://www.tarantool.io/
- Defold: https://defold.com/
- Love2D: https://love2d.org/
- Solar2D: https://solar2d.com/
- World of Warcraft AddOn UI: https://warcraft.wiki.gg/wiki/AddOn
- Tabletop Simulator API: https://api.tabletopsimulator.com/
- Garry's Mod Lua: https://wiki.facepunch.com/gmod/
- MoonScript: https://moonscript.org/
- Yuescript: https://yuescript.org/
- Teal: https://github.com/teal-language/tl
- Pluto: https://pluto-lang.org/
- Fennel: https://fennel-lang.org/
- Hammerspoon: https://www.hammerspoon.org/
- Wireshark Lua dissectors: https://wiki.wireshark.org/Lua/Dissectors
- Adobe Lightroom SDK: https://www.adobe.io/photoshop/lightroom-classic
- Cloudflare LuaJIT use: https://blog.cloudflare.com/cloudflares-architecture-eliminating-single-p/
현재 단락 (1/485)
2026年5月、「Lua はもう終わった」と言う人がいるなら、その人は過去5年間、ゲーム業界・エディタ界隈・高性能 Web サーバーの領域を一度も見ていない人だ。