リモートペアプロにおける3つのフォーメーション

本稿は DDD-Community-Jp Advent Calendar 2020の9日目の記事です。

先日、(アートオブアジャイルデベロップメント読書会 #2 - connpass)という読書会に参加しました。

当日のお題は「ペアプロ」でした。この読書会全体のテーマは「アジャイル」なので、アジャイル開発を実践したり、興味がある人が参加者の属性として多いわけですが、そのなかでもペアプロをやったことない人が多くいました(これは、とても意外!)。

ペアプロ(ペアプログラミング)は、XPのプラクティスとしても有名です。近年では、モブプロ(モブプログラミング)もかなり広まっていますね。

ペアプロを始めるにあたって考慮すべきことはいくつかあります。

例えば、ペアプロのやり方やペアプロに必要な環境の構築方法、どうやって雰囲気を作るか、業務でペアプロを導入するための工夫などです。

どれも大切なのですが、この記事では、初めてペアプロ(特に、リモートペアプロ)をするときに意識すると良いことと、具体的な構成について紹介します。

特に、これからペアプロを始めようと思っている方の支援になればと思います。

伝えたいことは2つ

伝えたいことは次の2つです。

  1. ペアプロは練習すると、うまくなる。練習しないと、へたっぴのまま。
  2. インフラ環境への投資はとっても大切。(← 詳細は別記事で)

ペアプロは、とにかく練習です。同時に環境への投資も重要です。

それらをろくにせず「本番業務をすべてペアプロでやりましょう!」みたいなことをするのは相当にリスクが高いです。

さらに最悪なのは「ペアプロ自体が役に立たないもの」と思ってしまうことです。

ペアプロの練習不足やペアプロの環境不備 → ペアプロ体験が最悪になる → ペアプロが悪いものだと認識してしまう(練習と環境整備をしていればそうはならなかったかもしれない!)

3つの具体的なフォーメーションの提案

練習をしましょう。しかし、実際にどのように練習すればよいのでしょうか。

考えるべきことはたくさんありますが、ここでは、具体的な構成について説明します。 (交代するタイミングやペアプロのコツ、失敗した話についてはまたいずれ)

1. Push/Pull パターン(おすすめ度: ★★★★★)

やり方

  • 開発環境は各自のマシンで好きなものを採用する
  • 交代する際には、Push/Pull を行う
  • ドライバーの画面を共有しながら進める
    • GoogleMeet は 複数名の画面共有が同時にできるので非常に快適!
    • Zoomは共有される画面の切り替えが手間なので、おすすめできない(自分は耐えられなかった)

嬉しさとツラさ

👼 各自の開発環境(IDEやエディタなど)が使えるのでストレスが少ない
👼 相手のツールの使い方を見て学べる
👼 GitHubに慣れていればスムーズ

👿 交代するのに少し時間がかかる(賛否あり)
👿 指摘がちょっと面倒なときがある(カバー可能)

🌏 GitHubが落ちてもGitLabやBitBucketで回避可能

ちょっと一言: 「交代するために Push/Pull が必要」はマイナスばかりではない

たしかに、Push/Pullするのはちょっとだけ手間と時間がかかる。きっとそれは、オフラインにおけるキーボード交代や、同時編集よりは手間。

しかし、個人としてはむしろメリットだと捉えています。

それは「交代時に Commit が必要となる」からです。絶対に Commit するので、振り返りの回数が自然と多くなります。

  • 「えっと、何をやったんでしたっけ?」
  • 「次は何をするんだっけ?」
  • 「○○という発見があったよね」

普段はあまり省みることが少ない(であろう)コミットメッセージさえもペアプロするのです!

ただし、万人にとって良いかというと、経験上は微妙なところです。。

  • コミットメッセージが煩わしいというマインドセットがある場合、ただのマイナス要素になる
  • コミットログが多くなっちゃうのイヤ
  • 中途半端なコミットログが恥ずかしい感じがちょっとある(昔はあった

2. LiveShare パターン(おすすめ度: ★★★☆☆)

やり方

嬉しさとツラさ

👼 環境構築の負担がホストだけで済む
👼 交代のコストが掛からない
👼 ナビゲーターもコードで示すことができる

👿 自分の使い慣れた環境ではないのはかなりのストレス(逆にいうと、揃えたら無敵)
👿 ホスト側の環境での作業になる
👿 たまに動きが怪しい時がある

🌏 実はLiveShareでの通話もできる
🌏 Follow機能がすごい
🌏 IntelliJの公式プラグインもある → Code With Me EAP リリース – IntelliJ IDEA Blog | JetBrains

ちょっと一言: 実際に体験してみたほうがよい

  • これは実際にやってみてください(やってみないと分からない)

3. ブラウザIDEパターン(おすすめ度: ★☆☆☆☆)

やり方

  • ブラウザIDEを使って
    • 複数人数での同時操作ができるサービスが多い
  • ブラウザIDEの例
    • AWS Cloud9
    • repl.it
    • gitpod
    • etc...

嬉しさとツラさ

👼 ブラウザがあればそれでOK(アカウント登録などは必要)
👼 交代のコストが掛からない
👼 ナビゲーターもコードで示すことができる

👿 IDEとしては貧弱なことが多い

🌏 将来的にはかなり強くなる予感
🌏 準備が少なく済むので、勉強会などでは活躍する

まとめ

本当にしつこいですが、ペアプロは練習が必須です。

今回紹介した「リモートペアプロのフォーメーション」も実際に試してみると良いと思います。

記事が長くなってしまうので、インフラ環境への投資(リモートペアプロにおいて利用するツールや特性など)については別の記事で書こうと思います。