日本語
  • コミットメッセージ
  • 従来のコミット
  • git コミット
  • commitlint

従来のコミットはあなたのコミットメッセージを救わない

従来のコミットをただ追うだけでは良いコミットメッセージを書くのに十分でない理由を探り、開発プロセスを改善し、意味のあるコミットを自然に作成するための重要な思考戦略を紹介します。

Yijun
Yijun
Developer

インターネット上をさっと検索すると、コミットメッセージを書く方法を教える記事が数多く見つかります。これらの記事の90%はあなたに従来のコミットを使うように勧めます。しかしながら、多くの開発者はこれでも苦労しています。彼らはこれらの規則に従うべきだと知っていても、実際にそれを適用するのは難しいと感じます。コードをコミットするたびに、「refactor」や「chore」と書くべきか悩みます。コミットメッセージリストがすべて「feat: add page」という同じメッセージからなるプロジェクトさえ見たことがあります。彼らにとってコミットメッセージを書くことはあまりに難しく、結局諦めてしまったのです。

従来のコミットを語るのはまだ早すぎる

私は従来のコミットが悪いと言っているわけではありません。彼らは多くのよく知られた利点があります:

  • 統一されたフォーマットを提供し、コミットメッセージをより標準化します
  • 自動化ツールが解析しやすく、自動チェンジログ生成を可能にします
  • チームメンバーがコード変更の目的と範囲を理解するのに役立ちます
  • 異なる種類のコード変更を迅速に識別できるようにします

しかし、開発者が従来のコミットを使ってもなお良いコミットメッセージを書くのに苦労しているときに、彼らに従来のコミットの使い方についての記事を渡して、「feat」タイプが何を意味するのか、「fix」タイプが何を意味するのかを教えることは実際には意味がありません。それはまるで、基本的な食材や器具の使い方を教えずに、高度な料理本を料理を知らない人に与えるようなものです。それにもかかわらず、そのような記事がインターネット上にはあふれています。彼らは知りませんが、従来のコミットは、開発者が明確な思考を持ち、タスクを正確に分割する能力を持った場合にのみ、本当に効果的になり得ます。

ですので、従来のコミットは悪くありませんが、それに取り掛かる前に、正しい開発思考の確立と科学的な開発者思考を使って物事を行う必要があります。

良いコミットメッセージを書くための重要な思考

コード変更は一度に一つのことを行うべき

ソフトウェア開発において、「一度に一つのことを行う」は重要な原則です。これはコードの記述だけでなく、コードのコミットにも当てはまります。我々が一度に特定のタスクや変更に注力すると、コードが明確になり、意図がより明確になります。この方法は、コードの可読性を向上させるだけでなく、コードレビューのプロセスを大幅に簡素化します。レビュー担当者は、各変更の目的をより容易に理解し、検証できます。

さらに、この方法は潜在的なコードのロールバックに利便性を提供します。問題が発生した場合、他の無関係な部分に影響を与えずに特定の変更を見つけ出し、元に戻すことがより容易になります。最も重要なことは、それぞれの変更が一度に一つのことだけを行う場合、この変更を説明するコミットメッセージは自然とより正確で意味のあるものになります。

実践的には、コードを書き始める前に完了すべきタスクを明確に定義する必要があります。タスクを完了した後で即座にコードをコミットし、複数のタスクを完了してから一緒にコミットするのは避けるべきです。現在のタスクを完了する際に修正が必要な他の領域を発見した場合、最良の対応はこれらをメモし、現在のタスクを完了した後に別々に対応することです。例えば、あなたが機能を実装している最中に、既存のバグを発見した場合、そのバグを新しい機能コードと一緒に修正するのではなく、まず機能を実装し、次に別のコミットで発見したバグを修正するか、バグを先に修正してから機能を実装してコミットするべきです。

コミットメッセージは実際にはコードを書く前に存在している

多くの開発者はコードを完了した後で初めてコミットメッセージの書き方を考え始めますが、実際にはコミットメッセージはコードを書く前に存在しているべきです。これが意味するのは、コミットメッセージは基本的にタスクを完了するために取るステップを反映しているということです。言い換えれば、それらは我々のやるべきことリストなのです。

タスクを開始する際には、まずそのタスクを完了するのに必要な具体的なステップを考えるべきです。これらのステップが我々のやるべきことリストであり、同時に将来のコミットメッセージでもあります。やるべきことリストを持つことで、我々の各コード変更には目的があり、コーディング中に集中力を保ち、タスクから逸脱することを防ぎます。

さらに重要なことは、この方法が我々の効率を大幅に向上させることができることです。ステップを完了したら、対応するコミットメッセージはすでに用意されており、それを直接使用できるため、変更の記述方法を考える時間を削減できます。同時に、これらのコミットメッセージはタスクを包括的に理解している段階で完成しているため、通常はより質が高く、より多くの情報を含んでいます。

たとえば、新しいユーザー登録機能を実装する必要がある場合、タスクのステップを次のように計画できます:

  1. 既存のフォームコンポーネントをリファクタリングし、より汎用的かつ再利用可能にする
  2. ユーザー登録フォームを作成する
  3. ユーザー登録のためのAPI統合を実装する
  4. ユーザー登録機能の単体テストを追加する
  5. ユーザー登録機能のドキュメントを更新する

これらのタスクステップに対応するコミットメッセージは以下のようになる可能性があります:

  1. refactor: 既存のフォームコンポーネントを再利用可能に強化
  2. feat: ユーザー登録フォームを作成
  3. feat: ユーザー登録API統合を実装
  4. test: ユーザー登録の単体テストを追加
  5. docs: ユーザー登録機能のドキュメントを更新

このようにして、コーディングを始める前に明確なタスクステップとそれに対応する簡潔なコミットメッセージを用意します。これらのコミットメッセージは実際にはあなたのやるべきことリストであり、機能を実装する全プロセスをあなたが指導するのに役立ちます。

各ステップを完了する際には、対応するコミットメッセージを使用してコードをコミットできます。これによりタスクをより良く整理し、実行することができ、各コミットが特定のステップに焦点を合わせることを保証します。それにより、全体の開発プロセスがより明瞭に、かつ管理しやすくなります。実際のコーディング中にコミットメッセージを若干調整する必要がある場合、実際の変更をより正確に説明するために少し修正を加えることができます。

従来のコミットが自然な選択になる

正しい開発マインドセットを身につけると、従来のコミットの使用が自然になります。この段階に達すると、適切なタイプのプレフィックス(例:feat、fix、refactorなど)を選ぶのが簡単になります。それはすでにコミットメッセージがあなたのタスクステップを明確に反映しているからです。

従来のコミットを使用する方法についてもっと学びたいなら、オンラインで多くの優れた記事が利用可能です。しかし覚えておいてください、これらの基準は正しい開発マインドセットの基礎の上に構築されて初めて真に効果的になり得ます。

結論

良いコミットメッセージを書くというのは、単に特定のフォーマットに従うことではありません。それは我々に開発プロセス中に明確な思考を維持し、各変更の目的を明確にし、コードを始める前に自分の作業をどのように説明するかを考慮することを要求します。

従来のコミットは確かに有用なツールですが、正しい開発マインドセットと組み合わせることで、最大の効果を発揮することができます。"一度に一つのことを行う"と"コミットメッセージを前もって考える"という二つの原則を実践することで、コミットメッセージの質を向上させるだけでなく、全体の開発効率とコード品質も向上させることができます。

この記事があなたの開発プロセスを再考し、これらの方法を試すことを促す助けになることを願っています。良い開発習慣は時間をかけて養う必要がありますが、一度形成されると、作業効率とコード品質を大いに向上させます。