10分でわかるLua入門
Luaは超軽量なプログラミング言語で、他のアプリに組み込んで使うのが得意。知ってた?『ワールドオブウォークラフト』やRobloxみたいなゲームでも使われてるし、設定ファイルのスクリプトとしても人気なんだ。
1. 最初のLuaプログラム
さあ、最初の一歩から始めよう。hello.lua
ってファイルを作って、中に書いて:
print("Hello, World!")
保存したら、ターミナルでこう打つ:
lua hello.lua
するとこう出る:
Hello, World!
見ての通り、超簡単!print()
は画面に文字を表示する関数だよ。
2. 基本文法
Luaの文法はめっちゃシンプル:
-- これは一行コメント
print("こんにちは、世界!")
--[[
これは複数行コメント
何行でも書けるよ
]]
覚えておくべきポイント:
- コメント:一行は
--
、複数行は--[[ ]]
- 文:一行一命令、セミコロンはいらない
- 大文字小文字:区別するから注意
- 空白:スペースや改行は自由
3. 変数とデータ型
Luaは動的型付けだから、型宣言いらない:
-- そのまま代入
名前 = "Lua"
年齢 = 25
素敵 = true
円周率 = 3.14159
-- まとめて代入もできる
x, y, z = 10, 20, 30
-- 空の値はnil
空変数 = nil
print("名前:", 名前)
print("年齢:", 年齢)
print("素敵?:", 素敵)
Luaのデータ型:
- nil:値がない
- boolean:trueかfalse
- number:数値(整数も小数も)
- string:文字列
- table:Luaの万能データ構造
- function:関数(第一級オブジェクト)
- userdata:C言語用
- thread:コルーチン
4. 文字列操作
-- 文字列の作り方
str1 = "こんにちは"
str2 = '世界'
str3 = [[複数行
文字列もOK]]
-- 文字列結合は..
メッセージ = str1 .. " " .. str2
print(メッセージ) -- 出力: こんにちは 世界
-- 文字列の長さは#
長さ = #"こんにちは"
print(長さ) -- 出力: 5
-- 文字列メソッド
テキスト = "hello world"
大文字 = テキスト:upper()
小文字 = テキスト:lower()
部分 = テキスト:sub(1, 5)
print(大文字) -- 出力: HELLO WORLD
print(部分) -- 出力: hello
5. テーブル - Luaの万能コンテナ
テーブルはLuaの最強機能:
-- 配列として(インデックスは1から)
フルーツ = {"りんご", "バナナ", "チェリー"}
print(フルーツ[1]) -- 出力: りんご
print(フルーツ[2]) -- 出力: バナナ
-- 辞書として
人物 = {
名前 = "太郎",
年齢 = 30,
都市 = "東京"
}
print(人物.名前) -- 出力: 太郎
print(人物["年齢"]) -- 出力: 30
-- 混在も可能
混合テーブル = {
"りんご",
"バナナ",
色 = "赤",
個数 = 5
}
-- テーブル操作
フルーツ = {"りんご", "バナナ"}
table.insert(フルーツ, "チェリー") -- 最後に追加
table.insert(フルーツ, 2, "オレンジ") -- 2番目に挿入
print(table.concat(フルーツ, ", ")) -- 出力: りんご, オレンジ, バナナ, チェリー
6. 制御構造
-- if文
年齢 = 18
if 年齢 >= 18 then
print("成人です")
elseif 年齢 >= 13 then
print("10代です")
else
print("子供です")
end
-- whileループ
カウンター = 1
while カウンター <= 5 do
print("カウント:", カウンター)
カウンター = カウンター + 1
end
-- forループ(数値)
for i = 1, 5 do
print("数字:", i)
end
-- forループ(ステップ指定)
for i = 10, 1, -2 do
print("カウントダウン:", i)
end
-- forループ(テーブル巡回)
フルーツ = {"りんご", "バナナ", "チェリー"}
for 番号, フルーツ名 in ipairs(フルーツ) do
print(番号, フルーツ名)
end
人物 = {名前 = "太郎", 年齢 = 30}
for キー, 値 in pairs(人物) do
print(キー, 値)
end
7. 関数
-- 基本関数
function 挨拶(名前)
return "こんにちは, " .. 名前 .. "!"
end
メッセージ = 挨拶("花子")
print(メッセージ) -- 出力: こんにちは, 花子!
-- 複数戻り値
function 計算(a, b)
return a + b, a - b, a * b, a / b
end
合計, 差, 積, 商 = 計算(10, 5)
print("合計:", 合計) -- 出力: 合計: 15
print("差:", 差) -- 出力: 差: 5
-- 無名関数(ラムダ)
乗算 = function(x, y)
return x * y
end
結果 = 乗算(4, 5)
print(結果) -- 出力: 20
-- 関数を引数として
function 操作実行(x, y, 操作)
return 操作(x, y)
end
結果 = 操作実行(6, 7, 乗算)
print(結果) -- 出力: 42
8. モジュール
コードを分けて書こう。数学ツール.lua
を作成:
-- 数学ツール.lua
local 数学ツール = {}
function 数学ツール.加算(a, b)
return a + b
end
function 数学ツール.乗算(a, b)
return a * b
end
return 数学ツール
メインファイルで使用:
-- メイン.lua
local 数学ツール = require("数学ツール")
結果 = 数学ツール.加算(10, 5)
print("加算結果:", 結果) -- 出力: 加算結果: 15
結果 = 数学ツール.乗算(4, 6)
print("乗算結果:", 結果) -- 出力: 乗算結果: 24
9. エラー処理
-- pcallでエラー捕捉
function 危険操作()
error("エラー発生!")
end
-- pcallは保護呼び出し
成功, 結果 = pcall(危険操作)
if 成功 then
print("成功:", 結果)
else
print("失敗:", 結果)
end
-- 独自エラー
function 除算(a, b)
if b == 0 then
error("ゼロ除算はダメ")
end
return a / b
end
成功, 結果 = pcall(除算, 10, 0)
if not 成功 then
print("エラー:", 結果)
end
10. 実践例
-- 簡易電卓
function 電卓()
print("🐮 簡易電卓")
print("1. 加算")
print("2. 減算")
print("3. 乗算")
print("4. 除算")
選択 = tonumber(io.read())
print("最初の数字:")
数1 = tonumber(io.read())
print("次の数字:")
数2 = tonumber(io.read())
if 選択 == 1 then
結果 = 数1 + 数2
print("結果:", 結果)
elseif 選択 == 2 then
結果 = 数1 - 数2
print("結果:", 結果)
elseif 選択 == 3 then
結果 = 数1 * 数2
print("結果:", 結果)
elseif 選択 == 4 then
if 数2 ~= 0 then
結果 = 数1 / 数2
print("結果:", 結果)
else
print("❌ ゼロ除算")
end
else
print("🤔 選択ミス")
end
end
-- 使うときはコメント外して
-- 電卓()
-- ファイル操作
function ファイル読み込み(ファイル名)
local ファイル = io.open(ファイル名, "r")
if not ファイル then
return nil, "ファイル開けません"
end
local 内容 = ファイル:read("*a")
ファイル:close()
return 内容
end
内容, エラー = ファイル読み込み("例.txt")
if 内容 then
print("ファイル内容:", 内容)
else
print("エラー:", エラー)
end
まとめ
Luaは本当に使いやすい!特に:
- 🎮 ゲームスクリプト(多くのゲームで採用)
- 🔧 組み込み開発(軽量だから)
- ⚙️ 設定ファイルや自動化
- 🚀 高性能が必要な場面(LuaJITと組み合わせて)
Luaのすごいところ:
- 超軽量:容量小さめ
- 高速:LuaJITで爆速
- 柔軟:動的型付け+万能テーブル
- どこでも動く:モバイルからサーバーまで
- 組み込み容易:C/C++と相性抜群
もっと深く学びたい?これらを試してみて:
- Lua標準ライブラリ
- コルーチン(並行プログラミング)
- メタテーブルとメタメソッド(OOP実現)
- LuaとCの連携
- Love2Dゲームフレームワーク
Luaは習得が早く、機能も豊富。さあ使ってみよう!🚀