Gitでバージョン管理をするのはフロントエンド、バックエンドエンジニアだけでなく、インフラエンジニアにもコードを必要がある昨今だが、大規模のプロジェクトでGitを使ったことがなかった。
自分の経験を踏まえてGitでCommitする粒度について残しておく
対象読者
- Gitを使ったことない人
- Gitの操作はわかるけど使いどころがわからない人
- 駆け出しエンジニア(笑)
※ 個人の経験にもとづいているので注意。
GithubだろうとGitlabだろうと何でも考え方は同じだろう。
最適なコミットの粒度とは?
結論はずばり私の”粒度は細かれば細かいほど良い”である。
では理由をつらつらと書いていこうと思います。
今回はお問い合わせForm機能の追加と言う例を用いて説明しようと思う。
私ならば以下のようなタスクになるだろう。
1.HTMLの作成
2.CSSの作成
3.JavaScriptでValidationを追加
4.サーバサイドのプログラム作成(Ruby、PHP、Pythonなど)
戻し作業が楽になる
細かくコミットをすることで
- どこまで動いていたのか?
- どこからバグったのか?
が仕組みでわかるようになり、バグった時の戻しが楽になります。
Gitがバージョン管理ツールである以上、これが大きな理由だろう。
上の1〜4の作業を1つのコミットに入れてしまうと、バグってしまった時の切り分けが難しくなる。
特に3、4のプログラムを組見切った後にバグが発生すると、大変なことになります。
タスクをサブタスク化して整理しやすくなる。ToDoに落とし込める
コミットを細かくすることでタスクをサブタスク化することになります。
つまりToDoに落とし込めることになります。
上の例のJavaScriptのValidationで考えてみましょう。
Validationだけだと、何するのかフワッとしています。
メールアドレスを入力するFormのValidationを行う場合は、
- メールアドレスの形式があっているか?
- 全角文字が入っていない?
- RFCに準拠しているか?
など1つのFormに対してもいくつも実装しなければいけない機能があります。
細かくすることで〇〇の機能を実装する、〇〇と〇〇の機能を結合させると言った具合にタスクをToDoレベルに落とし込むことができます。
これにより、タスクで何をしなければいけないのか?いう作業に時間を使うのではなく、実装にパワーを使うことができます。
また上司やクライアントのレポートラインに対して何がどこまで終わっているのか?が明確になります。
誰かに引き継ぎしやすくなる。
タスクをサブタスク化して整理しやすくなる。ToDoに落とし込めると似ていますが、これもメリットです。
どこまで終わって、何をやらなければいけないか整理されていたら、引き継ぎのコストは下がります。
また引き継がれた人は実装だけにパワーを使うので余計な手戻りのリスクが下がります。
自分が忙しくて手が回らなくなっても、誰かに仕事をお願いできるのはメリットだと思います。
以上、私が考えるメリットです。何かありましたコメントお願いします。