Skip to content

필사 모드: モダン Lua & Luau 2026 — Lua 5.4 / LuaJIT / Roblox Luau / Neovim Lua / OpenResty / Defold / Love2D 徹底ガイド

日本語
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.
원문 렌더가 준비되기 전까지 텍스트 가이드로 표시합니다.

プロローグ — 「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 サーバーの領域を一度も見ていない人だ。

작성 글자: 0원문 글자: 19,348작성 단락: 0/485