XP(eXtreme Programming)についてあまり詳しくない方でも,「ペア・プログラミング」という言葉は耳にしたことがあるはずだ。ペア・プログラミングは文字通り,2人の開発者がペアを組んで設計や実装を行うプラクティスである。実際にキーボードを持ちながらコードを書く人を「ドライバ」,ドライバの横で作業を見ながらサポートする人を「ナビゲータ」と呼ぶ。ペアを組む2人は,適宜これらの役割を交代しつつ作業を進めていく。

 TRICHORDチームでは,このペア・プログラミングをベースに「ペア作業」という形式で日々のタスクをこなしている。ペア“作業”としているのは,プログラミング以外にもペアで作業することがあるからだ。


図1 ペア作業の様子
写真右側(奥)の「ドライバ」が実際にコードなどを記述し,左側(手前)の「ナビゲータ」がそれをサポートする。

[画像のクリックで拡大表示]

 あえてペアで作業する理由はいくつかある。一つは知識と経験の共有だ。ここで,一般的に言われるペアの知識移転,つまり高いスキルを持つ人と,そうでない人が組むペア間での知識の伝播については言うまでもないだろう。むしろ強調しておきたいのは「経験」の共有である。

 ペアで作業しない場合,各自が行う作業の経験は一人ひとりにとどまり,そのままでは共有されない。もちろん,必要があれば「ドキュメント」による経験の形式知化や「説明」による知識移転を行って知識の共有を図ることもあるが,実際の作業を進めていくなかで,すべての経験をほかのメンバーと共有するのはなかなか難しい。

 これに対して,ペア作業では大抵の作業をペアで実施する。このときの経験は少なくとも2名の開発者の間で共有される。プロジェクト内でペアの組み方や作業の割り当て方を変えることで,結果的に多くのメンバーで経験を共有できるようになるはずだ。

 ここで一つ疑問が生じる。経験は,すべて形式知化すればチーム内で共有できるのだろうか? 情報を形式知化し,共有するのに十分な時間さえあれば可能だ,という人もいるかもしれない。もしそうなら,ペア作業とソロ作業(1人で行う作業)の違いは,共有しつつ作業を進めるか,後でまとめて共有するか,の違いだけになる。

 しかし,形式知化された情報の共有と実際に作業を経験する共有では,情報を伝達する際の“バンド幅”に大きな差がある。経験はそのときのコンテキスト情報まで含めて共有するが,経験を形式知化した時点でそうしたコンテキスト情報が失われてしまうからだ。単に形式知化するだけでは補完できない,経験の共有という点が重要なのだ。

 また,このように経験を共有しておくことで,「トラック・ナンバー」と呼ばれるリスクも軽減できる。トラック・ナンバーは,仮にチーム・メンバーがトラックにひかれてしまっても,問題なくプロジェクトを継続できる人数のことである。全く経験を共有していない場合,トラック・ナンバーは1であり,1人トラックにひかれてしまうとプロジェクトが継続できなくなる。

 2つ目に取り上げるのは作業効率だ。ここで作業効率と聞いて驚く人もいるかもしれない。「なぜ2人で1つの作業を行うことが効率的なのか」と。ペア作業で求める効率はチーム全体,プロジェクト全体の効率である。これは単純な作業効率だけの話ではない。一人ひとりが作業をした後で,互いの情報を共有するコスト,1人で作業した場合にタイムボックスを忘れて長時間ハマってしまうリスク,問題が発生したときに2つの頭で考えることの効率など,様々な点を考慮したうえでの全般的な効率の向上を意味する。

 単純にタスクの進ちょくだけを考えれば,ペア作業がソロ作業に比べて効率が悪い場合がある,という点は否定しない。しかしチーム全体の作業効率を考えたとき,ペア作業はソロ作業よりも効率が良いケースが多い。ペア作業による効率化は,短期的,目に見える効率ではなく,長期的,目に見えない全体最適としての作業効率を向上させるのである。

 最後に,ペア作業によって得られる達成感と,モチベーションの維持についても触れておきたい。困難な作業をやり遂げたとき,1人の場合と2人の場合ではどちらがうれしいだろうか。筆者自身は立場上,実際にペア作業することはほとんどないが,チームのメンバーがペアで「やったー!」と歓喜している姿を見たり声を聞いたりするたびに,うらやましいと思う。喜びは1人よりも,皆で分かち合えたほうがよい。

 次回は,実際にペア作業をするときの注意点などを解説したい。

懸田 剛

チェンジビジョンでプロジェクトの見える化ツール「TRICHORD(トライコード)」の開発を担当。デジタルなハックと,アナログなハックの両方を好む。新しいやり方やツールを考えるのが好きである。個人サイトは http://log.giantech.jp/