Elixir

escript how to

escript how to

dac2017.png

これはDrecomアドベントカレンダー18日目の記事です。
17日はhayabusa333さんによるElixir環境構築にて暗号化でエラーにならないためにでした。

elixir-logo.png

ドリコムでエンジニアをやっているおーはらです。
Elixirのプログラムはmixを使ってプロジェクトとして作成・管理します。このプログラムを実行する際

  • 関連ライブラリの取得(mix deps.get)
  • コンパイル(mix compile)
  • 実行(iex -S mix)

といった手順が必要になるのですが、escriptを使うことで、簡単にElixirプログラムを実行することができます。

escriptとは

escriptはElixirプログラムをコマンドラインから呼び出すことができる実行ファイルです。
escriptプログラムの実行にはErlangがインストールされている事が必要です、つまりElixirが無くてもescriptを実行する事ができます。実はElixir自体がescriptに組み込まれているので、Elixirがインストールされていない環境でもErlangさえあればescriptを実行する事ができるのです。

escriptの管理はmixを使って行います。主なコマンドは以下となります。

コマンド 説明
mix escript ローカルにインストールされたescriptを表示
mix escript.build escriptプログラムを作成
mix escript.install escriptプログラムをローカルにインストール
mix escript.uninstall escriptプログラムをローカルからアンインストール

mixコマンドでインストールしたescriptプログラムは、HOME/.mix/escripts 以下に配置されます。

escript-1.png

escriptプログラムの作成

escriptを使ったコマンドラインツールを作成していきましょう。escriptのプロジェクトは通常のElixirプロジェクトと作成方法は同じで、mix newを使って作成します。

cli-1.png

escriptプロジェクトと通常のElixirプロジェクトの違いは以下の3点です。

  • mix.exsのprojectのescriptキーにmain_moduleのパラメータを設定する
  • escriptのmain_moduleで指定したモジュールにmain関数を実装する
  • escriptの実行時にmainモジュールのmain関数が実行される

実際にescriptプログラムを作成、実行してみましょう。

main_moduleの設定

プロジェクトディレクトリ以下のmix.exsを以下の様に変更します。

cli-2.png

project関数内のキーワードリストに、escriptをキーとする

escript: [main_module: <モジュール>]

を追加して、escript実行時に実行されるmainモジュールを指定します。サンプルコードでは、CliDemoモジュールをescript実行時に呼ばれるモジュールとして設定しています。

main関数の実装

escriptの実態は、mix.exsで指定したmainモジュールのmain関数です。前節でメインモジュールをCliDemoと設定したので、CliDemoモジュールにmain関数を実装します。
なお、CliDemoはlib/cli_demo.exとしてmix new時に作成されます。

cli-3.png

main関数はIOモジュールのputs関数を使って、標準出力にメッセージを表示させるだけです。

escriptのビルド

main関数の実装が完了したのでmix escript.buildでescriptをビルドします。

cli-4.png

プロジェクトディレクトリにcli_demoという実行ファイルが生成されます。

cli-5.png

escriptの実行

cli_demoは実行ファイルなので、これを以下の様に実行すると標準出力にメッセージが出力されます。

cli-6.png

escriptプログラムのインストール

mix escript.buildで実行ファイルをビルドしましたが、mix escript.installでビルド済みのescript実行ファイルを取得する事ができます。以下の3つからescriptを取得する事ができます。

  • ローカルのescriptプロジェクト
  • git(github)リポジトリ
  • hex.pm

取得した実行ファイルは、HOMEディレクトリ/.mix/escriptsに保存されます。

ローカルのescriptプロジェクトからinstall

ローカル環境のescriptプロジェクトがある場合、プロジェクトディレクトリでmix escript.installでescriptをインストールできます。

cli-8.png

mix escriptでinstallしたcli_demoがあることを確認できます。

git(github)リポジトリからinstall

githubのプロジェクトからescriptをインストールするコマンドは以下です。

コマンド
mix escript.install github {user}/{project}
mix escript.install github {user}/{project} branch {対象のブランチ}
mix escript.install github {user}/{project} tag {対象のタグ}
mix escript.install github {user}/{project} ref {対象のリファレンス}

デモプロジェクトのhttps://github.com/ohr486/escript_demoのescriptをインストールすると以下の様になります。

cli-9.png

オプションを何も指定しない場合は、masterブランチのescriptがインストールされます。

hex.pmからinstall

hex.pmからescriptをインストールするには、以下のコマンドを使います。

コマンド
mix escript.install hex {パッケージ}
mix escript.install hex {パッケージ} {バージョン}

インストールしたescriptの実行

インストールしたescriptファイルを実行するには、escriptのインストール先ディレクトリホームディレクトリ/.mix/escriptsを実行パスに含めます。
MacOSの場合は、.bash_profile.profileなりに、

export PATH=ホームディレクトリ/.mix/escripts:$PATH

を追加してください。
インストールしたデモプログラムを実行すると、以下の様になります。

exec-demo.png

まとめ

escriptプログラムの作成・インストール方法を紹介しました。
ちょっとしたプログラムを扱うにはちょうど良い方法なので、試して見てはいかがでしょうか?