ペアプログラミングは、アジャイル開発の実践の一つとしては広く知られています。 従来「実装担当」「レビュー担当」と分けられる形がありましたが、 開発スタイルの変化やリモートワークの普及などにより、新しい形のペアプログラミングもあります。
1.そもそもペアプログラミングって…
単に「二人でコードを書くこと」ではなく、以下のような目的を考えると良いでしょう。
- 品質向上 ⇒ リアルタイムでレビューが出来るので、バグは早期発見できる
- 知識共有 ⇒ 経験豊富な方と実施することで、スキル向上や属人化の解消につながる
- 生産性向上 ⇒ 迷う時間も減り、意思決定のスピードも上がる
- 学習/育成 ⇒ 若手の方の気づき、学びのきっかけが多くなる
このように何を狙って実施するかで実施方法も考えやすくなるでしょう。
2.ペアプログラミングスタイル
(1)Ping-Pongペアプロ
- テスト駆動開発(TDD)の活用。レビューアがテスト作成し、実装者がパスするコードを書く
- 役割を変え、双方に関与し力をつけていく
(2)リモートペアプロ
- Zoom,VS Code Live Share,Teams,JetBrain Code With Meなどのツールを活用し、物理的な距離を考えずできる
- タイピング負担などを分散しリアルタイムで意見交換をする
※上記はGitのPull Requestなど非同期ペアリングのようなやり方以外を指す
(3)パワフルペア
- 考えた人が手を動かすのではなく、ペアに実施していただく
- 実装者は指示通りにコードを書く、ペアが設計/方針を考えるという役割分担を明確にする
※若手の方が初めて参画されるようなケースには良いでしょう
(4)モブプログラミングとのハイブリッド
- 3人以上の小チームで開発を進めるモブプログラミングと短時間で議論し、意思決定する
- 2人と違いどちらかの意思のみとなりづらく、客観的に対処できることを期待
3.どんなときにペアプログラミングを活用?
(1)複雑なロジックの実装
- アルゴリズムやアーキテクチャ設計が絡むようなシーン
(2)若手/新人のオンボーディング*
- 覚え、早期に立ち上がっていただく
(3)不具合のトラブルシューティング
- 視点が増え、問題の特定スピードをあげる
(4)リファクタリング
- 設計、実装の改善性を議論しながら進める
4.成功するペアプログラミング
(1)コミュニケーションを意識する
- どのような方針でやっていくか、書いていくかを相談ベースで決めながら実施
- お互いの考えを発信し、理解する機会を増やす
(2)役割を固定しすぎない
- 中長期で同じ役割のまま実施するとどちらかに負担が偏ったり、受動的になってしまうため、うまく役割を変えながら実施する
(3)ツールの活用
- 旧来のように「1台を2人で」ではないため、効率化に繋がるツールは模索しながら実施していく。後々人数規模が広がった場合に活かしていける
現代のペアプログラミングは従来の対面かつ固定の役割という枠ではなく
やりやすい形に進化させて使うのが良いでしょう。
目的に合ったスタイルで様々な手法を活用し、適切なタイミングで実施することで
品質や効率アップとなり、ナレッジやスキルの共有、向上につながります。
柔軟な考えと判断が必要となりますが、一つの検討材料になればと思います。