Open1
commitlint と commitizen を使ってコミットメッセージの形式を統一する方法
この記事では、コミットメッセージの形式を統一して、チーム開発やレビューを効率的にするためのツールである commitlint と commitizen の使い方について紹介します。commitlint はコミットメッセージがあらかじめ決められたルールに従っているかをチェックし、commitizen は対話式のプロンプトでコミットメッセージを作成することができます。これらのツールを組み合わせることで、コミットメッセージの品質を向上させることができます。
commitlint の導入
commitlintのパッケージと共有設定のパッケージをインストールします。
yarn add -D @commitlint/config-conventional @commitlint/cli
commitlint の設定ファイルを作成します。
echo "module.exports = { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js
husky をインストールして、Git のフックを有効化します。
yarn add -D husky
yarn husky install
commit-msg フックに commitlint を実行するスクリプトを追加します。
npx husky add .husky/commit-msg 'npx --no -- commitlint --edit ${1}'
commitizen の導入
commitizen のパッケージとアダプターのパッケージをインストールします。
yarn add -D commitizen cz-conventional-changelog
commitizen の設定ファイルを作成します。
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc
package.json に commit スクリプトを追加します。
package.json
{
"scripts": {
...,
"commit": "cz"
}
}
コミット
変更をステージングして、コミットします。
git add .
yarn commit
cz-cli@4.3.0, cz-conventional-changelog@3.3.0
? Select the type of change that you're committing: chore: Other changes that don't modify src or test files
? What is the scope of this change (e.g. component or file name): (press enter to skip) core
? Write a short, imperative tense description of the change (max 87 chars):
(17) lint on commigmsg
? Provide a longer description of the change: (press enter to skip)
? Are there any breaking changes? No
? Does this change affect any open issues? No