escript how to
これはDrecomアドベントカレンダー18日目の記事です。
17日はhayabusa333さんによるElixir環境構築にて暗号化でエラーにならないためにでした。
ドリコムでエンジニアをやっているおーはらです。
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プログラムの作成
escriptを使ったコマンドラインツールを作成していきましょう。escriptのプロジェクトは通常のElixirプロジェクトと作成方法は同じで、mix new
を使って作成します。
escriptプロジェクトと通常のElixirプロジェクトの違いは以下の3点です。
- mix.exsのprojectのescriptキーにmain_moduleのパラメータを設定する
- escriptのmain_moduleで指定したモジュールにmain関数を実装する
- escriptの実行時にmainモジュールのmain関数が実行される
実際にescriptプログラムを作成、実行してみましょう。
main_moduleの設定
プロジェクトディレクトリ以下のmix.exsを以下の様に変更します。
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
時に作成されます。
main関数はIOモジュールのputs関数を使って、標準出力にメッセージを表示させるだけです。
escriptのビルド
main関数の実装が完了したのでmix escript.build
でescriptをビルドします。
プロジェクトディレクトリにcli_demo
という実行ファイルが生成されます。
escriptの実行
cli_demo
は実行ファイルなので、これを以下の様に実行すると標準出力にメッセージが出力されます。
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をインストールできます。
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をインストールすると以下の様になります。
オプションを何も指定しない場合は、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
を追加してください。
インストールしたデモプログラムを実行すると、以下の様になります。
まとめ
escriptプログラムの作成・インストール方法を紹介しました。
ちょっとしたプログラムを扱うにはちょうど良い方法なので、試して見てはいかがでしょうか?