Menu
Coddy logo textTech

Lua チートシート

最終更新

Hello World とコードの実行

Lua は最小限で、1 つの文で動きます。

操作構文
1 行を出力print("Hello, World!")
複数の値を出力print("x", 1, true)
改行なしで書き出すio.write("Hi")
コメント-- this is a comment
複数行コメント--[[ ... ]]
文字列を連結print("Hi " .. name)
ファイルを実行lua app.lua
対話シェルlua

変数と型

変数は既定でグローバルです。ローカルは local で宣言します。

操作構文
ローカル変数local age = 30
グローバル変数count = 0
複数代入local a, b = 1, 2
8 つの型nil, boolean, number, string, table, function, userdata, thread
nil / 真偽値nil, true, false
型を調べるtype(x)"number" を返す
数値に変換tonumber("42")
文字列に変換tostring(42)

文字列

文字列は不変で、単一引用符も二重引用符も使えます。

操作構文
長さ#s または string.len(s)
連結s1 .. s2
大文字 / 小文字s:upper(), s:lower()
部分文字列s:sub(1, 3)
部分文字列を探すs:find("ell")
置換 (gsub)s:gsub("a", "b")
書式設定string.format("%05d", 42)
長い文字列[[ multi\nline ]]

テーブル (中核のデータ構造)

テーブルは Lua 唯一の構造型で、配列、マップ、オブジェクトとして働きます。

操作構文
空のテーブルlocal t = {}
配列形式 (1 始まり)local t = {10, 20, 30}
配列要素にアクセスt[1] (最初の要素)
マップ形式のテーブルlocal u = {name = "Ada", age = 30}
マップの値にアクセスu.name または u["name"]
値を設定t[4] = 40, u.email = "a@x.com"
配列部分の長さ#t
配列を反復 (ipairs)for i, v in ipairs(t) do ... end
すべてのキーを反復 (pairs)for k, v in pairs(u) do ... end
ネストしたテーブルlocal m = {a = {1, 2}}

制御フロー

ブロックは end で閉じます。偽となるのは nil と false だけです。

操作構文
if / elseif / elseif x > 0 then ... elseif x < 0 then ... else ... end
論理演算子and, or, not
数値 forfor i = 1, 10 do ... end
ステップ付きの forfor i = 10, 1, -1 do ... end
while ループwhile x < 100 do ... end
repeat-untilrepeat ... until done
breakbreak
不等価演算子if a ~= b then ... end

関数

関数は第一級の値で、複数の結果を返せます。

操作構文
関数を定義function add(a, b) return a + b end
ローカル関数local function square(x) return x * x end
無名関数local f = function(x) return x * 2 end
複数の戻り値function bounds() return 1, 10 end
複数の戻り値を受け取るlocal lo, hi = bounds()
可変長引数の関数function sum(...) ... end
可変長引数を集めるlocal args = {...}
メソッド (コロン構文)function obj:greet() ... end

string ライブラリ

string ライブラリのよく使う関数 (s:fn() の形でも呼べる)。

関数機能
string.len(s)文字列の長さ
string.sub(s, i, j)インデックス i から j までの部分文字列
string.upper(s)大文字にしたコピー
string.rep(s, n)文字列を n 回繰り返す
string.find(s, p)パターンを探し、開始/終了位置を返す
string.match(s, p)最初のパターンの一致を返す
string.gsub(s, p, r)パターンの一致をすべて置換
string.format(fmt, ...)値を文字列に整形

table と math ライブラリ

配列形式のテーブルや数値を扱うためのヘルパー。

関数機能
table.insert(t, v)末尾に値を追加
table.insert(t, i, v)位置 i に v を挿入
table.remove(t, i)位置 i の要素を削除して返す
table.concat(t, ", ")要素を文字列に連結
table.sort(t)配列をその場でソート
math.floor(x) / math.ceil(x)切り下げ / 切り上げ
math.max(...) / math.min(...)最大 / 最小の引数
math.random(1, 6)範囲内のランダムな整数

メタテーブル (簡潔に)

メタテーブルを使うと、演算子やインデックス参照など、テーブルの振る舞いをカスタマイズできます。

操作構文
メタテーブルを設定setmetatable(t, mt)
メタテーブルを取得getmetatable(t)
存在しないキーのフォールバックmt.__index = defaults
関数によるデフォルトmt.__index = function(t, k) ... end
加算をカスタマイズmt.__add = function(a, b) ... end
tostring をカスタマイズmt.__tostring = function(t) ... end
プロトタイプベースのオブジェクト指向mt.__index = ClassTable

最もよく使う Lua の構文を 1 ページにまとめました。この Lua チートシートは、言語の中核のクイックリファレンスです。変数と型、文字列、制御フロー、関数、そして Lua の唯一で柔軟なデータ構造として働くテーブルを収録し、さらに標準ライブラリとメタテーブルにも触れます。

ここに載っているものはすべて標準の Lua で、素のインタープリタで動きます。必要なものをコピーするか、Lua プレイグラウンドですべてのスニペットをその場で試してみてください。インストールは不要です。

Lua チートシート よくある質問

この Lua チートシートは無料ですか?
はい。この Lua チートシートは完全に無料で、登録も不要です。ブックマークしておけば、テーブル操作や文字列関数、制御フローのキーワードを調べたいときにいつでも戻ってこられます。
なぜ Lua のテーブルは配列でもありマップでもあるのですか?
テーブルは単なるキーと値のペアの集まりで、キーには任意の値を使えます。1 から始まる連続した整数のキーを使うと ({10, 20, 30})、テーブルは配列のようにふるまい、文字列のキーを使うと ({name = "Ada"})、マップのようにふるまいます。同じテーブルで両方を混在させることさえできます。だからこそ Lua には構造型が 1 つで足りるのです。テーブルが配列、辞書、集合、オブジェクトをまかないます。
なぜ Lua は 1 始まりのインデックスを使うのですか?
慣習と設計により、Lua の配列はインデックス 0 ではなく 1 から始まります。t[1] が最初の要素で、#t が個数です。長さ演算子 #table.insertipairs といったライブラリ関数はすべてこの 1 始まりの慣習を前提とするので、これを守れば配列のコードが期待どおりに動き続けます。
Lua をオンラインで練習できますか?
はい。Lua プレイグラウンドを開けば、このチートシートのどのスニペットもブラウザ上で実行できます。Lua のインストールは不要です。体系的に学びたいときは、Coddy の無料インタラクティブ Lua コースが、変数とテーブルから関数、メタテーブルまで段階的に導いてくれます。
このチートシートは初心者に向いていますか?
はい。最もよく使うトピック (変数、文字列、テーブル、制御フロー) から高度なもの (標準ライブラリとメタテーブル) へと並べてあるので、初日から上のセクションを使い、残りには慣れながら進めます。
Coddy programming languages illustration

CoddyでLuaを学ぼう

始める