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











