Lua
Luaは1993年にブラジルのリオデジャネイロ・カトリック大学(PUC-Rio)で誕生した、軽量・高速・組み込みに特化したスクリプト言語です。名前はポルトガル語で「月」を意味します。当時のブラジルの輸入規制という特殊な事情のもと、研究室が「自分たちに必要なツールが手に入らないなら、自分たちで作ればいい」という姿勢で生み出した言語です。現在はゲーム業界を中心に世界中で広く採用されています。
名前の由来
「Lua」はポルトガル語で「月」を意味します。Luaの前身として、研究室内で開発されていたデータ記述言語「SOL(Simple Object Language)」がありました。SOLはポルトガル語で「太陽」も意味します。「太陽(SOL)」から派生した言語に「月(Lua)」という名前を付けることで、姉妹言語の関係を表現したのです。
1993年: Lua の誕生
Luaが1993年にブラジルで誕生したのには、当時のブラジルの特殊な事情が関係しています。1977年から1992年までブラジルにはコンピュータ関連商品の輸入規制があり、海外の商用ソフトウェアを自由に買うことができない時期がありました。PUC-Rioの研究者たちは、ペトロブラス(ブラジル石油公社)向けの石油開発プロジェクトで使うスクリプト言語を必要としていましたが、海外の商用製品を簡単に導入できる環境ではありませんでした。
そこで研究室内で自作したのが、データ記述言語SOL(Simple Object Language)と、手続き記述言語DEL(data-entry language)でした。この2つを統合し発展させた形で誕生したのがLuaです。「自分たちに必要なツールが手に入らないなら、自分たちで作ればいい」という姿勢から生まれた言語と言えます。
設計者たちの設計哲学
Luaの作者はRoberto Ierusalimschy(ロベルト・イエルザリムスキー)さん、Luiz Henrique de Figueiredo さん、Waldemar Celes さんの3名です。Robertoさんは現在もLuaのリードデベロッパーを務めており、PUC-Rioの小さなチームで一貫してメンテナンスが続けられています。大手企業でも財団でもなく、大学の研究室が世界中のゲーム業界で使われる言語を維持し続けている、というのがLuaのユニークな点の一つです。
Luaの設計哲学は「小さく保つ」に徹底的に振り切られています。言語本体のソースコードはC言語で約24,000行ほど。標準ライブラリを含めても数百KBのバイナリに収まります。文法もシンプルで、複合データ構造はテーブルひとつだけ。クラス構文を持たず、必要ならメタテーブルで再現する、という潔さです。「言語仕様を肥大化させない」「Cアプリケーションへの組み込みを最優先する」という方針が、Luaが30年経っても言語仕様を大きく変えずに使い続けられる理由になっています。
Lua の進化と LuaJIT の登場
Luaは控えめに進化を続けてきました。2003年のLua 5.0、2006年のLua 5.1、2011年のLua 5.2、2015年のLua 5.3、2020年のLua 5.4と、互換性を意識しながら段階的に改良されています。
もう一つの重要な節目が2005年に登場したLuaJITです。Mike Pall さんが開発したLuaの代替実装で、JIT(Just-In-Time)コンパイラを搭載しています。実行時にバイトコードをマシンコードへ変換するため、ベンチマークによってはC言語と同等の速度を出すこともあります。OpenResty(nginx + LuaJIT)や多くのゲームエンジンが採用しているのはLuaJITの側です。
| 年 | 出来事 |
|---|---|
| 1993 | Lua 1.0 リリース(PUC-Rioで誕生) |
| 2003 | Lua 5.0 リリース |
| 2005 | LuaJIT 公開(Mike Pallさんによる代替実装) |
| 2006 | Lua 5.1 リリース、ゲーム業界での採用が広がる |
| 2011 | Lua 5.2 リリース |
| 2015 | Lua 5.3 リリース(整数型の追加) |
| 2020 | Lua 5.4 リリース(世代別ガベージコレクション) |
現代における Lua の位置
Luaは特にゲーム業界で広く使われています。Roblox(ゲームロジック全般)、World of Warcraft(アドオン・UI)、Angry Birds、Civilization V / VI、Don't Starve、Factorio、Garry's Modなど、多数のゲームでLuaがスクリプト言語として採用されています。「ゲームのロジックはLuaで書く」というのはゲーム業界で広く見られる選択です。
ゲーム以外でも、OpenResty(nginx + LuaJITで動くWebプラットフォーム)、Redis(サーバーサイドスクリプト)、Neovim(設定とプラグイン)、Adobe Lightroom(プラグインとUI)、Wireshark(パケット解析のディセクタ記述)、ルーター・IoTデバイスのファームウェアなど、組み込みスクリプト用途でLuaは静かに広く使われています。
大規模で派手な言語が次々と登場する中、Luaは「小さくあること」「組み込まれる側であること」を貫き続け、結果的に他のスクリプト言語が入りにくい場所に定着しました。設計哲学が30年間ほぼ変わらない、というのもLuaの特徴です。
関連辞典
Lua言語そのものの文法・テーブル・コルーチン・C API・実用パターンはLua辞典で詳しく解説しています。