この記事はテックタッチアドベントカレンダー4日目を担当する misu です。最近ミニマリストに興味が出て、より少ない生き方という本を読んでいます。モノを減らすと豊かになるらしいです。
この記事について
リモートでペアプログラミングをするにあたっての設定やペアプログラミング(以下、ペアプロ)自体のメリットなどを紹介します。
前提
- 今回ペアで作業する misu と同僚はペアプロ初めて
- エディタは Code (Visual Studio Code)。
- 開発言語は Go。インフラ設定で Cloudformation。
- 同僚は入社したばかりでプロダクションコードに詳しくない。misu は 2 年在籍なのでコードの見通しはつく。
ペアプロの目的
- 同僚に弊社でのコードの書き方、勘所などを早く理解してもらいたい
- スクラムチーム内で早くバリューを出してもらうため
- そもそもペアプロにどんなメリットあるのか体感したい
- 「スキルシェアやレビューコストの削減になりそう」というのをチームの同僚から聞いていた
ペアプロの進め方
午前中に今日やることの認識合わせやタスク分解を行う。あとは、タスクをタイピスト・オペレータを交代しつつ片付けていく。最後に振り返りをして終了。
以下言葉の定義。
- タイピスト
- キーボードを触る人(≠プログラマー)
- 指示を理解し、質問し、実装する(指示がない内容を勝手に書きすすめることはNG)
- 改善案がある場合は提案を行い、双方で合意してからコードに反映する。対話的に作業を続けていくため。
- オペレータ
- タイピストに実装内容を指示する
作業の流れ
- タイピスト A・オペレータ B で12分
- 交代。タイピスト B・オペレータ A で12分
- 休憩5分 ← ここまでを 1 セット
- 上記を 2 ~ 4 セット
- 大休憩 20 分
- 1 に戻る
1 セットの時間はポモドーロに習って作業時間が 25 分に収まるようにした。
1人作業と比較してのペアプロのよさ
- 強制的に集中できる
- 常に、自分が話したり聞いたりした内容を理解して打ち込まないといけないため
- そのため、「なんとなく作業の間で Slack を見る」といった行動ができないのがいい
- 集中が続かない状態でずるずる作業をできないようになった
- 詰まったときにすぐに相談・解消できる
- 自分がオペレータのときは何かしら話さないとタイピストの手が余ってしまうので方針を相談せざるを得ない。逆にタイピストの場合は理解してコードを書かないといけないので不明点は聞かざるを得ない。
- お互い合意済みのコードができるので、コードを書き終えた段階でレビューは済んでいると判断できる。別の作業から PR を見るというようなスイッチコストがない。
オンラインでのペアプロセットアップ
- 画面シェアをするために tandem のトークを有効にする(tandem については 2日目の記事を是非ご覧になってみてください。)
- お互い使っているスニペットの同期
- 僕はスニペット登録してコーディングの手間を省いているので同僚にも入れてもらった。ie と打つと下記がすぐでるようにしていたりでペアプロ中も次 ie 打ってくださいと言っている。(気になった方はこちらの記事にて)
if err != nil { return err }
- Test Explorer UI のインストール
これを入れておくと、liveshare 機能を使ったときに、ゲスト側がホスト側で実行した go test の結果を見れるようになる。ホストのターミナルの権限をゲストに与えて、ゲストがテストを実行してもホストに見えないのは課題点。そのため、基本的にテスト実行したいときはホスト側で実行するか、ゲスト側で画面をシェアしてもらってそれを見るというテストの運用になる。 また、テストを追加しても Explorer 側のリストに出てくるまでにラグがあるというか、検知してくれるまで遅い(Refresh ボタン押しても)ので、開発体験はオフラインで行うときほどよくはない。
- liveshare の設定。お互いに書き込みをできるように、下記の設定を有効にした。
オフラインでもやってみた
オンラインでやった後の振り返りで、テスト実行の課題があったことから「オフラインでもやってみましょうか」という話になり、実施してみた。結論、当たり前だがオンラインで起こったような課題はないし、ホワイトボードでさっと絵に書いて説明できるしでいいことのほうが多かった。オンラインのときは、lucidchart のような描画ツールにコンポーネント置いて図示していた。オンラインの環境がもう少し悪かったら、途中から出社に切り替えていたかもしれない。
まとめ
ペアプロはオンラインでもそこまで不便なくできる。ただし、オフラインの対面作業やすぐ側にホワイトボードがある環境には勝てないと思っている。ペアプロ自体は、積み上がってきたプロダクションコードのあれこれを実際に手を動かして共有していけるので、最初のオンボーディングに有用。作業途中でついでに他のナレッジも共有できたりするのが個々に動いているときにはできないことだった。
今後は、もう少しチーム人数が増えてきたタイミングで、モブプロに移行して期待するプロダクトの進化速度に合うような成果が出していけるのか実験してみたい。今は、バックエンド・フロントエンド専任制だけれどそれぞれのエンジニアがモブプロに参加して、一気通貫でプロダクトコード見れるようになってもいいのではないかと思ったりしている。