概要
Elixir開発環境にGitフックを導入し、コミットやプッシュのタイミングで自動的にコード検査やテスト等が実行されるようにします。
- HexのGitHooksを使います。
- JavaScript(Node.js)で言うところのHusky的なライブラリです。
- これにより、Gitフックを簡単に生成してElixir開発ディレクトリへ導入することができます。
実行環境
- MacOS
- Elixir 1.15.7 (compiled with Erlang/OTP 26)
- mix
コード
mix.exs
defp deps do
[
{...},
{:git_hooks, "~> 0.7.3", only: [:dev], runtime: false}
]
end
config/config.exs
...
# 例
config :git_hooks,
auto_install: true,
verbose: true,
hooks: [
pre_commit: [
tasks: [
{:cmd, "mix format --check-formatted"}
]
],
pre_push: [
verbose: false,
tasks: [
{:cmd, "mix test"},
{:cmd, "mix dialyzer"}
]
]
]
- 各人やプロジェクトのGit運用スタイルに合わせて、pre_commitやpre_pushを設定します。
設定手順
- 上記各ファイルへ設定追記。
-
mix deps.get && mix deps.compile
を実行。 - 念のため
mix git_hooks.run pre_commit
して、手動で走るか確認する。 -
mix git_hooks.install
を実行。(開発ディレクトリにhooksファイルを書き出す)
これ以降は、git commitやgit pushのたびに自動でhooksが走るようになります。
Git
$ git commit -m "commit NOT-formatted code"
↗ Running hooks for :pre_commit
** (Mix) mix format failed due to --check-formatted.
The following files are not formatted:
* config/config.exs
× pre_commit failed on `mix format --check-formatted`
** (exit) 1
...
補足
pre_commit / pre_push を再設定する
config/config.exs
で設定を書き直してから、mix git_hooks.install
を実行します。
hooksをスキップしたい
通常のgit hooksと同様に--no-verify
オプションを付加することで、hooksをスキップできます。
Git
$ git commit -m "commit without hooks" --no-verify
おわりに
GitHooksをサクッとElixir開発ディレクトリに導入して、CIを回す前のローカルリポジトリ段階でもコード検査やテスト実行を自動化して開発効率や開発体験を向上させていきましょう。