【用語解説】モブプログラミング(ペアプログラミング)
モブプロとは?
モブプログラミング(通称:モブプロ)とは、3人以上のエンジニアが協力して1つのプログラムを作成する開発手法です。1つのコンピューターの前に集まり、役割を分担しながら進めます。モブプロには以下の2つの主な役割があります。
- ドライバー(タイピスト)
- キーボードを操作し、実際にコードを書く役割です。
- ドライバーはナビゲーターの指示に従ってコードを記述しますが、改善の提案も行うことができます。
- 常に1人で、数十分といった一定の時間ごとに他のメンバーと交代します。
- ナビゲーター
- ドライバーに対してどのようなコードを書くべきか指示を出す役割です。
- 複数人で議論しながら、問題の解決方法を考え、ドライバーに伝えます。
- ナビゲーターも交代しながら進めます。
モブプロの特性として、対応方針が複数あり、手戻りが発生しやすいタスクに効果が高いことが挙げられます。そのため、プログラミング以外にも、プロジェクトの計画作成や報告資料作成など、さまざまなタスクで効果的に利用されています。ただし、対応方針が決まっており、手戻りがあまり発生しない作業的なタスクには不向きです。
ペアプロとは?
ペアプログラミング(通称:ペアプロ)は、2人のプログラマーが1つのプログラムを共同で開発する手法です。アジャイル開発でよく採用されており、次の2つの役割に分かれて作業を行います。
ペアプロでは、ドライバーとナビゲーターの役割を30分ごと、またはテスト1つを完成させるなどのタイミングで交代することが推奨されています。また、一定期間でペア自体を組み替えることもあります。
モブプロを導入するメリット
- 効率的な作業とコードの質の向上
- チーム全員で意見を出し合いながら作業するため、個々で考え込む時間が減り、効率よく作業が進められます。
- モブプロで作成したコードは、チーム全員によるレビューが自然と行われるため、コードの質が向上します。
- 技術や知識の共有
- メンバー各自が持つ知識やノウハウを共有できるため、個々のスキルがチーム全体に広がります。
- 属人化がなくなり、特定のメンバーだけが作業内容を詳しく知っている状況が改善され、チーム全員が作業内容を把握するようになります。
- コミュニケーションの促進
- モブプロを導入すると、自然とメンバー同士のコミュニケーション量が増えます。これにより、設計の考え方やフィードバックの場面が増え、チームの一体感が高まります。
- 新しいメンバーが加わったばかりのチームでも、モブプロを通じてお互いを知る機会が増え、コミュニケーションの取り方に悩むことが減ります。
- 全員が責任を持つ体制の確立
- 作業内容がチーム全員で共有されているため、成果物に対して全員が責任を持つ意識が高まります。
- 同期の手間の削減
- 分担作業の前後で発生する同期のコミュニケーションが不要となり、作業の属人化や同期のずれがなくなります。
モブプログラミングはチームの生産性向上やコミュニケーションの改善、そして高品質なコードの作成に貢献します。
モブプロの実施時の注意点
以下の注意点に留意することで、モブプログラミングの効果を最大化し、チーム全体の生産性とコミュニケーションの質を向上させることができます。
- 発言機会の偏り
- 大勢で作業するため、発言の機会が偏り、特に発言力が強い人の意見に集約されがちです。
- ナレッジ差によって発言しなくなるメンバーが出ることがあり、モブプロの効果が薄れてしまいます。
- 依存と属人化のリスク
- チームメンバーに依存しやすく、特定のメンバーだけが詳細を知る属人化が進む可能性があります。
- 知見や技術の共有が気軽に行えず、情報が偏るとチーム全体の生産性が低下するリスクがあります。
- 役割交換の忘れ
- 日常的にモブプロを行うと、ドライバーとナビゲーターの役割を交換するタイミングを見失うことがあり、役割が固定化されてしまうことがあります。
- 役割の交換は、作業のテンポを良くするためにも重要ですので、定期的な交換を忘れないようにします。
- 作業時間の制限
- モブプロは集中力を要し、長時間続けると疲労が溜まります。適切な休憩や、モブプロと分担作業を組み合わせて効率的に作業を進めることが必要です。
- タスクの選別
- すべてのタスクをモブプロで行うのは非効率です。不確実性が高く、チーム全体で検討する価値があるタスクはモブプロで行い、単純で同期が必要ないタスクは分担作業にするなど、タスクの性質に応じて作業方法を選別する必要があります。
- 知見がない場合の対策
- チームに誰も知見がない場合、作業が滞るリスクがあります。その場合は、一定時間調査する、詳しい人を呼んで指導を受けるなど、進行を妨げる要因を想定して対策を事前に考えておくことが重要です。
- 議論の管理とファシリテーション
- 議論がヒートアップして雰囲気が悪くなることがあります。ファシリテーターを立てて、議論の進行を管理し、必要に応じて場をクールダウンさせることが求められます。
- ファシリテーターでない参加者も、進行が停滞した場合は積極的にファシリテーションに参加することが大切です。
- 個人作業の確保
- モブプロでは個人作業の時間を確保するのが難しいため、チーム全員の合意で個人作業の時間を確保する必要があります。
- 目的の共有と確認
- 参加者が各自のゴールを持ってしまい、方向性がバラバラになることがあります。常に目的をホワイトボードなどに表示し、定期的に確認することで一貫した方向性を維持します。
モブプロを導入する流れ
モブプログラミングを導入する流れは以下の手順で進めます。
- 合意の形成
- モブプロの導入にあたり、開発メンバー全員と合意を取ります。開発の進め方が変わるため、プロジェクトマネージャーや他の関係者とも調整を行い、全員が理解・納得したうえで進めます。導入の理由と目標を明確にして、モブプロが試みであり、いつでも中止できることを共有します。
- モブプロの概要理解
- モブプロに取り組んだことがない場合は、スライドや書籍などで進め方の概要を把握します。モブプロの効果や手順、役割の理解を深め、チーム全員で共通認識を持ちます。
- 目的とゴールの共有
- モブプロ開始前に、参加者全員でタスクの目的やゴールを共有します。例えば、試作品のデモを作ることとリリースを目指すことでは作業の優先順位が異なるため、目的が明確であることが重要です。また、残りの作業と進める順序を全員で確認し、見通しを立てて進めます。
- 実施内容とタイミングの決定
- モブプロをいつ実施するか、どのタスクをモブプロで進めるかを決めます。モブプロに適したタスクは、3~5人の少人数で2ローテーション以内で完了できるものが理想です。また、モブプロが適していないタスクは分担して進めます。
- タイピストの順番とルール設定
- タイピスト(ドライバー)の順番を決め、役割交代の時間(10〜20分)を厳守するルールを設定します。役割交代のタイミングは、チームの現状を整理する良い機会にもなります。
- 準備と開始
- 最初のタイピストがコードエディタ(例: VSCode)のLiveShareリンクを発行して、他のメンバーに共有します。これにより、全員が同じ環境で作業を進められます。
- モブプロの実施
- モブプロを開始します。タイピストはコーディングを担当し、モブは指示を出したり調査内容をメモしたりしてサポートします。参加者は自分が考えていることや悩みを言語化し、チーム全体で議論して問題を解決します。判断の理由を必ず言語化し、他のメンバーにも成長の機会を提供します。
- 役割交代と休憩
- 役割を20分ごとに交代し、一周回ったら適宜休憩を取ります。これにより、全員が積極的に参加できる環境を整えます。
- 振り返り
- モブプロ終了後に振り返りを行い、良かった点・課題点・その対策を3分程度で各自発表します。この振り返りによって、次回の改善点を明確にし、継続的にプロセスを向上させます。
この手順を踏むことで、モブプログラミングを効果的に導入し、チーム全体の生産性と協力関係を高めることができます。
まとめ
チームの力を最大限に引き出す開発手法「モブプロ」。
チーム全員の知識と力を結集して進めるモブプロは、個人の負担を軽減しながらも、チーム全体の成果物の品質を向上させる効果があります。導入に際しては注意点もありますが、それらを乗り越えれば、より効率的で一体感のある開発が実現できます。
チームのポテンシャルを最大限に引き出すために、モブプロを活用してみてはいかがでしょうか。