言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Lua辞典

  1. トップページ
  2. Lua辞典
  3. .luaファイルの作成と実行方法

.luaファイルの作成と実行方法

『Lua』のスクリプトは .lua 拡張子のテキストファイルに記述し、lua コマンドで実行します。ここでは .lua ファイルの基本的な書き方と、コマンドラインからの実行方法を確認します。

構文

-- -----------------------------------------------
-- .lua ファイルの基本構成
-- -----------------------------------------------

-- 1行コメント: "--" から行末までがコメントです
--[[
    複数行コメント: "--[[" で開始し "]]--" または "]]" で終了します
    ファイル先頭のブロックコメントにライセンス情報や説明を書くことがあります
]]--

-- モジュールの読み込み(require)
-- 標準ライブラリや外部モジュールを読み込む際に使います
local math = require("math")   -- 数学関数ライブラリを読み込みます

-- ローカル変数の定義
-- Lua ではデフォルトがグローバルスコープのため、"local" を必ず付けます
local name = "変数名"

-- 関数定義
local function 関数名(引数1, 引数2)
    -- 処理
    return 戻り値
end

-- メイン処理(エントリーポイント)
-- Lua にはメイン関数の強制はありませんが、以下のパターンが慣用的です
local function main()
    -- 処理をここにまとめると見通しがよくなります
end

main()  -- main 関数を呼び出してスクリプトを開始します

構文一覧

要素概要
-- コメント1行コメントです。-- から行末までがコメントとして扱われます。
--[[ ... ]]--複数行コメントです。ファイルの先頭説明やコードの一時無効化に使います。
local 変数名 = 値ローカル変数を定義します。local を付けないとグローバル変数になるため、基本的に常に付けます。
require("モジュール名")標準ライブラリや外部モジュールを読み込みます。戻り値をローカル変数で受け取ります。
local function 名前()ローカルスコープの関数を定義します。ファイル内でのみ参照できます。
main()定義した main 関数を呼び出します。Lua には強制的なエントリーポイントはありませんが、main 関数にまとめるパターンが慣用的です。
lua ファイル名.luaコマンドラインから .lua ファイルを実行します。最もよく使う実行方法です。
#!/usr/bin/env luashebang(シバン)行です。ファイルの1行目に記述してスクリプトに実行権限を付与すると ./ファイル名.lua で直接実行できます(Unix 系 OS)。

サンプルコード

yakuza_profile.lua
#!/usr/bin/env lua
--[[
    yakuza_profile.lua
    龍が如くシリーズのキャラクターを使って
    .lua ファイルの基本構成と実行方法を確認するサンプルです
]]--

-- -----------------------------------------------
-- モジュールの読み込み
-- -----------------------------------------------

-- string / math は Lua 組み込みライブラリです(require 不要ですが明示する例として記載)
local string = require("string")
local math = require("math")

-- -----------------------------------------------
-- 定数の定義
-- -----------------------------------------------

-- 大文字スネークケースで定数を表すのが Lua の慣習です
local SERIES_TITLE = "龍が如く"
local RANK_S_THRESHOLD = 90
local RANK_A_THRESHOLD = 75

-- -----------------------------------------------
-- データ定義(テーブル)
-- -----------------------------------------------

-- キャラクター情報をテーブルの配列として定義します
local characters = {
    { name = "桐生一馬", title = "嶋野の狂犬", strength = 98, style = "龍が如く" },
    { name = "真島吾朗", title = "嶋野の狂犬", strength = 97, style = "狂犬" },
    { name = "堂島大吾", title = "堂島の龍の息子", strength = 72, style = "成長中" },
    { name = "錦山彰", title = "桐生の兄弟分", strength = 88, style = "格闘" },
    { name = "冴島大河", title = "米花組組長", strength = 93, style = "柔道" },
}

-- -----------------------------------------------
-- 関数定義
-- -----------------------------------------------

-- 強さの数値からランクを返す関数です
local function get_rank(strength)
    if strength >= RANK_S_THRESHOLD then
        return "S ランク"
    elseif strength >= RANK_A_THRESHOLD then
        return "A ランク"
    else
        return "B ランク"
    end
end

-- キャラクター情報を整形して1行の文字列を返す関数です
local function format_character(index, chara)
    local rank = get_rank(chara.strength)
    -- string.format で桁を揃えて出力します
    return string.format(
        "  %d. %-10s  スタイル: %-8s  強さ: %2d  [%s]",
        index, chara.name, chara.style, chara.strength, rank
    )
end

-- -----------------------------------------------
-- メイン処理
-- -----------------------------------------------

local function main()
    -- タイトル表示
    print("=== " .. SERIES_TITLE .. " キャラクター一覧 ===")
    print("")

    -- ipairs でテーブルをインデックス付きで走査します
    for i, chara in ipairs(characters) do
        print(format_character(i, chara))
    end

    print("")

    -- -----------------------------------------------
    -- 集計処理
    -- -----------------------------------------------

    local total = 0
    for _, chara in ipairs(characters) do
        total = total + chara.strength  -- 合計を累積します
    end

    -- math.floor で小数点以下を切り捨てます
    local average = math.floor(total / #characters)

    print("--- 集計 ---")
    print("  キャラクター数: " .. #characters)  -- # 演算子でテーブルの要素数を取得します
    print("  強さ合計:       " .. total)
    print("  強さ平均:       " .. average)
    print("")
    print("スクリプト実行完了。")
end

-- main 関数を呼び出してスクリプトを開始します
main()

実行すると次のように出力されます。

lua yakuza_profile.lua
=== 龍が如く キャラクター一覧 ===

  1. 桐生一馬      スタイル: 龍が如く   強さ: 98  [S ランク]
  2. 真島吾朗      スタイル: 狂犬       強さ: 97  [S ランク]
  3. 堂島大吾      スタイル: 成長中     強さ: 72  [B ランク]
  4. 錦山彰        スタイル: 格闘       強さ: 88  [A ランク]
  5. 冴島大河      スタイル: 柔道       強さ: 93  [S ランク]

--- 集計 ---
  キャラクター数: 5
  強さ合計:       448
  強さ平均:       89

スクリプト実行完了。

概要

『Lua』のスクリプトファイルは .lua 拡張子を持つプレーンテキストです。lua ファイル名.lua でコマンドラインから実行できます。Unix 系 OS では1行目に #!/usr/bin/env lua(shebang)を記述してファイルに実行権限(chmod +x)を付与すると、./ファイル名.lua で直接実行できます。Lua はグローバル変数がデフォルトのため、変数・関数の宣言には local を付けてスコープを制限するのが必須のベストプラクティスです。複数行コメントは --[[ ... ]]--、1行コメントは -- で記述します。外部ライブラリや標準ライブラリを使う場合は require() で読み込みます。明示的なエントリーポイントはありませんが、処理を local function main() ... end にまとめてファイル末尾で main() を呼び出すパターンが可読性の高いコードになります。セットアップと実行環境 も合わせて確認してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。