使える! 情シス三段用語辞典104「ペアプロ(ペアプログラミング)」
常に新しい用語が生まれてくる情報システム部門は、全ての用語を正しく理解するのも一苦労。ましてや他人に伝えるとなると更に難しくなります。『情シスNavi.』では数々のIT用語を三段階で説明します。
一段目 ITの知識がある人向けの説明
二段目 ITが苦手な経営者に理解してもらえる説明
三段目 小学生にもわかる説明
取り上げる用語を“知らない”と思った人は、小学生にもわかる説明から読んでみると、理解が深まるかもしれません!?
この記事の目次
一段目 ITの知識がある人向け「ペアプロ(ペアプログラミング)」の意味
「ペアプログラミング(pair programming)」とはソフトウェアの開発手法のひとつで、1人のエンジニアが1つのプログラムを書くのではなく、2人共同で1つのプログラムを書きます。しかしながら、一見すると2倍の工数がかかっているように見えるこのペアプロ。わざわざ2人で一つの作業を行うことにどんな意味があるのでしょうか?
ペアプログラミングの流れも含めて説明します。
ペアプログラミングの流れ
2人でプログラミングをするといっても、2人が両方ともプログラムを書くのではありません。ペアを組む2人には、それぞれ明確な役割分担があります。
- ドライバー
PCを使用してプログラムのコードを書く役割を担います。
ドライバーは、ナビゲーターの指示に基づきコードを作成しますが、ナビゲーターに対する指摘や改善の提案なども行います。
- ナビゲーター
ドライバーに対し、仕様に基づきどのようなアルゴリズムを採用し、どのようなコードにするのか具体的に指示をします。また、コードの誤りの指摘もします。基本的にナビゲーターはPCを使用しません。
また、ドライバーとナビゲーターの役割は、30分ごとまたは単体テスト1つ完成という一定時間で交代する方が良いとされています。更にドライバーとナビゲーターを交代するだけではなく、一定期間で2人のペア自体も組み替えるという方法もあります。
ペアプログラミングのメリット
ペアプログラミングには次のようなメリットがあります。
- ミスの軽減
もう一つの目により、コードレビューをしながら作業進行しているようなものであり、何か間違いがあればナビゲーターに指摘されます。そのため、イージーミスや仕様違反などのミスが軽減されます。 - 作業スピード向上
プログラム開発は1人で行うことが多いが、難しい部分やエラーの発生原因がわからず無駄に時間が過ぎてしまう時があります。また、誰かに聞きたくても他の人が忙しくしていると質問するタイミングを失ってしまい自分だけで解決しようと多くの時間を使ってしまうことなどもあるが、常に2人で作業するペアプロではこのようなことにはなりません。 - コードの質向上
ペアプログラミングといえども第三者によるコードレビューは必要ですが、ペアプロで作成したコードは結果的にレビュー時間が短縮され、コードの質向上に貢献します。 - コードの共有
ペアプロでは、プログラムの詳細を知る人物が2人になる為、病欠や、やむを得ない理由で人員が減ったとしてもプログラムを知る人がいなくなるというリスクが減ります。
また、プロジェクト内で定期的にペアの組みかえることにより、プロジェクトの全員がコードについての共通認識を持てるようになります。 - 知識の共有
通常、2人でプログラムを作成する機会はない為、他の人がどのような考えでプログラムを作成しているのか知ることはありません。2人でプログラムを作成する過程で相手の知識やテクニック、開発への考え方を自分に取り入れる絶好の機会でもあります。
このような理由により、情シスの業務範囲でもペアプロを導入する企業も増えています。
しかしながら、物事は表裏一体、メリットがあればデメリットもあります。
詳しくは別の機会にご紹介いたします。
補足:ペアプログラミングの進化形「モブプログラミング」
ペアプログラミングから発展して、”ペア”ではなく、”モブ(mob:群衆)”が集まってプログラミングを行う「モブプログラミング」も広まりつつあります。
モブプログラミングでは、3人以上のエンジニアで1つのプログラムを書きます。モブのうちの1人がキーボードを操作してコードを書く「ドライバー」、その他の人はディスプレイに映した画面を見ながら意見する「ナビゲーター」となります。
モブプログラミングは、特に、大量の画面遷移や条件分岐を伴う場合など、難解なプログラムの開発に有効な手法です。全員で意見や知恵を出し合うことにより、難しい仕様でも短時間で読解できるというメリットがあります。
二段目 ITが苦手な経営者向け
とある製造会社の社長さんが情シス課長の阿部さんと廊下ですれ違いました。阿部さん、どうやらいつもと様子が違うようで、社長が声を掛けました。
社長:阿部さん! いつも明るい阿部さんが、今日はちょっと元気がないみたいじゃないか。何かあったのかい?
阿部:いや、それが・・情シス内で立ち上げた業務ハック(開発)チームのオペレーションのことで悩んでいまして・・
社長:業務ハックチームは全員で4名だったかな?
阿部:はい、そうです。皆、一生懸命に開発に取り組んでいますが、出来上がったコードの質が、エンジニアごとにバラバラで。それに、そのコードを書いた担当エンジニア以外は内容を知らないので、その人が休んでしまったりするとその日はプロジェクトが止まってしまうことがあって・・
社長:それは困ったね。解決案はあるかな?
阿部:「ペアプログラミング」という手法を取り入れるか迷っているところです。
社長:ペア・・pair・・、そのペアプログラミングとはどのようにするものなんだい?
阿部:従来は1人のエンジニアが1つのコードを書いていましたが、「ペアプログラミング」は、2人で1つのコードを書くというものになります。
社長:2人で一つのキーボードを”カタカタカタ・・”と叩くのかい?
阿部:いやいや、さすがにそれは無理なんで、2人はそれぞれドライバーとナビゲーターという役割分担があります。ドライバーがキーボードを操作し、ナビゲーターは考え方の提示や指示出し、チェックをするという分担でプログラミングを行います。
社長:へー!そうなんだね。ということは、プログラミングをしながらチェックも同時に完了するんじゃないですか?
阿部:そのとおりです。ドライバーとナビゲーターは30分~1時間ごとに交代。さらに、いつも同じ人とペアを組むのではなくて、一定期間でペアを組み替えると効果的だと聞いています。
社長:ペアを入れ替えるということは、1つのコードをチーム全員で仕上げるということなのかな? うーん、僕にはそのメリットが良くわからないんだけど・・・。
阿部:1つのコードをチーム全員で書くということは、全員がそのコードの内容を理解しているということになります。例えば、誰か一人が離職したり病気で休んだりしても、全員がコードの仕様を理解しているので引き継ぎは不要ですし、仕事が止まってしまうこともありません。
社長:なるほど。確かに1人でもくもくとプログラミングをしていると、他の人にプログラムの内容を共有する機会がないですね。
阿部:まさにそこなんです! ペアプログラミングをすることで、お互いを良く知ることができるのでチームの結束力が生まれるという効果も期待できます。また、他のエンジニアから学ぶ機会にもなり、チーム全体の技術的知識が底上げされるメリットもあるのではないかと思っています。
社長:それはいいですね。
阿部:それと、一人っきりで作業をしているとどうしても自分にまけてしまいがちですが、ペアで作業をすることで気を抜かずにプログラミングに取り組めるというセルフマネジメント効果も期待できます。
社長:はははは!人間は誰でも人の目があるからこそ頑張れるというのはありますね。 是非、ペアプログラミングを導入してみてはどうですか。 ちょうど来週から中途採用のエンジニアが出社するんでしたよね。 いいタイミングなのかもしれませんね?
阿部:そうですね。では、新しいメンバーとのコミュニケーションも兼ねて、ペアプログラミングの導入をトライしてみます。
三段目 小学生向け
今日は、お家の建て方についてのお話です。
皆さんが、他のお友達3人と一緒に大きな家を作るとします。
どのように作りますか?
A君が言いました。「僕、屋根作るね」
Bさんは「じゃあ、私、床を作る」
C君は「壁を作ろうかな」
Dさんは「お庭を作るわ」
皆の役割が決まり、4人は毎日一生懸命に自分の担当する部分を作りだしました。
それぞれの作業がもうすぐ終わりそうなところで、C君が風邪を引いて休んでしまいました。
A君、Bさん、Dさんで、C君の作っている壁もC君の代わりに完成させなくてはいけません。
「あれ、壁のブロックは長方形のやつを使うのかな?」
「正方形のやつじゃない?」
「C君しか知らないから、分からないよ。」
3人は壁の作り方を1から勉強して、長い時間をかけてC君の代わりに壁を完成させました。C君の風邪が治り全員揃ったところで、さあいよいよ4人の担当した部分をつなぎ合わせて、家の形に組み立てます。
まず、Dさんの庭にBさんの床を乗せます。
「あれ、庭の形が丸いのに家の床が四角いからはみ出しちゃった」
次に、Cさんの壁にA君の屋根を乗せます。
「あれあれ、屋根が大きすぎて壁が潰れそうだよ。」
4人は一生懸命に自分の作業を頑張ったのに、最後の組み立てで間違いをたくさん発見してしまいました。
プログラミングの世界では(アプリケーション)ソフトウェアを作りあげますが、実施の現場でも4人の作った家と同じ問題が起こることもあります。
誰か1人がお休みしたらソフトウェアを作る作業は中断してしまうし、1人だけで自分の担当する部分を作っているので、間違いがあっても最後にソフトウェアとしてつなぎ合わせるまで誰も気づきません。
そこで2人でひとつのプログラムを作るという方法、「ペアプログラミング」を考えた人がいました。
「ペアプログラミング」では、2人で1つのプログラムを作るので、1人が間違えてももうひとりが間違いに気づいてくれます。
今回の家のように、もしBさんとDさんが2人で一緒に庭を作っていたら、庭は四角いほうが良いということに気がついたかもしれませんね。
また、「ペアプログラミング」では、2人のペアの組み合わせを変えて行うことも有効とされているので、4人全員が1つのプログラム作りに参加していることになります。そうなると全員がそのプログラムの作り方を知っていることになりますね。
「ペアプログラミング」をしていたら、C君が風邪を引いたときも、A君、Bさん、DさんはC君と同じくらい壁の作り方を知っていたはずです。
このようにプログラミングの世界でも、ひとつのソフトウェアを全員で協力して作り上げる「ペアプログラミング」という方法が注目を集めています。
さて、皆様のご理解は深まったでしょうか?
【執筆:編集Gp 近藤真理】