S-Collection株式会社 システムについて

S-Collection株式会社のシステムサポート事業

XPで普及してきたペアプログラミング!ペアプログラミングの関心が高まっている理由とは?

質の高いコードができるペアプログラミング

システム開発の手法である、ペアプログラミングをご存じでしょうか?
スピーディーなシステム開発を実現!XP(エクストリームプログラミング)についてお話します - S-Collection株式会社 システムについて」でお話したアジャイル開発の手法のひとつであるXPでも、ペアプログラミングは採用されています。
今回は、ペアプログラミングの手法から、ペアプログラミングのメリットとデメリット、導入事例を紹介します。

ペアプログラミングとはなにか?

ペアプログラミングとは、その名前のとおり、ひとつのプログラムを2名で開発する手法であり、アジャイル開発(特にXP)でよく採用されます。
プログラミング初心者と上級者でペアを組むことにより、技術の向上や知識の共有を図ることができます。
ペアプログラミングでは、2人で1台のパソコンを使って開発します。コーティングを担当するドライバーと、コーディングの指示を出すナビゲーターの役割に分かれて、システム開発を進めていきます。

ドライバーとナビゲーターの役割について、もう少し詳しく説明します。
ドライバーは基本的にキーボードを使用してコーディング作業を行います。ナビゲーターの指示にしたがってコーディングすることで、知識や技術を共有しながら、開発を進めていくことができます。

これに対してナビゲーターは、ドライバーに指示を出します。開発内容に応じて、さまざまなケースを想定し、適切な指示を出す必要があります。

ペアプログラミングは多くの場合「ナビゲーター」を上級者、「ドライバー」を初心者が担当します。指示を出すナビゲーターが初心者だった場合、作業効率が下がってしまうためです。

ペアプログラミングのメリットとデメリット

次にペアプログラミングのメリットとデメリットをいくつか紹介します。

まずはメリットです。
1つ目は作業ミスを軽減できることです。1人で作業するよりも、2人で作業するほうがコーディングミスに気付きやすくなります。プログラムのレビュー後の修正も減らすことができるので、作業の効率を上げることができます。
また、2人で情報共有しながら開発を進めることで、途中で仕様が分からなくなる事態を避けることができます。
2つ目は知識の向上です。ペアプログラミングでは一般的に初心者と上級者がペアとなるため、初心者が1人で作業するより、学習のスピードが向上します。また、質問したいときに隣に聞ける上級者がいるので、すぐに疑問を解消することができます。
3つ目はチームワークの向上です。ペアプログラミングでは2人で作業するため、作業をしながらチームワークを向上することができます。また、交代する人を含めて4人で作業する場合もあり、その場合はより多い人数でのチームワークを向上させることができます。

次にデメリットについてです。
1つ目はペアを組んだプログラマーのスキルの差が大きい場合、片方が退屈してしまう可能性があることです。ペアプログラミングでは、初心者の経験値やスキル向上が見込めますが、上級者にとっては一方的に教えるだけの簡単な作業になりがちです。
2つ目はコーディング方法で意見が合わない場合があることです。同じ処理でもいろいろな書き方ができるため、ドライバーとナビゲーターの書き方に相違があると対立してしまう場合があります。
3つ目は2人のスケジュール管理を調整する必要があることです。どちらかが体調を崩したり、スケジュールが合わない場合は、作業を行うことができなくなります。

ペアプログラミングの導入事例

ここからは、実際にシステム開発の現場でペアプログラミングが導入されている事例をご紹介します。

まずは、ヤフー株式会社のヤフオク!カンパニー開発本部の事例をご紹介します。
ヤフオク!カンパニーでペアプログラミングを行うときは、毎日ペアをローテーションして組みかえておられます。毎日ペアを変えることで知識や情報を共有する頻度を上がるため、システム仕様の理解が加速度的に向上していくそうです。

ヤフオク!カンパニーでは、毎日ペアが変わるため、次の日に組むペアは、前日に作業をしたペアのどちらか片方が必ず残り、ほかのペアから1人がやって来るというルールにしているそうです。
その日の作業をはじめる前に、前日に取り組んでいた作業を、新しくペアを組む人に10分程度レクチャーします。このルールで毎日違うペアと開発すると、1週間以内に各メンバーがチーム内のすべての作業に触れることができます。

こうして、ペアローテーションを繰り返すことで、全員が案件全体の仕様に詳しくなり、属人化を防げます。
もし誰かがプロジェクトから離れることになっても、ほかの誰かが仕様を知っているので、引き継ぎ作業は発生しません。全員が全体の仕様に詳しいため、ドキュメントもほとんど書く必要がありません。
このようにペアプログラミングとペアローテーションを組み合わせることで、ヤフオク!は強いエンジニアチームを作っています。

次に株式会社ぐるなびの開発チームの事例をご紹介します。
ぐるなびでは、プログラミングだけではなく設計の段階からペアで作業をしているそうです。
作業の進め方は以下のとおりです。

1. チーム全体で仕様面、実装概要を決める。
2. ペアに分かれて設計をする。
3. 事前にコーディングの工程の認識を合わせる。
4. ペアプログラミングでコーディングを行う。
  ナビゲータ:決めたコーディングの工程どおりに指示する。
  ドライバー:ナビゲータの指示にしたがって手を動かす。
5. 随時レビューや相談をしながら実装をすすめる。
6. プログラムのリリースを行う。チーム全体で集まり1週間の作業を振り返る。

ぐるなびでは、1~6の作業を1週間かけて行われています。
ここで重要なのは、「3.事前にコーディングの工程の認識を合わせる。」だそうです。
この作業により、最適なロジックを見つけることができ、コーディング時の考慮漏れを事前に防げます。
また、事前に工程を2人で決めることによって責任が分配され、気持ちも楽になるそうです。

ほかにもぐるなびでは、休憩をこまめにとることを推奨されています。ペアプログラミングでは、常にディスカッションを行いながら作業をするので、想像以上に疲れるためです。

さらに定期的に席替えを実施したり、作業を行うためのフリースペースを設けるなど、ペアプログラミングを実施するために必要な環境を整えることに力を入れているそうです。

このように、ぐるなびペアプログラミングを実施した結果、引き継ぎなしでスムーズにメンバー編成を変えられるようになりました。

まとめ

今回は、XPのプラクティスのひとつとして採用されている、ペアプログラミングを紹介しました。

ペアプログラミングを導入することで、質の高いコードを作成することはもちろん、知識や技術を共有し、作業効率を上げることが可能です。
2人で議論しながら作業すると疑問解消がしやすく、1人で作業するよりも早く学習することができるので、新しくプロジェクトにアサインされたメンバーへの教育にも有効です。

今回は2社の導入事例をとおして、ペアプログラミングがどのように実践されているかを紹介しました。
ほかのシステムの開発手法についても今後詳しく紹介していきますので、楽しみにしていてください。

S-Collection株式会社では 、これからもシステム開発に関する有益な情報を発信していきます。