プログラミング言語を整える
中級Lua を整える。
= 1始まりの添字と多値返却——Lua 5.4 をブラウザ内で動かして覚える練習場
Lua が初めての方は、先に そもそも Lua とは・どんな場面で使うか をどうぞ。
サンプルコード(クリックでエディタに挿入)
OUTPUT
Lua コードを書いて「実行」を押すと、ここに print 出力が出ます。
そもそも Lua とは
小さくて軽く、他のソフトに組み込んで使われる言語。
Lua は、ブラジルのリオデジャネイロ・カトリック大学(PUC-Rio)で1993年に生まれた、小さくて軽いプログラミング言語です。名前はポルトガル語で「月」の意味です。単体で大きなアプリを作るというより、他のソフトの中に組み込んで使うことを得意としています。
本体が小さく、組み込みやすいため、ゲームやソフトの「設定や動きを後から書き換えられる部分」にたびたび採用されています。同じスクリプト言語の仲間として Python や JavaScript がありますが、Lua は軽さと組み込みやすさに特化している点が違いです。
どこで・どんな場面で使うか
-
ゲームの動きを書くとき
キャラクターの動きやイベントなど、ゲーム内のスクリプトに使われています。
-
Roblox でゲームを作るとき
Roblox では、Lua から派生した Luau という言語でゲームを作ります。
-
エディタなどの拡張
Neovim のように、設定や拡張機能を Lua で書けるソフトがあります。
-
機器やソフトへの組み込み
小さなメモリでも動くので、機器の設定やソフトの自動化に使われます。
-
求人・仕事での位置づけ
ゲーム開発や組み込み系で、他の言語と一緒に使える人として評価される場面があります。
向いている場面・向いていない場面
- 向いている:ソフトの中の動きを書き換えたいとき。本体を作り直さなくても、スクリプトだけ差し替えて挙動を変えられます。
- 向いている:まず小さく試したいとき。文法が少なく、短い時間で全体をつかめます。
- 向いていない:Web サイトや業務システムを一から作るとき。そうした場面では、用意されている道具の多い他の言語のほうが選ばれやすいです。
上の練習場でサンプルを選んで実行し、テーブルひとつで配列も辞書も表すという Lua らしさを試してみてください。
使い方
6 ステップで Lua の骨格をつかむ。
- 1
Hello World — print で出力する
print("Hello")が Lua の一番の基本。 - 2
変数と型 — local で宣言する
localを付けないとグローバル変数になってしまう点に注意。型は number / string / boolean / nil の動的型。 - 3
テーブル — 配列も辞書もこれ1つ
Lua には配列型・辞書型が別々にはない。
{ }で作るテーブルが両方を兼ねる。添字は1始まり。 - 4
for / while — 繰り返し
数値 for・
ipairsによる配列走査・while の3種類。 - 5
関数 — 複数の値を同時に返せる
functionで定義。return a, bのように多値返却ができるのが特徴。 - 6
メタテーブル — クラス風の設計図
Lua に
class構文は無い。__indexを使ったメタテーブルでオブジェクト指向っぽく組む。
💡 io / os はこの練習場では使えません(ファイル・OS 操作は送信ゼロの原則から外れるため)。
無限ループを書いても既定 3 秒で自動的に停止します。
書いたコードと実行結果は、どこにも送信されません(すべてブラウザ内で実行)。
🌐 ただし1点だけ補足します。このページを開いただけでは外部通信は発生しませんが、
「実行」を押した最初の1回だけ、Lua の実行環境(wasmoon 1.16.0・Lua 5.4)を配信元の
cdn.jsdelivr.net から取得します(約0.3MB)。
これはプログラムを受け取るだけの通信で、あなたが書いたコードや実行結果が送られることはありません。
ただし通信である以上、配信元にはお使いの回線の IP アドレスが見えます。
「入力は端末から出さない」という当サイトの原則に関わる点なので、隠さずに書いておきます。
このツールについて
Lua はテーブル1つで配列も辞書も表す、軽量で組み込みやすい言語。ブラウザ内で Lua が動くので、書いて → 実行 → print 出力と戻り値を安全に何度でも試せます。
ブラウザ内 Lua 5.4(wasmoon) で Hello World → 変数 → テーブル → 繰り返し → 関数 → メタテーブル を試せる Playground。1始まりの添字・多値返却など Lua らしい癖も体験できます。
主な機能
- 7サンプル(テーブル・多値返却・メタテーブルのクラス風表現を含む)
- Web Worker 実行で無限ループは3秒で自動停止
- 戻り値(最後の return)と print 出力を分けて表示
- CodeMirror 6 シンタックスハイライト・Ctrl/⌘+Enter で実行
- 処理系は cdn.jsdelivr.net から初回のみ約0.3MB・以降はキャッシュ
- io・os は使えない練習用環境・送信ゼロ
よくある質問
Q. Lua のコードはどこで実行されますか?外部に送信されますか?
A. すべてブラウザ内で Lua 5.4(wasmoon・WASM)が実行します。書いたコードも実行結果もどこにも送信されません。最初の1回だけ、実行環境(約0.3MB)を cdn.jsdelivr.net から取得します。
Q. 無限ループを書いたらどうなりますか?
A. Web Worker の中で実行しているため、3秒を超えると自動的に停止し、画面が固まることはありません。次の実行では実行環境を作り直します。
Q. local を付け忘れるとどうなりますか?
A. Lua では既定でグローバル変数になります。サンプル「変数と型」のとおり、local を付けるのが基本です。
Q. 配列の添字が思った値と違うのですが?
A. Lua のテーブル(配列)は 0 ではなく 1 始まりです。「Lua らしい1本」のサンプルで確認できます。
Q. io.open や os.execute は使えますか?
A. 使えません。ファイル操作や OS 操作は、この練習場では呼び出さない運用です(送信ゼロの原則)。
入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。
続けて整える
データの時点:各ページに記載の版(各プロジェクトの公式リリース)