Symfoware

Symfowareについての考察blog

luviでLuaプログラムをバイナリの実行形式に変換する

とても刺激的な記事を見つけました。
最も重要なプロダクション・コードにLuaを使う : PythonからLuaへの移行

「luvi」
https://github.com/luvit/luvi

このプロジェクトで、Luaのプログラムをバイナリで実行可能にできるようです。
Ubuntu 14.04で試してみます。



luviの取得



自分でビルドすることもできますが、今回はリリースされているバイナリを使用することにしました。
https://github.com/luvit/luvi/releases

各種OSにマッチするバイナリを選択します。
Ubuntuなので、luvi-regular-Linux_x86_64をダウンロード。
「luvi」というファイル名に変更し、実行権限を付与しました。


$ mv luvi-regular-Linux_x86_64 luvi
$ chmod +x luvi




これ以外にLuaやLuaJITも必要なのかなと思っていたのですが、
もうこれだけでLuaの開発環境を手に入れています。





Hello World!



luviを-h付きで実行するとヘルプが表示されます。


$ ./luvi -h
Usage: ./luvi bundle+ [options] [-- extra args]

bundle            Path to directory or zip file containing bundle source.
                    `bundle` can be specified multiple times to layer bundles
                    on top of each other.
--version         Show luvi version and compiled in options.
--output target Build a luvi app by zipping the bundle and inserting luvi.
--main path     Specify a custom main bundle path (normally main.lua)
--help            Show this help file.
--                All args after this go to the luvi app itself.

Examples:

# Run an app from disk, but pass in arguments
./luvi path/to/app -- app args

# Run from a app zip
./luvi path/to/app.zip

# Run an app that layers on top of luvit
./luvi path/to/app path/to/luvit

# Bundle an app with luvi to create standalone
./luvi path/to/app -o target
./target some args

# Run unit tests for a luvi app using custom main
./luvi path/to/app -m tests/run.lua





引数にmain.luaというファイルが保存されているパスを渡します。
すると、自動的にmain.luaが実行されると言うわけです。

my_appというディレクトリを作成し、mail.luaファイルを作成しました。

666_01.png


main.luaの内容はこれです。

・main.lua


  1. print("Hello World!")




実行してみます。


$ ./luvi my_app
Hello World!



luviだけでluaのプログラムが実行できます。
これはすごい。




実行ファイルの作成



ヘルプにもあるように、-o [出力するファイル名]としてやると、
単体で実行可能なバイナリが出来上がります。


$ ./luvi my_app -o target
Creating new binary: /home/baranche/dev/luvi/target
Copying initial 4341304 bytes from /home/baranche/dev/luvi/luvi
Zipping /home/baranche/dev/luvi/my_app
    main.lua
Writing zip file
Done building /home/baranche/dev/luvi/target



666_02.png



出力されたtargetは直接実行可能です。


$ ./target
Hello World!







Windowsでの実行



luvi-regular-Windows-amd64.exeをダウンロード。
Windows 10で同じことをやってみました。

666_03.png

当たり前ですが、同じプログラムからちゃんと実行可能なバイナリが出力できます。


小物のプログラムを実行するためだけに、環境を構築するのは面倒です。

Linuxで実行したいときは、「Perl」や「Python」。
Windowsで実行したいときは、「C#」等でプログラムを書いていたのですが、
luviを使用するとこの問題は解決できそうです。


関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2016/02/16(火) 21:51:03|
  2. Lua
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<luvi 実行ファイルに同梱されているファイルの取得 | ホーム | LFTPでFTPサーバーにミラーリングアップロード>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1841-1565d837
この記事にトラックバックする(FC2ブログユーザー)