Erlang
OTP
rebar3

Erlang チーム開発 rebar3でOTPアプリの雛型を作る

More than 1 year has passed since last update.

前回KVSを開発したので、いよいよチーム開発にむけてOTPの雛型アプリを作成します。

Erlang本やErlangで書かれたプロジェクトのソースを読んでいると、Erlang OTPアプリケーションのディレクトリ構造や設定ファイルには、どうやら一定のルールがあるようです。

社内のErlangエンジニアに聞いてみたところ、仕事では手でディレクトリ構造を構築せず、rebarかrebar3を利用すべきだとアドバイスを頂きました。早速最新版のrebar3でOTPの雛型アプリを構築してみました。(rebarは古く、一部機能がメンテされず機能不全に陥ったためforkしてrebar3が開発された経緯があるそうです)


概要


  1. rebar3 インストール

  2. rebar3を利用したErlang OTPアプリケーションの生成

  3. ビルドとリリース

  4. コマンドラインからアプリの起動


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"


■ コマンドを実行した結果、複数のファイルが生成されました

スクリーンショット 2016-06-20 21.16.10.png

ソースコードに少し手を加えます。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

■ 生成されたビルドファイル

スクリーンショット 2016-06-20 21.45.08.png


4. コマンドラインからアプリの起動

ビルドが成功すると_buildディレクトリ下に実行アプリが格納されます。 《 _build/default/rel/ 》

早速コマンドライン上で実行してみましょう!


rebar3_app_start

$ cd _build/default/rel/kvs/

$ ./bin/kvs start
$ ./bin/kvs stop
ok


辛かったこと

インターネット上にあまり資料がなく公式ドキュメントと延々格闘しました。rebarの情報よりもrebar3の情報は本当に少ないです。公式ドキュメントが詳細な点は本当に本当に助かりました。