AndroidチームのPullRequestを小さくする開発方針について

この記事では、N予備校Androidチームが行っている開発方針についてまとめます。 Androidチームに興味を持ってくれた方や、新しく配属していただく方の参考になればと思います。

N予備校Androidチームの開発方針

N予備校Androidチームでは、開発方針として「量で質を担保する」という方針を取っています。

「量で質を担保する」というのは、最初から100%の品質を目指すのではなく、たくさん試行錯誤する中で不具合に気付いたり、より良い方法を見つけたりして、結果的に品質を高めるという方針を意味しています。

そもそもソフトウェア開発は非常に難しい仕事です。最初から完璧なプログラムを組むことはほとんどできません。何度も変更を加えて、最適な構造を模索しながら、その時にあった最良の実装を行っていきます。

そのためには、日々のチーム開発で「PullRequestを意味のある最小差分」にわけて出していくことが重要になります。

PullRequestを意味のある最小差分にすること

Androidチームでは、日々のPullRequestで出す差分を最小の単位にして、数回にわけて出して、チームでレビューを行います。

例えば、アプリでAPIから取得した情報を画面に表示する機能を作るのであれば、PullRequestは以下の単位で区切って出していきます。

  • アプリ内でデータを持つための型の作成
  • APIからデータを取得して↑の型に変換するための処理の作成
  • データを表示するための見た目の作成
  • 取得したデータを、↑の見た目に入れて表示する

このように小さく区切りながら、1つの機能を少しずつ完成に近づけていきます。

そしてPullRequestを最小差分に区切って出していくと、次のようなメリットがあります。

不具合を起こしにくくなる

1つ1つのPullRequestの差分が小さいことで、レビュワーは変更されたコードの全てに集中できるようになります。

その結果、不具合に繋がるコードを見逃すことが減ります。機能に関係ない不要なコードも入らなくなります。

逆に、1つの大きいPullRequestであれば、変更されるコードが多すぎて、レビューで不具合に気づけないリスクが高まります。

不具合を起こさないためには、PullRequestの差分が小さいことが必要です。

こまめに進捗を作ることができる

小さいPullRequestが1つずつマージされていくことで、進捗が明らかになります。

進捗が生まれている安心感はコードを書く人の精神を安定させ、マネージャーも無理に進捗を促す必要がなくなります。

大きいPullRequestでは、その内容がマージされれば完了かもしれませんが、それがマージされない限り進捗0という危険性が伴います。

小さくPullRequestをマージしていくことで、安定して実装を進めることができます。

レビュー待ちの時間が減って、生産性が高まる

小さいPullRequestであれば、確認することが少ないのですぐに適切なレビューを行うことができます。

そしてこれは、レビュワーの負担を減らすだけでなく、誰でもレビューに参加しやすいのでレビュワーの数も増えることになります。

内容の多い大きなPullRequestでは、それだけ必要な知識も多くなり、レビューできる人も限られるでしょう。もしくは、不具合の見逃しを減らすために「N人以上が承認したらマージできる」のようなルールが必要になるかもしれません。

しかしそれでは、特定の人にレビューの負担が集中して、レビュー待ちの時間が長くなってしまうでしょう。それはチーム全体の生産性の低下につながります。

小さなPullRequestであれば、見るべきポイントと必要な知識が限られるので、誰でも、すぐにレビューを行うことができます。

全員が素早くレビューする文化が生まれることで、レビュー待ちが減り、知識の共有も促され、結果的に生産性が高まります。


このように、PullRequestを意味のある最小差分にすることは大きなメリットをもたらします。

ちなみに、「小さいPullRequest」という言葉を何度も使ってきましたが、具体的には差分の合計が100行以内を目安にしています。

もちろん、機械的な変更であったり、新規ファイルの雛形作成であれば100行は超えるでしょう。それらは例外としつつ、意味のある修正の合計が100行までであれば、上記のメリットが得られると思います。

Androidチームではこのような開発方針で日々の開発を進めています。

採用活動も積極的に進めていますので、興味を持っていただいた方は是非こちらからお気軽にご連絡ください。

dwango.co.jp