オンサイトで実践!ペアプロのホントのところ。
こんにちは!オンサイトのエンジニア、Hiroki Imahama です。
ß現在私が携わっている案件ではペアプロを導入しています。
実際に運用するなかで「ペアプロって二人で一緒にコーディングすれば良いんでしょ?」という状態から知見深まってきました。
今回はオンサイトで実践して分かった、ペアプロのホントのところを紹介します。
・そもそもペアプロって?
・実際にペアプロをやってみた感想
・結局ペアプロってやった方がいいの?
目次
そもそもペアプロってなに??
ペアプロとはペアプログラミングの略称で、一言で説明すると「2人集まって一緒にプログラミングをすること」です。
こう聞くと単純なのですが、最低限の知識を理解しておかないと「え?これただ工数倍になるだけでは・・・?」とみんな不幸になってしまうのでペアプロを社内で始める時にはこれから書く、2つのことは最低限の共有知としておくと良いです。
①ペアプロは2人でコーディングするだけではない
ペアプロをする際はウォータフォールでいう要件定義〜リリース作業までのタスクを一貫して行うことが大切です。(ペアプロのスコープはウォータフォールでいう実装部分のみを意識する方が多いです。)
すべてのタスクを一貫して一緒に行うことで「この人しかできない」というタスクや暗黙知をなくすことができます。
実際にすべての工程をペアプロでやってみて「設計の時こんなツールを使うと整理しやすいのか」「うちのシステムのデプロイってこうやるのか」など学ぶこと多かったです。
(デプロイって普通に業務してるとシニアエンジニアに丸投げになりがちですよね・・・)
一緒に画面を見ながら作業することで気づけることで気付けることはかなり多いので、「要件定義〜リリース作業を一貫してペアプロする」試してみてください。
②ペアの中で役割分担することが大切
ペアプロする際には2つの役割があり、それぞれの役割を一定時間で交互に交代しながら行うことが大切です。
ペアプロを始める際にはこの2点をしっかり意識しましょう。
■ ナビゲータ
・プログラムの大局的な構成を考える
・ドライバの疑問を解決する
・ドライバが書いたコードのレビューをする
■ドライバ
・プログラムの細かな部分を考える
・実際にコードを書く(実装に集中する)
ペアプロ=「2人集まって一緒にプログラミングをすること」
要件定義〜リリース作業までのタスクを一貫して行う
ナビゲータとドライバの役割分担を明確にする
それぞれの役割を一定時間で交代しながら行う
ペアプロを実際に行ってみて
次のような条件で約半年間ペアプロを取り入れて開発しました。
■ 開発領域
・フロントエンド(React × TypeScript)
■ 登場人物
・ジュニアエンジニア(筆者、フロント経験は独学のみ)
・シニアエンジニア(フロントの開発経験10年以上の強強エンジニア)
会話し続けるって難しい
ペアプロでは思考を共有しながら一緒に進むことが大切なので、会話し続けることが重要なのですがこれがなかなか難しいです。
なので最初は違和感感じるくらい発言するようにしたほうが良いです。
私は次のことを意識して発言を増やしています。
・何か検索するときは「何について検索しているのか」「どんなワードで検索しているのか」を相手に伝える
-「こんなワードで検索するといいのか」などと結構学びが多いです。
・役立ちそうな情報があったら全文読まないうちに相手に共有する
・ドライバーのときはこれからどんな処理を書こうとしているのか常に相手に伝える
とにかく相手と共有していくことが重要です。
特に長くエンジニアしている人ほど黙々と自分の作業しがちなので、「常に発言する」意識してみてください。
質の高いコードレビューができる
ペアプロをすることでコード品質がかなり上がったと感じています。
ペアプロ以前は、一般的なgit flowとプルリクエストを用いて開発を進めていましたが、これでは実装者がなぜそのような実装をしたのかのWhyの部分がレビューで見えませんでした。
結果コード仕様上問題あるコード以外の指摘がレビューから漏れて潜在的なバグになることもありました。
ペアプロを始めたことで「そういう意図ならこっちの実装の良いのでは?」という議論も増え潜在的バグの発生はかなり抑えられてきたと感じています。
また以前は、変更量が多い時レビュワーの負担が指数的にあがることがありましたが、ペアプロすることでこの問題も解消でき結果としてコード品質の向上につながっています。
ロールはきちんと交代しよう
大切なことなのでまた書きました。
ロールの交代はとても重要ですが意識しないとなかなかできないので絶対やってください!!
私達は1時間で交代するというように時間を決めて交代しています。
違和感を感じるくらい発言することで情報を共有する
ペアプロはコード品質の向上が期待できる
役割の交代は時間を決めて必ず行う
ペアプロってやった方がいいの?
私の個人の意見としてはやったほうが良い!と考えています。
よく「ペアプロすると工数が半分になるのが嫌」という声を聞きますが、実際にやってみた感想としては「一人で悩む時間が減る」「レビューの工数が削減できる」などの点から工数面でもデメリットは小さく、ペアプロによって享受できるメリットのほうが大きいと感じました。
今後の課題としては、エンジニアの技術力が成熟しているケースではどうか?なども検討していきたいです。
最後になりますが、私達のプロジェクトでペアプロするかどうかを下記のフローで決めています。これからペアプロ導入してみたいと考えている皆さんの参考になれば幸いです。
最後に
オンサイトではどうすれば最大限の成果を上げやすい環境を作れるかエンジニア自身も考えながら日々試行錯誤しています。
ご興味ある方はぜひお話しましょう!!
エンジニア
2020年5月からエンジニアとしてのキャリアスタート。
現在はフロントエンドエンジニアとしてReactやTypeScriptを使っての開発に携わっています。 前職は新卒入社したSIerで2年程度インフラエンジニアとしてPMしていました。
休日はゴルフと妻とのデートを楽しんでます。