Learn in 10 minutes

Learn in 10 minutes

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は習得が早く、機能も豊富。さあ使ってみよう!🚀