selmertsxの素振り日記

ひたすら日々の素振り内容を書き続けるだけの日記

モブプログラミングの進め方

この文章の目的

システム開発における共通認識の作成、または共同学習を目的としてペア/モブプログラミングが有効とされています。 モブプロをより良いものにするためのプラクティスについて、モブプログラミング ベストプラクティスという書籍を元に説明します。

モブプログラミングとは何か?

モブプログラミングでは、3人以上の人間で一つのプログラミングを作成します。 必要なものは全員が集まって開発できるスペース、一つの大きなディスプレイ、ホワイトボード、一つ以上のPCです。 モブプログラミングについて雰囲気を掴むには、実際業務している下記の動画を見るのが良いでしょう。

https://www.youtube.com/watch?v=Ev7uus12HRY

ペア/モブプログラミングの効能

モブプログラミングを初めて目にする人の多くは、とても非効率的な仕事であると感じます。 しかしながら、このプラクティスは多くの企業に受け入れられており、プロダクションで利用されるすべてのコードをペア/モブプログラミングで実施している企業は少なくありません。 例えば、言わずと知れた Microsoft や、ジョイ・インクの著者であるMenlo Innovations CEOのRich Sheridan氏の会社ではペア/モブプログラミングで開発を行っています。 日本においてもヤフー株式会社、Newspicksを開発している株式会社ユーザーベース、楽天株式会社など、多くの企業が実践しています。

一般的に、モブプログラミングは下記の項目を目的として実施されます。

  • プログラミングの品質向上
    • 内的品質(拡張性や可読性などプログラミングの書き方に関する品質)と
    • 外的品質(パフォーマンスや耐障害性、バグの多寡に関する品質)
    • 上記2つの品質に対して、双方の質の向上を目的とする
  • 開発におけるフロー効率の向上
  • 属人的なタスクの減少
  • チームメンバーの教育と、それによるチーム全体の開発効率の中長期的な向上

上記目標に関して、ヤフー株式会社は明らかに成果が得られていると報告しています。 「LeanとDevOpsの科学」によると、特に外的品質の向上を目的としたチーム外の組織による変更承認プロセスは、開発速度に対して明らかな負の相関を持っており、品質の向上には寄与していないと説明されています。 そのような障害を減らすために、承認プロセスよりもチーム内でペアプログラミングなどによる確認作業を行うことを推奨しています。 そして、日本CTO協会が作成したアセスメントツールである「DX Criteria」でもバリューストリームの最適化のためにペア/モブプログラミングを推奨しています。

モブプログラミングの進め方

環境を整える

一緒に開発する環境を整えていきましょう。個人的には VSCodeのLive Shareを利用するのが一番簡単だと思います。 VSCodeを開いて、ctr + Shift + p して install extentions を選択。検索用のtext boxにてLive Shareと入力します。 そして下図の extentionをインストールします。

f:id:selmertsx:20210811104227p:plain

そして、Editorの下にある下記 「Live Share」ボタンを押せば完了です。

f:id:selmertsx:20210811104243p:plain

すると Live Shareを実施するためのクリップボードにコピーされるので、それをSlackで共有しましょう。 このURLをクリックした人は、招待した人の VS Codeの環境に入ってコーディングすることが可能になります。

メンバーを揃えて役割分担を行う

モブプログラミング ベストプラクティスによると、モブプログラミングを行うメンバーは、プロジェクトの背景や利用する技術を理解していることが望ましいとされています。 そのため、同じチームか技術的に共通項のある人と一緒に開発をするのが良いでしょう。 モブプログラミングには2つの役割が存在します。1つめはタイピスト、直接コーディングをする人です。 2つめの役割はモブ、タイピストに指示を出す人です。難しい課題を解く際は、専門の進行役を設定することもあります。

タイピストの役割

  • タイピストは自分で考えてコーディングしてはいけない
  • モブの指示を理解し、指示された内容でもって実装を行わなければならない
  • 指示された内容よりも、より良い方法が思い浮かんだとしても、それを実装してはならない
  • モブの指示を信頼し、自分が通常試さない方法でもやってみること

モブの役割

  • タイピストに支持を出す
  • 目の前の問題に集中する
  • 問題解決のために、これからやること、これまで分かったことをホワイトボードに整理する
  • 他のモブの意見をよく聞き、分からない部分があれば質問する
  • 必要になりそうなドキュメントを探し、適切なタイミングで提示する
  • 書き上げたプログラムの中で改善可能なものがあれば、適切な方法で伝える

タイムテーブル

準備 (15分くらい)

  • モブプログラミングで解決する問題の概要と大まかな手順について話し合う (10分)
  • タイピストの順番を決める

モビングインターバル

  • 10分インターバルでタイピストを交換し、プログラミングを続ける
  • 定めた目標を達成するまで続ける

振り返り (20分)

  • 当日実施したモブプログラミングに対して振り返りを行う
  • 振り返りにおいては、事実の確認をした後に、KPTをする

教育目的のモブプログラミングの進め方

少数のベテランと多数のビギナーの組み合わせでモブプログラミングを行います。 まずベテランがコードを書きながらビギナーに説明をします。 それによって、ビギナーはベテランのスキルを盗むことができます。

次に、ビギナーがコーディングを行い、ベテランは指示をします。 ベテランがサクサク書いてるとビギナーは分かったつもりになってしまい安く、実際にコーディングすることで本当の理解度を確認、向上させることが目的です。 また、ベテランはビギナーに説明しながらコードを書かせることによって、理解して貰える説明方法を考えることによって深く技術を理解します。

これは技術的な領域だけでなく、業務のドメイン的な知識においても同様に効果があると言われています。

参考資料

とても参考になった

参考になった

個人的に好き