使える! 情シス三段用語辞典105「モブプロ(モブプログラミング)」
常に新しい用語が生まれてくる情報システム部門は、全ての用語を正しく理解するのも一苦労。ましてや他人に伝えるとなると更に難しくなります。『情シスNavi.』では数々のIT用語を三段階で説明します。
一段目 ITの知識がある人向けの説明
二段目 ITが苦手な経営者に理解してもらえる説明
三段目 小学生にもわかる説明
取り上げる用語を“知らない”と思った人は、小学生にもわかる説明から読んでみると、理解が深まるかもしれません!?
この記事の目次
一段目 ITの知識がある人向け「モブプロ(モブプログラミング)」の意味
3人以上のエンジニアで1つのプログラムを書くという「モブプログラミング(mob programming)」というソフトウェアの開発手法が注目されています。
モブ(=群衆)で行うプログラミングとはどのようなものでしょうか。
また、モブプログラミングのメリットとデメリット、ペアプログラミングとの違いも説明します。
モブプログラミングの流れ
“モブ(mob:群衆)”が集まって行うモブプログラミングでは、3人以上のエンジニアが協力して1つのプログラムを完成させます。しかしながら。大人数でプログラミングをするといっても、全員がプログラムを書くのではありません。
モブプログラミングの参加者にはそれぞれ役割分担があります。
1人がキーボードを操作してコードを書く「ドライバー(タイピスト)」、その他の人はディスプレイに映した画面を見ながら意見する「ナビゲーター」です。
- ドライバー(タイピスト)
PCを使用してプログラムのコードを書き続けます。
ドライバーは、ナビゲーターの指示に従ってコードを作成しますが、改善の提案なども行います。ドライバーは常に1名です。 - ナビゲーター
ナビゲーターは、基本的にPCを使用せず、ナビゲーター同士で議論をしながらドライバーに対し、どのようなコードにするのか具体的な指示を出し続けます。ナビゲーターは常に複数人です。
また、ドライバーとナビゲーターの役割は、15分ごとや30分ごとなど一定時間で交代する方が良いとされています。
ペアプログラミングとの違い
モブプログラミングと似た手法として「ペアプログラミング(pair programming)」があります。 ペアプログラミングでは、2人共同で1つのプログラムを書きます。(参考:使える! 情シス三段用語辞典104「ペアプロ(ペアプログラミング)」)
3人以上のエンジニアで1つのプログラムを完成させるモブプログラミングとは、ペアなのか3人以上かという数の違いがありますが、キーボードを叩いてコードを書くドライバーと指示出しをするナビゲーターの役割分担は同じです。
ペアプログラミングは常に2人のペアで密なコミュニケーションを行うため、例えば「●●さんとのペアは避けたい」などの対人関係の問題が生じることがありますが、モブプログラミングでは、3人以上のチームで行うため、このような対人関係の衝突は回避できます。
また、ペアプログラミングでは、誰と誰がペアを組んでいるのかを常に把握しておく必要がありますが、モブプログラミングでは細かいチーム管理が不要になります。ペアプログラミングの発展形がモブプログラミングなのです。
モブプログラミングのメリットとデメリット
モブプログラミングには次のようなメリットがあります。
- 難しい問題でも、1人で考え込まずに参加者で知恵を出し合うことで、素早く解決でき効率が上がる
- モブプログラミングで作成したコードは結果的にレビュー済みとなり、コードの質が向上する
- 1個人が持つ知見を他のエンジニアに共有できる
- チームの全員がコードについての共通認識を持てるため、チームの一員が突然不在になってもプロジェクトを止めることなく、他のメンバーでカバーできる
- エンジニア同士のコミュニケーションが促進される
モブプログラミングを取り入れるメリットは挙げればきりがありませんが、多くのモブプログラミング経験者が漏らす感想は「皆でワイワイとプログラミングするので楽しめる」ということです。
一方で、モブプログラミングのデメリットは次のような点です。
- 大勢でプログラミングするため発言する回数が少なくなり、集中力が切れる
- 他の誰かがミスに気がついてくれるだろうと他のエンジニアに依存しがちになる
- 複数のナビゲーターで1人のドライバーを攻撃する構図になりがち
このような事態を回避し、モブプログラミングを成功させるには、「チームの一人ひとりが1日中考え抜き、アイデアを出し合って、常に前向きに解決策を探り続ける」という高度なコミュニケーションが必須です。
2014年のAgile AllianceのプレゼンターWoody Zuill氏は、”Mob Programming A Whole Team Approach”の中で、モブプログラミングで高度なコミュニケーションを維持する秘訣として、次のような原則を紹介しています。
The Principle of Treating Each Other with Kindness, Consideration and Respect
(優しさ・思いやり・尊敬の念を持って接し合う原則)
チーム全体でのコミュニケーションと団結を促進するチームビルディングの手法として、モブプログラミングを取り入れるのも良い選択でしょう。
二段目 ITが苦手な経営者向け
とある電機メーカーの社長さんと情シス課長の盛部さんは実は飲み仲間。盛部さんが何やら相談事があるようで社長室にやってきました。
盛部:社長、情シス内の開発チームでの取り組みについて、ご意見を伺いたいことがありまして・・
社長:開発チームは全員で3名だったよね?
盛部:はい。でも、先週から新卒者が1名、中途採用者1名が加わり、念願の5名体制になったところです。 ありがとうございました。 けれども…。
社長:ん? どうかしたのですか?
盛部:皆、一生懸命に開発に取り組んでいるのですが、出来上がったコードの質が、エンジニアごとにバラバラなのと、メンバーが増えたことで一体感がないというか…。
社長:それは困りましたね。何か解決策は考えているのですか?
盛部:「モブプログラミング」という手法を取り入れるか迷っているところです。
社長:モブ・・は”群衆”の意味のmobのことかな? そのモブプログラミングとはどのようにするものなのでしょうか?
盛部:これまでは1人のエンジニアが1つのコードを書いていましたが、モブプログラミングは、3人以上のチームで1つのコードを書くというものです。
社長:チームで1つのコード書く? そんなことができるのですか?
盛部:正確には、全員がキーボードを叩いているのではなく、1人がドライバー、残りの参加者は全員ナビゲーターという役割を担います。ドライバーがキーボードを操作し、ナビゲーターは考え方の提示や指示出し、チェックをするという分担でプログラミングをします。
社長:へー!そうなんですね。ということは、プログラミングをしながらチェックも同時に完了するということかな。
盛部: おっしゃる通りです。コードの質が上がるだけではなくて、難しい問題であっても参加者全員の知見を持ち寄ることで、素早く解決策が見つかることも多いんです。それに、チーム全員でのコミュニケーションが活発になるので、結束力が高まるというメリットもあります。
社長:なるほど。まさに「三人寄れば文殊の知恵」ですね!
盛部:そうなんです。でも、大勢で1つのプログラムに取り組むことになるので、メンバーの集中力が切れてしまうと「他の誰かがチェックしているだろう」と逆にミスを見落としてしまうリスクもあります。
社長:やはり何事も一長一短はありますね。 他にも手段は考えているのですか?
盛部:モブプログラミングと似た手法で、3人以上ではなくて2人のペアで1つのプログラムに取り組む「ペアプログラミング」という手法もありまして、他のメンバーに頼り切ってミスを見逃すリスクはペアプログラミングの方が少なくなります。
社長:うーん…。 難しい判断ですが、新しいメンバーが2人も入ったことだし、チーム全員でのコミュニケーションを増やすためにも、まずはモブプログラミングを取り入れてみるのも良いのかもしれませんね。2人が職場に慣れたところで、ペアプログラミングに切り替えるとか、他の人の効率も考えて従来の1人プログラミングも組み合わせるとかはどうだろうか。
盛部:社長、ありがとうございます。 そうですね!では、チームビルディングの一貫として、まずはモブプログラミング大会を開催してみることにします。
三段目 小学生向け
今日は、難しい宿題を早く終わらせる方法をこっそり教えますね。
先生が出した宿題は、皆さんの嫌いな算数。 しかも、掛け算をして、割り算をして、最後に足し算をしてやっと解ける難しい問題のようです。
「掛け算だけなら、僕得意なのに」とA君。
「先生、割り算だけの宿題にしてよ」とBさん。
「僕、足し算習ったばっかりだから、他の計算はできないよ」とC君
A君・Bさん・C君は、自分の知っている計算方法を使って、宿題に取り組み始めました。30分経過…、1時間経過…。 誰もまだ宿題が終わっていません。
そこに足し算しかできないC君がやってきました。
「A君、Bさん、掛け算と割り算を教えてよ」
「いいよー。それなら3人で一緒に宿題をやろうよ」
C君がノートにA君とBさんの考え方をまとめていきます。
「あれ、割り算しなきゃいけないと思っていたけど、掛け算でも解けるよね」とA君。
「あ、ほんとだ。掛け算だって、全部足し算で計算することもできるよね」とBさん。
「C君の計算式の書き方きれいだね。僕も真似してみよう」とA君。
1人だけでは絶対に終わらないと思っていた宿題を、3人で協力することで終わらせることができました。
そして、宿題が終わっただけではありません。 これまで知らなかった計算方法やノートの書き方もお互いに教え合うことでみんなの知識が向上しました。それに、なにより皆で協力して宿題をやり遂げた3人は、なんだかこれまでより仲良くなった気がします。
このようなことがプログラミングの世界でもあります。 ひとつのソフトウェアを3人以上のチームで協力して作り上げる「モブプログラミング」という方法です。
「三人寄れば文殊の知恵」ということわざはもう習ったかな? 宿題でもプログラミングでも同じなんです。
さて、皆様のご理解は深まったでしょうか?
【執筆:編集Gp 近藤真理】