commitzenによるコミットメッセージの定型文化
はじめに
コミットメッセージをいつもテキトーに書いてしまう自分の悪い癖を直すため、かつ、チーム開発で定められたフォーマットに沿ってコミットメッセージを書くために、commitizen
というツールを導入する。
これを使えば、対話的に、フォーマットに沿ったコミットメッセージを書くことができる。
commitizenの導入
% npm i -g commitizen
commitizenの使用
"scripts": {
"commit": "commitizen"
},
package.json
にscripts
を書き、コミットするときは、git commit
の代わりにnpm run commit
を実行する、、
% npm run commit
> hogehoge@1.0.0 commit
> commitizen
Commitizen has two command line tools:
1) cz -- used for making commits according to convention
note: you can run 'git cz' if installed with -g
2) git-cz -- alias for 'cz'
3) commitizen -- used for installing adapters into your project
Generally if you're using someone else's repo and they've already set up an
adapter, you're going to just be running:
cz
However, if you create a new repo and you want to make it easier for future
contributors to follow your commit message conventions using commitizen then
you'll need to run a command like this one to add this adapter to your config:
commitizen init cz-conventional-changelog --save
You should swap out cz-conventional-changelog for the NPM package name of the
adapter you wish you install in your project's package.json.
Detailed usage:
1) commitizen <sub-command>
init <adapter-npm-name> [args]
description: Install a commitizen adapter from npm and adds it to your
config.commitizen in your package.json file.
args:
--save Install the adapter to package.json dependencies
--save-dev Install the adapter to devDependencies
--save-exact Install an exact version instead of a range
--force Force install the adapter, even if a previous one exists.
2) cz <any regular git commit arguments>
description: Runs the commitizen prompter, asking you questions so that you
follow the commit conventions of the repository of the current
directory.
note: cz may even be run as 'git cz' if installed with -g.
のだが、現状だと、フォーマットをインストールしていないため、commitizen
の使い方が出力されて終わってしまう。
Commitizen has two command line tools:
commitizen
には2つのコマンドラインツールがあるよと言っている。
- 一つ目は、
cz
(git-cz
はcz
のエイリアス)- フォーマット(
commitizen
ではadapterと呼んでいる)に従ってコミットするために使用する。チーム開発などで、既にフォーマットが設定されている場合は、cz
を実行するだけ。
- フォーマット(
- 二つ目は、
commitizen
- プロジェクトにフォーマットをインストールするために使用する。新しいリポジトリを作成し、今後のコミットメッセージがフォーマットに従うようにしたい場合は
commitizen init [好きなフォーマット] --save-dev --save-exact
を実行する。フォーマットはGitHubにいろいろ用意されているので、自分やチームに合ったものを選択可能。
- プロジェクトにフォーマットをインストールするために使用する。新しいリポジトリを作成し、今後のコミットメッセージがフォーマットに従うようにしたい場合は
今回は公式のGitHubでも例として使われている、cz-conventional-changelog
を使ってみる。
% commitizen init cz-conventional-changelog --save-dev --save-exact
フォーマットが設定できたので、scripts
をcommitizen
からcz
に書き換える。
"scripts": {
"commit": "cz"
},
これで、npm run commit
をすると、対話形式でコミットを行うことができるようになる。
cz-emoji
cz-emoji
というフォーマットを使ってみる。
% npm i -D cz-emoji
package.json
に以下を追記。
"config": {
"commitizen": {
"path": "./node_modules/cz-emoji"
}
}
このコマンドを打つだけでもok。
commitizen init cz-emoji --save-dev --save-exact
cz
を実行すると、
% cz
cz-cli@4.2.4, cz-emoji@1.3.1
? Select the type of change you're committing: (Use arrow keys or type to search)
❯ style 🎨 Improving structure / format of the code.
perf ⚡️ Improving performance.
prune 🔥 Removing code or files.
fix 🐛 Fixing a bug.
quickfix 🚑 Critical hotfix.
feature ✨ Introducing new features.
docs 📝 Writing docs.
(Move up and down to reveal more choices)
こんな感じで絵文字付きのフォーマットに沿ったコミットメッセージを作ることができる。
commitlintと併用する
commitlint
はフォーマットに沿っていないコミットメッセージを弾いてくれるもの。
commitlint
の各種パッケージをインストールする。
% npm i -D @commitlint/cli @commitlint/config-conventional @commitlint/cz-commitlint
commitlint
の設定ファイルを作成し、package.json
の設定も変更する。
module.exports = {extends: ['@commitlint/config-conventional']};
...,
"config": {
"commitizen": {
"path": "@commitlint/cz-commitlint"
}
},
...,
husky
もインストールし、コミット時にコミットメッセージをcommitlint
でチェックするようにする。
% npm i -D husky
% npx husky install
% npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'
インストール後に自動的にGitフックを有効にするには、package.json
にnpmスクリプトを追加しておく。
% npm set-script prepare "husky install"