ペアプログラミングは、二人が同じ開発課題に取り組み、操作する役と全体の方向を考える役を交代しながらコードを書く方法です。Agile Allianceは、一つの作業環境を共有する二人を「ドライバー」「ナビゲーター」と呼び、役割を交代する形で説明しています。出典:Agile Alliance
初めて取り組むなら、一緒に終わらせる小さな課題・交代の合図・終了時に説明する内容を先に決めてみましょう。この記事では基本の役割を整理したうえで、学習を目的に始める際の手順を提案します。手順や会話例は実際の導入事例ではなく、試行のための例です。
ドライバーとナビゲーターの役割
| 役割 | 基本の担当 | 本稿で提案する発話の例 |
|---|---|---|
| ドライバー | コードを入力・変更する | 「まず空の入力を判定する処理を加えます」 |
| ナビゲーター | 同じ課題に参加し、全体の方向を考える | 「空白だけの入力は、今回どこまで扱いますか」 |
役割の基本はAgile Allianceの定義によります。また、実践者による「On Pair Programming」は、ナビゲーターが細かな操作から一歩離れ、次の段階や障害を考えることを勧めています。出典:On Pair Programming
実施時は、ドライバーが「何を変えるか」を短く話し、ナビゲーターは「目的に合っているか」「次に確かめたい条件は何か」を返す形を試してください。ナビゲーターになった人も、疑問や仮説を出す担当を持ちます。
始める前に、課題と終了条件を一つに絞る
以下は、学習を兼ねてペア作業を行うための編集上の提案です。たとえば「入力チェックを改善する」だけでは広いため、「空の名前を入力したときにエラーを返す」と、確認できる振る舞いに落とし込みます。
開始前に、二人で次の項目を埋めてください。
- 対象:どの処理を変更するか。
- 終了条件:どの入力に、何が返ればよいか。
- 対象外:今回扱わない入力や変更は何か。
- 交代の合図:テストを一つ追加したときなど、どの区切りで替わるか。
- 終了時の確認:二人とも何を説明できる状態を目指すか。
この例なら「空文字はエラーにする。空白だけの文字列は別の課題として残す」と決めます。仕様が不明なら、実装に入る前に確認事項として切り出しましょう。
役割交代は、現在地を言葉にしてから行う
Agile Allianceは定期的な交代を説明していますが、ここでは一律の最適分数は定めません。まずは小さな作業の区切りを交代の合図とし、区切りが長くなったら途中でも替わる運用を提案します。
1. 最初の担当を決め、考えながら操作する
学習が目的なら、対象コードに不慣れな人が最初のドライバーを担当する進め方を試せます。操作前に「変更する場所はここだと思います」と話し、相手と認識を合わせます。慣れている人は、すぐに答えを入力するのではなく、確認する場所や判断の理由を問いかけてください。
2. 区切りで「完了・未確認・次」を渡す
交代時には、次の三点を短く伝えます。
- 完了:「空文字を渡すテストを追加した」
- 未確認:「既存の入力チェックとの順序はまだ見ていない」
- 次:「エラーを返す処理を書き、テストを実行する」
新しいドライバーは「次はこの条件を確認してから処理を足す」と、自分の言葉で言い直します。説明が食い違ったら、その場で対象コードやテストを一緒に見直してください。
3. 交代後も、前の担当が考える役を続ける
操作を渡した人は、次に確認すべき条件や変更範囲に注意を向けます。新しいドライバーが迷ったときは、「どこまで分かっているか」を聞いてから補足する進め方を提案します。
操作を取り戻す必要がある場合も、「この調査だけ交代し、終わったら戻す」と範囲を合意しましょう。交代の回数に加えて、二人とも変更理由を説明できるかを確認します。
つまずいたときの判断表
次の表は、ペアの進め方を調整するための提案です。効果を保証する基準ではありません。
| 起きていること | その場で確認すること | 試す対応 |
|---|---|---|
| 経験者だけが操作している | 相手が次の変更を説明できるか | 小さい変更を一つ渡し、操作を交代する |
| ナビゲーターが黙っている | 目的や用語が共有されているか | 進行を止め、不明点を一つずつ確認する |
| 指示どおりに入力するだけになった | ドライバー自身の判断があるか | 変更理由を話してから入力する |
| 二人とも調べ方が分からない | 不明点が何か言語化できるか | 調査する問いを一つに絞り、必要なら別々に調べて再集合する |
| 設計の議論が終わらない | 今回決める範囲が広すぎないか | 選択肢と確認方法を書き、未決事項を残す |
| 集中が続かない | 続行するか休むか合意できているか | 休憩し、再開時に残作業を確認する |
ペア作業の疲労と休憩の必要性は「On Pair Programming」でも扱われています。予定を組む際は、休憩や一人で整理する時間も含めてください。出典:On Pair Programming
リモートでは操作を交代できる準備をする
「On Pair Programming」は、遠隔でのペア作業について、画面を見るだけでなく操作を交代できる環境を説明しています。出典:Remote Pairing
始める前に、会社で利用を認められた環境で、二人ともコードと実行結果を読めるか、操作を引き継げるかを確認しましょう。本稿では、短い試し操作をしてから課題に入ることを提案します。交代できない場合は、その準備を先に行うか、今回は説明を受ける時間と位置付けて目的を調整してください。
終了時は、学んだことを次の作業につなげる
振り返りでは「分かったか」だけで終わらず、二人がそれぞれ次の問いに答えてみてください。
- 今回の変更は、どの振る舞いを実現するためのものか。
- どのテストや実行結果で確認したか。
- まだ確かめていない条件は何か。
- 次に一人で進めるなら、どこから着手するか。
答えにくかった箇所は、次回の小さな課題として残します。課題の完了と、各自が説明できた範囲を分けて記録する運用を提案します。
まずは一つの変更で役割を交代し、終了時に二人とも変更理由を説明するところから始めてください。新しいメンバーを受け入れる全体の流れは、エンジニアのオンボーディングも参照できます。