なぜ LUA を LUAC に変換するのですか?
スクリプトをバイトコードとして配布することで、ロードごとのパースオーバーヘッドが解消され、ソースコードの不用意な閲覧を防ぐことができます。.luac 形式は Lua のネイティブなコンパイル済みバイトコード表現であり、すべての Lua インストールに含まれる標準の Lua ツールチェーンによって直接生成されます。
LUA から LUAC への変換方法
luac FREE
ターミナルで luac -o script.luac script.lua を実行します。-s を追加するとデバッグ情報が削除されファイルサイズが小さくなります。また、複数の .lua ファイルを指定して単一のバイトコードチャンクにコンパイルすることも可能です。
LuaJIT FREE
luajit -b script.lua script.luac を実行して、LuaJIT 独自のバイトコード形式にコンパイルします。LuaJIT のバイトコードは標準の Lua VM と互換性がないことに注意してください。
これらの形式について
品質と注意点
.luacファイルは、それをコンパイルした正確な Lua バージョンに紐付けられています。luac 5.4で作成されたバイトコードは、Lua 5.3 以前では拒否されます。- バイトコードは暗号化されていません。
unluacなどのツールを使用して.luacファイルを部分的に逆コンパイルすることが可能です。機密性の高いロジックの保護をこれに依存しないでください。 - バイトコード形式はプラットフォームに依存します。64ビットマシンでコンパイルされた
.luacは、32ビットデバイスで失敗する可能性があります。実行する環境と同じプラットフォームでコンパイルしてください。
よくある質問
Lua をインストールしていれば luac もインストールされていますか?
はい。
luac は公式の Lua 配布物に同梱されており、別途ダウンロードする必要はありません。.luac ファイルは元の .lua よりも速く動作しますか?
ロード時にパーサーの工程がスキップされるため、わずかに速くなります。ほとんどのスクリプトにおいて、その差はわずかです。
.luac ファイルから元の .lua ソースを復元できますか?
確実ではありません。逆コンパイラは存在しますが、近似的な出力しか生成できません。
luac に -s を渡すと行番号や関数名さえも削除されるため、復元はより困難になります。LuaJIT は標準の Lua と同じバイトコード形式を使用しますか?
いいえ。LuaJIT のバイトコードは標準の Lua VM と互換性がありません。ターゲットも LuaJIT を実行する場合にのみ
luajit -b を使用してください。