公開技術情報

[English] [Japanese]

01. 導入編

今回は、 LuneScript の導入方法についての紹介です。

LuneScript on Web Browser

LuneScript の動作確認用に、Web ブラウザ上で動作する LuneScript 環境を用意しています。

../onweb

また、以降のサンプルソースには 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 について紹介します。