rebar3について
rebar3はrebarの次のバージョンである.
rebar3のREADMEで書かれている通り, 現状rebarのいくつかの機能が壊れており作り直しをしている.
例えば, eunitでsuiteの指定がうまくいかないなどの問題が改善されるということで, 「rebar3はよ!!」となっていたので, alpha版とはいえ試してみることにした.
なので,備忘録的に各種コマンドについて残しておく.
また,従来のrebarとの差異については自分が分かる範囲で,「主な変更点」という形でそれぞれの項目に書いてあるので参考にして欲しい.
ちなみに, 公式のドキュメントもある.
compile, xref, dialyzer
主な変更点
dialyzerをサポートするようになった. (多分サポートしていなかったと思う)
各種コマンド
rebar3 compile
get-deps + compileに相当する.
rebar3 xref
いくつかのconfが指定可能.
$ rebar3 help xref
で出てくるので, これを参照すると良い.
rebar3 dialyzer
_build/default/17.4.plt
のようにerlangのバージョンごとにplt
を生成する為, 複数のバージョンで開発している人にとっては便利な仕様になっている.
テスト関係 (eunit, ct)
主な変更点
-
ct_dir
にbeam
が作成されることがなくなった -
ct
関係のrebar.config
の書き方の変更 -
eunit
,ct
時にerl_opts
が反映されるようになった
各種コマンド
rebar3 eunit
$ rebar3 eunit [--app <app>] [-c <cover>] [--suite <suite>] [-v <verbose]
option | 指定方法 | 概要 |
---|---|---|
app | A,B |
実行するapplicationを指定する |
c |
true /false
|
_build/test/cover にカバレッジの結果を出力する |
suite | A,B |
テストを実行するモジュールを指定する. hoge を指定するとhoge_tests も対象になる.(逆にhoge_tests は指定できない) |
v |
true /false
|
verboseが標準出力に出る |
-c
オプションはrebar.config
の{cover_enabled, true}
で指定可能.
rebar3 ct
オプションが多いので, 使いそうなところだけ抜粋. (rebar3 help ct
でその他のオプションについては表示されます)
$ rebar3 ct [--suite <suite>] [-c <cover>] [-v <verbose>]
ct
でsuite
を指定する場合は以下のように指定する
$ rebar3 ct --suite ct/hoge_SUITE,ct/fugo_SUITE
$ rebar3 ct --suite hoge_SUITE,fugo_SUITE --dir ct
また, ct_dir
の指定方法は以下に変更になった.
{ct_opts, [{dir, "ct"}]}.
rebar3 cover
-c true
を指定して作成されたカバレッジデータを読める状態にして吐き出す.
従来であればeunit
実行時に出力がされていたが分かれたようだ.
eunit
とct
で同じパスにカバレッジデータを吐き出してくれるので, 使いやすくなった気はする.
外部ライブラリ関係
主な変更点
elixirのmixを参考にした点が要所要所に見られる.
- 外部ライブラリの配置位置が
_build/(default|test)/lib/
になった -
rebar.lock
ファイルが生成され, リビジョンを固定することができる - hexに登録されたライブラリが簡単に使える
バージョンの指定方法
従来に加えて, hexを利用することができる.
rebar.config.sampleにあるatom
のみの指定がこれに当たる.
また, 外部ライブラリと異なるバージョンを指定していた場合は 「rootのアプリケーションで指定したバージョンは最優先」となる.
各種コマンド
従来のget-deps
にあたるコマンドが廃止され, compile
など必要な際に自動的に取得される.
rebar3 update
hex
に保存されているregistryを更新する. 前述のhex
を利用した指定をしない場合は不要なコマンド.
rebar3 upgrade
-
rebar.config
に記載されたdeps
からrebar.lock
ファイルを更新する - 外部ライブラリを更新された
rebar.lock
に合わせて変更する
# a,b,cを更新する
$ rebar3 upgrade a,b,c
# 全て更新する
$ rebar3 upgrade
このコマンドを叩かない限りはdeps
のバージョンは変更されない為, deps
でgit checkout
して作業するなどは従来通りできる. (そういう需要があるのかは知らない)
rebar3 unlock
-
rebar.lock
から指定した外部ライブラリを削除する - 指定しなかった場合は
rebar.lock
が削除される
$ rebar3 unlock a,b,c
$ rebar3 unlock
その他のコマンド
リリース用のコマンドなどは使ったことがないので, 割愛する.
主な変更点
- clean対象の指定方法が変更になった.
- templateのパスが変更になった
rebar3 shell
外部ライブラリとアプリケーションのパスを通してerlang shellを立ち上げてくれる.
reloaderとかを使おうと思ったら自前でコマンドを書くしかない気がする. (方法があったら教えてください)
rebar3 clean
従来では自分でcleanするパスを指定していたが, 基本的には指定しないように変更になった.
_build/default/lib/*/ebin
にあるbeam
しか消されないが, compile
/eunit
/ct
時に削除されたモジュールのbeam
は消してくれるようだ. (完全に確かめられた訳ではないが...)
また, NIFを使うなど他のディレクトリもcleanしたい場合はrebar.config
のpre_hook
などで指定する.
rebar3 edoc
edocを出力する. 標準では何も吐き出さない為, docletをどこかしらから探してくる必要があるようだ.
edownをよく使っている.
rebar3 new
従来のcreate
相当. templateからモジュールなどを自動生成する.
templateはbuilt-inの他にcustomとして自分で作成したtemplate (~/.config/rebar3/templates
に置くこと) が使用でき, この一覧は以下のコマンドで取得できる
$ rebar3 new help
また,(TEMPLATENAME)_README.md
でhelp
を記述することが可能になった.