前回KVSを開発したので、いよいよチーム開発にむけてOTPの雛型アプリを作成します。
Erlang本やErlangで書かれたプロジェクトのソースを読んでいると、Erlang OTPアプリケーションのディレクトリ構造や設定ファイルには、どうやら一定のルールがあるようです。
社内のErlangエンジニアに聞いてみたところ、仕事では手でディレクトリ構造を構築せず、rebarかrebar3を利用すべきだとアドバイスを頂きました。早速最新版のrebar3でOTPの雛型アプリを構築してみました。(rebarは古く、一部機能がメンテされず機能不全に陥ったためforkしてrebar3が開発された経緯があるそうです)
概要
- rebar3 インストール
- rebar3を利用したErlang OTPアプリケーションの生成
- ビルドとリリース
- コマンドラインからアプリの起動
1. rebar3インストール
Mac上で実行しています。rebar3のリポジトリから
rebar3_install
# mac向け手順
git clone https://github.com/erlang/rebar3.git
cd rebar3
./bootstrap
./rebar3 local install
# .bashrcに設定するとよい
export PATH=$PATH:/Users/{USERNAME/.cache/rebar3/bin
# rebar3 インストール確認
rebar3 --version
>> rebar 3.2.0+build.3479.ref4fd4195 on Erlang/OTP 18 Erts 7.1
2. rebar3を利用したErlang OTPアプリケーションの生成
アプリケーション作成はコマンド一つです。
rebar3_create_app
rebar3 new release name=kvs author_name="hami"
ソースコードに少し手を加えます。HTTPサーバのcowboyをprint文を仕込んでみました。
rebar.config
{erl_opts, [debug_info]}.
{deps, [
{cowboy, "1.0.1"}, % package
{cowboy, {git, "git://github.com/ninenines/cowboy.git", {tag, "1.0.1"}}} % alternatively, source
]}.
...略...
kvs_app.erl
...略...
start(_StartType, _StartArgs) ->
print("start"),
kvs_sup:start_link().
%%--------------------------------------------------------------------
stop(_State) ->
ok.
%% printer
print(Message) -> io:format("E: ~p~n",[Message]).
3. ビルドとリリース
ビルドとリリースも簡単です。成果物として_build配下にコンソールから起動できるアプリが生成されます。
rebar3_build
rebar3 compile
rebar3 release
4. コマンドラインからアプリの起動
ビルドが成功すると_buildディレクトリ下に実行アプリが格納されます。 《 _build/default/rel/ 》
早速コマンドライン上で実行してみましょう!
rebar3_app_start
$ cd _build/default/rel/kvs/
$ ./bin/kvs start
$ ./bin/kvs stop
ok
辛かったこと
インターネット上にあまり資料がなく公式ドキュメントと延々格闘しました。rebarの情報よりもrebar3の情報は本当に少ないです。公式ドキュメントが詳細な点は本当に本当に助かりました。