これは、フィヨルドブートキャンプ Advent Calendar 2021(Part 1) 13日目の記事です。
未経験からフィヨルドブートキャンプでプログラミングを勉強し、2021年3月から Tebiki 社でエンジニアとして働いているmasuyama13です。
入社当初、PR(プルリクエスト)を作成する際にコミットの整理に毎回かなり時間がかかるのが悩みでした。試行錯誤の結果、この悩みを解消することができたので紹介します。
それが、コードより先にコミットメッセージを書くという方法です。
コミットメッセージを先に書くやり方
- まず、タスクを分解して TODO リストを作ります。
- これから作業する内容がイメージできたら、コミットメッセージを一つ考えます。
- エディタなどにコミットメッセージを入力します。
- コミットメッセージが書けたら、それを常に意識しながらコーディングを進めます。作業中にコミットメッセージにそぐわないコードを書きそうになったら、TODO リストに追記するだけにして、余計なコードは書かないようにします。
- 作業が終わったらそのままコミットして、次のコミットメッセージを考えます。
最初にコミットメッセージを入力する(RubyMineの例)
この方法を使うことで、1コンテキストごとでの自分のやるべきことが明確になります。
これまでに試したこと
これまで、以下のようなやり方を試してきました。
最後にまとめてコミットする(入社1ヶ月目)
実装中はあまりコミットせず、コードを書き終わってから、PR を作成する段階でコミットを作成していました。
実装は終わっているので分けられそうなところで無理やり分けていましたが、粒度が大きくなりがちでコミットメッセージも適当になってしまうことが多々ありました。
かなり粒度の大きいコミットが同じ日付で積まれている
コミットメッセージとの整合性を保つため、修正した部分を一時的に元に戻すなど無駄な作業も発生していました。
とにかくこまめにコミットする(入社2ヶ月目)
次第に大きな Issue を任せてもらえるようになったこともあり、コミットのやり方について検討しました。
最後にまとめてコミットする場合、実装途中に一度できた部分が動かなくなったときに元のコードが残っておらず再現できないなど不都合もあったため、こまめにコミットするスタイルに変えてみました。
以前は、最終的に完成したコードに関係のない修正過程などは PR 作成時には残しておかないほうがよいと考えていましたが、チームメンバーに相談したところ、思考の過程がわかるので残しておいて問題ないと言ってもらえました。こまめにコミットしておけば、PR 作成時にコミット整理する必要がなくなり時間短縮になると思いました。
しかし、実際にやってみると、あまりうまくいきませんでした。
これは自分の作業手順が原因です。たとえば新しくファイルを作成する場合、まず似たようなファイルを丸ごとコピーしてきて修正するという流れでやっていました。
一つのメソッドを書き換えてうまく動いたらコミット、という感じでコミットを積んでいくと、無駄なコードがたくさんコミットに含まれてしまいます。
無駄なコードがたくさん含まれている
実装が終わってから最後に無駄なコードを削除するのですが、当然削除漏れも発生します。
セルフレビューしてみて分かりましたが、コミット単位で見ると無駄なコードが多すぎてレビューどころではありません。
結局、PR 作成時にコミットを全部やり直す必要があり、リベースで失敗したりすると、実装より時間がかかったんじゃないか?というぐらいコミットの整理に時間がかかったこともありました。
必要なコードのみこまめにコミットする(入社3〜4ヶ月目)
無駄なコードを含まないように、こまめにコミットしていくように意識しました。
TODO リストを見ながら一つずつ作業してコミットするようにしましたが、コミットメッセージを考えるのに時間がかかることに気づきました。
というのも、作業中に気づいたことがあるとすぐに手を動かしてしまっていたため、コミットしようとして Diff を見るといろいろな変更が含まれていたからです。
コミットを分割するか、分割するならどこで分割するか、コミットメッセージをどうするかなどを考えなければなりませんでした。
最後にまとめてやるわけではないものの、やはりコミット作成に時間がかかってしまいました。
コミットメッセージを書いてからコードを書く(入社5ヶ月目〜)
「コミットメッセージを考えるのに時間がかかる」という問題を解決するために考えたのが、「コードより先にコミットメッセージを書く」という方法です。
作業前にコミットメッセージを考えるのは、作業後に考えるのと比較して簡単で早いと感じています。
そして、コードを書く前に自分のやることが明確になっているので、作業中に脇道にそれたり無意識的に別の作業を始めてしまったりすることがなくなりました。
粒度の小さいコミットを順番に積めるようになった
まとめ
コミットメッセージを最初に書くようになってから、チームメンバーからも、コミットやコミットメッセージがよくなったと言ってもらえました。
コミットメッセージ自体の書き方についてはまだまだ勉強中で、Diff を見ればわかることを書いてしまっているところもあるので、その点は今後改善していきたいと思っています。
作業中に迷子になったりコミット整理に時間がかかったりしている人は試してみてください。