LoginSignup
18
17

More than 5 years have passed since last update.

rebar3について

Posted at

rebar3について

rebar3rebarの次のバージョンである.
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_dirbeamが作成されることがなくなった
  • 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>]

ctsuiteを指定する場合は以下のように指定する

$ 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実行時に出力がされていたが分かれたようだ.

eunitctで同じパスにカバレッジデータを吐き出してくれるので, 使いやすくなった気はする.

外部ライブラリ関係

主な変更点

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のバージョンは変更されない為, depsgit 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.configpre_hookなどで指定する.

rebar3 edoc

edocを出力する. 標準では何も吐き出さない為, docletをどこかしらから探してくる必要があるようだ.
edownをよく使っている.

rebar3 new

従来のcreate相当. templateからモジュールなどを自動生成する.

templateはbuilt-inの他にcustomとして自分で作成したtemplate (~/.config/rebar3/templatesに置くこと) が使用でき, この一覧は以下のコマンドで取得できる

$ rebar3 new help

また,(TEMPLATENAME)_README.mdhelpを記述することが可能になった.

18
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17