【コミットリント】

commitlint とは?

💡 コミットメッセージの「校閲係」がチーム全体の履歴をきれいに保つ
📌 このページのポイント
commitlint:コミットメッセージの自動チェック Conventional Commits 形式 type(scope): description 例: feat(auth): ログイン機能を追加 / fix(api): レスポンスのエラー処理を修正 OK(ルールに適合) feat: ユーザー登録機能を追加 fix(api): 認証エラーのハンドリング修正 NG(コミット拒否) 修正した ← typeがない Fix bug ← 大文字NG 統一されたメッセージで自動化が可能に feat: → minor fix: → patch BREAKING → major CHANGELOG生成
commitlintのイメージ
ひよこ ひよこ

commitlintってコミットメッセージをチェックするの?メッセージに決まりなんてあるの?

ペンギン先生 ペンギン先生

あるんだよ。たとえば「feat: ログイン機能を追加」「fix: パスワードリセットのバグ修正」みたいに、先頭にカテゴリをつける「Conventional Commits」という書き方のルールがあるんだ。commitlintはこのルールに沿っているかを自動チェックしてくれるよ

ひよこ ひよこ

ルールに合わないとどうなるの?

ペンギン先生 ペンギン先生

コミットが拒否されるんだ。たとえば「修正した」みたいにカテゴリなしで書くと「type may not be empty(タイプが空です)」とエラーが出る。最初は面倒に感じるけど、慣れると履歴がとても見やすくなるよ

ひよこ ひよこ

どうやって設定するの?

ペンギン先生 ペンギン先生

まず`@commitlint/config-conventional`という設定パッケージをインストールして、`commitlint.config.js`に設定を書く。そしてHuskyの`commit-msg`フックでcommitlintを呼び出すように設定するんだ。これでコミットのたびに自動チェックが走るよ

ひよこ ひよこ

コミットメッセージを統一すると何がいいの?

ペンギン先生 ペンギン先生

最大のメリットは自動化だよ。「feat:」があればマイナーバージョンアップ、「fix:」があればパッチバージョンアップ、みたいにsemantic-releaseと組み合わせてバージョニングを完全自動化できるんだ。CHANGELOGの自動生成もできるよ

ひよこ ひよこ

独自のルールを作ったりもできるの?

ペンギン先生 ペンギン先生

もちろん!commitlint.config.jsでルールをカスタマイズできるよ。たとえば「scopeにはフロントエンド・バックエンドのどちらかを必ず書く」とか「件名は50文字以内」みたいな独自ルールも設定できる。Angularプロジェクトが発祥のConventional Commitsだけど、今ではOSSから企業まで幅広く使われている事実上の標準だね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「commitlint」って出てきたら「コミットメッセージのルールを自動チェックするツール」と思えればだいたいOK!
📖 おまけ:英語の意味
「commitlint」 = コミットのリンター
💬 commit(Gitコミット)+ lint(コードの静的チェック)を組み合わせた名前で、「コミットメッセージにリンターをかける」という意味だよ
← 用語集にもどる