本文へスキップ
totonoe.tech

プログラミング言語を整える

中級

Lua を整える。

= 1始まりの添字と多値返却——Lua 5.4 をブラウザ内で動かして覚える練習場

Lua が初めての方は、先に そもそも Lua とは・どんな場面で使うか をどうぞ。

サンプルコード(クリックでエディタに挿入)

LUA EDITOR Lua 5.4 (wasmoon WASM)

OUTPUT

Lua コードを書いて「実行」を押すと、ここに print 出力が出ます。

そもそも Lua とは

小さくて軽く、他のソフトに組み込んで使われる言語。

Lua は、ブラジルのリオデジャネイロ・カトリック大学(PUC-Rio)で1993年に生まれた、小さくて軽いプログラミング言語です。名前はポルトガル語で「月」の意味です。単体で大きなアプリを作るというより、他のソフトの中に組み込んで使うことを得意としています。

本体が小さく、組み込みやすいため、ゲームやソフトの「設定や動きを後から書き換えられる部分」にたびたび採用されています。同じスクリプト言語の仲間として Python や JavaScript がありますが、Lua は軽さと組み込みやすさに特化している点が違いです。

どこで・どんな場面で使うか

  • ゲームの動きを書くとき

    キャラクターの動きやイベントなど、ゲーム内のスクリプトに使われています。

  • Roblox でゲームを作るとき

    Roblox では、Lua から派生した Luau という言語でゲームを作ります。

  • エディタなどの拡張

    Neovim のように、設定や拡張機能を Lua で書けるソフトがあります。

  • 機器やソフトへの組み込み

    小さなメモリでも動くので、機器の設定やソフトの自動化に使われます。

  • 求人・仕事での位置づけ

    ゲーム開発や組み込み系で、他の言語と一緒に使える人として評価される場面があります。

向いている場面・向いていない場面

  • 向いている:ソフトの中の動きを書き換えたいとき。本体を作り直さなくても、スクリプトだけ差し替えて挙動を変えられます。
  • 向いている:まず小さく試したいとき。文法が少なく、短い時間で全体をつかめます。
  • 向いていない:Web サイトや業務システムを一から作るとき。そうした場面では、用意されている道具の多い他の言語のほうが選ばれやすいです。

上の練習場でサンプルを選んで実行し、テーブルひとつで配列も辞書も表すという Lua らしさを試してみてください。

使い方

6 ステップで Lua の骨格をつかむ。

  1. 1

    Hello World — print で出力する

    print("Hello") が Lua の一番の基本。

  2. 2

    変数と型 — local で宣言する

    local を付けないとグローバル変数になってしまう点に注意。型は number / string / boolean / nil の動的型。

  3. 3

    テーブル — 配列も辞書もこれ1つ

    Lua には配列型・辞書型が別々にはない。{ } で作るテーブルが両方を兼ねる。添字は1始まり。

  4. 4

    for / while — 繰り返し

    数値 for・ipairs による配列走査・while の3種類。

  5. 5

    関数 — 複数の値を同時に返せる

    function で定義。return a, b のように多値返却ができるのが特徴。

  6. 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の「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

データの時点:各ページに記載の版(各プロジェクトの公式リリース)

データの更新予定の一覧

運営サイト

私たちが運営するサイト