01. 導入編
今回は、 LuneScript の導入方法についての紹介です。
LuneScript on Web Browser
LuneScript の動作確認用に、Web ブラウザ上で動作する LuneScript 環境を用意しています。
また、以降のサンプルソースには Run ボタンを持つケースがあります。 そのボタンを押すことで、そのサンプルソースを実行できます。 そして、そのソースを修正して実行することもできます。
Run ボタンを押してからサンプルを実行するまでに、 初回は数秒から 10 秒程度時間がかかります (時間はネットワーク環境、端末スペックに依存します)。 これは、ブラウザ上に Lua VM と、LuneScript コンパイラをロードするためです。
一旦ロードした後に再度実行する場合、 このロード処理が行なわれないため瞬時に実行できます。
LuneScript の導入方法
LuneScript は、次の 2 つの提供方法を用意しています。
- 単独で実行可能なシングルバイナリの go バージョン
- Lua のスクリプトとして動作する Lua バージョン
go バージョン
git に登録しているソースから LuneScript を ビルドするための Dockerfile を用意しています。
https://github.com/ifritJP/LuneScript/tree/master/src/test/docker/compose
- linux/build/Dockerfile
- alpine/build/Dockerfile
次を実行すると、LuneScript/src に Linux 用の lnsc が生成されます。
$ git clone --depth 1 https://github.com/ifritJP/LuneScript $ cd LuneScript/src $ sudo docker build -t linux_lns test/docker/compose/linux/build $ sudo docker run --rm -v $PWD:/local linux_lns cp /usr/bin/lnsc /local/lnsc
lnsc に PATH を通してください。
なお、 proxy 環境下では docker build 時に以下のように proxy を指定してください。
$ sudo docker build -t linux_lns test/docker/compose/linux/build --build-arg PROXY=http://proxy.hoge/
go 版の LuneScript 導入は以上です。
Lua バージョン
Lun 版の LuneScript は、 go 版と比べてトランスコンパイル時間が非常に長いです。 go 版を利用することを推奨します。
LuneScript は Lua のトランスコンパイラです。 また、LuneScript 自体も Lua のスクリプトとして動作します。
よって、 Lua 版の LuneScript には Lua の実行環境が必要です。
なお、 LuneScript が対応している Lua のバージョンは 5.1, 5.2, 5.3, 5.4 です。
ただし Lua 5.1 で利用する場合、幾つかの制限があります。 具体的な制限の内容については、別の記事で説明します。
追記: 12/10 (Lua 5.1 対応について)
システムにデフォルトでインストールされている Lua のバージョンは、 多くの場合 5.1 系です。
次のコマンドでインストールされている Lua のバージョンを確認してください。
$ lua -v
Lua の導入
Lua は次の URL からダウンロードできます。
http://www.lua.org/download.html
Linux であれば、パッケージ管理で簡単に導入できますが、 Lua のバージョンには注意してください。
例えば ubuntu 等の apt 系のパッケージ管理では、次のコマンドで導入できます。
$ sudo apt install lua5.3
Windows の場合
Windows では、cygwin 版 Lua が必要です。
トランスコンパイル後の Lua コードは、 cygwin 版でなくとも動作します。
しかし、LuneScript 自体は linux 環境を想定しているため cygwin が必要になります。
必ず cygwin 版 Lua を用意してください。
Windows Subsystem for Linux で動作するかどうかは、後程確認します。
WSL2 で動作するので、 cygwin 版ではなく WSL2 でも可能です。
LuneScript の導入
前述している通り、LuneScript は Lua のスクリプトとして動作します。
Lua のモジュール管理は非常に単純で、 Lua が管理するモジュールディレクトリにファイルを置くだけです。
LuneScript のモジュールは、github に公開しています。
https://github.com/ifritJP/LuneScript
手動でファイルコピーすることでもセットアップできますが、 以降では LuneScript の setup.lua を使ったセットアップ方法について説明します。
手動でファイルコピーする方法は、 Lua のモジュール管理を熟知していないと難しいです。
LuneScript の導入方法
LuneScript の setup.lua を実行します。
手順は次の通りです。
$ git clone https://github.com/ifritJP/LuneScript.git
$ cd LuneScript/src
$ lua5.3 setup.lua -d
$ sudo make install
これにより、 LuneScript がモジュールディレクトリにインストールされます。
LuneScript をインストールする Lua のモジュールディレクトリを指定したい場合、
lua5.3 setup.lua -d
の -d を外して実行してください。
Lua が管理するモジュールディレクトリ
Lua が管理するモジュールディレクトリは次のコマンドで確認できます。
$ lua5.3 -e 'print( package.path )'
上記コマンドの結果は、次のようになります。 (環境によって異なります)
/usr/local/share/lua/5.3/?.lua;/usr/local/share/lua/5.3/?/init.lua;/usr/local/lib/lua/5.3/?.lua;/usr/local/lib/lua/5.3/?/init.lua;/usr/share/lua/5.3/?.lua;/usr/share/lua/5.3/?/init.lua;./?.lua;./?/init.lua
これを ; で区切ると次になります。
/usr/local/share/lua/5.3/?.lua
/usr/local/share/lua/5.3/?/init.lua
/usr/local/lib/lua/5.3/?.lua
/usr/local/lib/lua/5.3/?/init.lua
/usr/share/lua/5.3/?.lua
/usr/share/lua/5.3/?/init.lua
./?.lua
./?/init.lua
細かい説明は省きますが、 次のディレクトリが Lua が管理するモジュールディレクトリになります。
/usr/local/share/lua/5.3
/usr/local/lib/lua/5.3
/usr/share/lua/5.3
./
ディレクトリは環境によって異なります。
環境変数によってもモジュールディレクトリを指定することは出来ますが、 ここでの説明は割愛します。
emacs の設定
LuneScript は、emacs で開発するための emacs lisp を提供しています。
次の設定をしてください。
(add-to-list 'load-path "my-lune-path") ;;; clone した LuneScript のパスを指定
(setq lns-lua-command "/usr/local/bin/lua") ;;; lua のパス
(require 'lns-conf)
(require 'lns-flymake)
(require 'lns-company-mode)
(require 'lns-helm)
これにより、次が利用できます。
- .lns ファイルのインデント、色付け
- flymake による構文チェック
- company-mode による補完
構文チェックは flymake と flycheck をサポートしています。 flycheck を利用したい場合 lns-flymake ではなく、 lns-flycheck を require してください。
helm, company-mode, flycheck, flymake は、別途 M-x package-install してください。
プロジェクトファイル
LuneScript は、モジュール管理にディレクトリ階層を利用します。 よって、 LuneScript でトランスコンパイルを行なう際の カレントディレクトリは重要になります。
トランスコンパイルを行なう際のカレントディレクトリに、 次の名前のファイルを置くことで、 プロジェクトファイルとして扱います。
lune.js
特にエディタで LuneScript のソースを編集する場合、 その LuneScript ソースのプロジェクトディレクトリが何処なのか認識するために、 このファイルが検索されるので、 必ず上記ファイルを生成してください。
プロジェクトファイルのフォーマット
プロジェクトファイルは JSON 形式です。
最低限、次の内容を持つ lune.js ファイルを作成してください。
{}
このファイルを置いたディレクトリが、モジュールの起点ディレクトリとなります。
例えば次のようなディレクトリ構成の場合、
foo/
foo/lune.js
foo/bar/
foo/bar/mod1.lns
bar.mod1 が、mod1.lns のモジュールパスとなります。
コマンドラインオプション追加
プロジェクトファイルに、 LuneScript のコマンドラインオプションを設定しておくことで、 トランスコンパイル時にプロジェクトファイルに設定されている コマンドラインオプションを使用します。
コマンドラインオプションの設定は、
次のように cmd_option
キーで文字列リストを設定します。
{
"cmd_option": [ "--valid-luaval" ]
}
まとめ
Lua のモジュール管理は非常に単純なため、簡単に導入ができます。
次回は LuneScript による Hello World について紹介します。