経験浅エンジニアにとってのペアプロの重要性
この記事は MICIN Advent Calendar 2022 の19日目の記事です。
前回は影山さんのAngularにReactを載せてみたでした。
はじめに
はじめまして。MICIN に 2020 年に入社して、アプリケーション開発に携わってきました。
それまでは、調剤薬局の薬剤師をしており、まだまだエンジニアとしては駆け出しの状態です。
担当領域として React / TypeScript を中心としたフロントエンドの開発をすることもありますが、主に Ruby / Rails といったバックエンド側の開発を担当することが多いです。
そして記事をお読みになっている皆様同様、業務に限らず日々、技術書やネットのドキュメント、ソースコードにてインプットを行っております。
そんな勉強中の私ですが、その中でも最近になって改めて重要だと思うことで、ペアプロ・ディスカッションについてとその方法をお伝えできればと思います。
自論
なぜ、経験が浅いエンジニアにとってペアプロ・ディスカッションが大事かというと個人的には最良の選択ができないことが最も大きいと考えております。
ご存知のように、アプリケーションの開発はアンチパターンはあれども明確な不正解が存在しないことが多いです。極端な話、アンチパターンで実装しても、短期的にはアプリケーションとしては機能することもあります。
問題はこれがアンチパターンか、ベストプラクティスではないことが判明するタイミングが大きな要素と考えられます。
コードがアンチパターンであることが発覚するタイミング
-
レビュー中
-
テスト中
-
リリース直後
-
関連した箇所の機能追加時
-
障害時
単純に後になればなるほど、是正する労力というものが大きく膨れ上がるかと思われます。
早く気づけば気づくほどよいですが、経験が浅いとその判断ができないということが私の結論です。
特に経験が浅いと学習したばっかりのことをやろうとしがちなので、後々負債になることに気づけずにそのまま負債が負債を呼ぶ悪循環に陥りやすいと考えています。
ペアプロとは
みなさん知っているワードだとは思いつつ、あえて言語化します。
ペアプロとは結論をいうと言葉通りエンジニアがペアとなって、一つ画面を共有しながらプログラミングをすることです。
以下のようなメリットがあると言われています。
ペアプロのメリット
-
知識の共有が可能
-
チームワークがよくなる
-
作業ミスが減少
-
新規の仕様詳細が共有できる
中でも、「知識の共有」は経験が浅い方にとっては最も大きなメリットだと思います。
判断に迷ったときも、ペアプロだとすぐに意見が聞ける状態なので、ストレスなく作業を進めることが私の中では1番のメリットです。
ペアプロの方法
基本的には役割を分けて作業を進めます。
【ドライバー】
基本的にはコーディング作業を行う人です。自分よりもスキルが高いナビゲーターの指示に従ってコーディングを進めていくことが多いとされています。
【ナビゲーター】
単純にドライバーの逆で、ドライバーに指示を出す人です。レベルの高い人が担うことが多いとされていますが、あえて逆のロールにすることも有効的だといわれています。
ペアプロに使うツール
対面の方が効果的かと思いきや、ビデオ通話と VSCode のエクステンションを使えばリモートでも良いペアプロ体験をすることができます。
Live Share
https://visualstudio.microsoft.com/ja/services/live-share/
VSCode を使ってコーディングしている方はペアプロツールとしておすすめです。
コードの差分を共有した形で、コーディングすることができます。感覚的にホワイトボードに近い形です。
個人的にはメリットは3つあると思っています。
-
お互いがどこを触っているのか追跡できる
-
修正提案 → 修正ではなく即時修正できる
-
見慣れている自分の画面越しにコードを確認することができる
ペアプロではない場合はそのままコメントを入れることもできるので、PR を出さずに見てもらうこともできます。
ビデオ通話
Live Share だけでなくペアプロをやる上では音声によるコミュニケーションが必要です。
MICIN としては主に Slack の huddle 機能と Google Meet といった選択肢がありますが、Live Share を使っていれば、ほぼ音声専用なので個人的にはどちらでもよいと思います。
最近知りましたが Live Share Audio
なるものもあるようなので、近々こちらも試してみようと思います!
https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare-audio
やってみた感想
最後に実際やってみた感想を伝えたいと思います!
メリット
私が主に感じたメリットは大きく3つありました。
一人で悩むことが減った
先の自論でもお伝えしたように一人で過剰に悩む時間は減りました。
ナビゲーターに頼りっぱなしではあまり意味がありませんが、仕様におけるエッジケースも一緒に考えながら実装するので、一人では考えが及ばない部分もカバーされることもありました。
今回の実装でどこまで柔軟性を持たせるのか、そもそもこのメソッドやライブラリをここで使って良いのか、など実装を判断する根拠とともに大きな学びとなりました。
新しい発見・気づきがある
知識の共有ができるため、いろんな発見をすることができました。
例えばコーディングだけなく便利なショートカットキーや知らなくて使っていなかったツールやライブラリなど実際使っているところを目の当たりにして「あ、そんなことできるんだ」と思って真似したり、明示的にご指摘をいただくことで新しい発見することができました。
こういったことはプルリクエストだけのやりとりではまず気づくことは難しいと思うので、ペアプロならではの発見なのかと思います。
レビュー効率が上がった
一緒にコーディングしている内容なので、当然ですがとてもレビューがしやすくなりました。
実装背景・仕様や前提条件など別途キャッチアップすることなく集中してレビューすることができたと思いました。
ちなみにペアプロをした内容はレビューを兼ねていると言われることもありますが、個人的にはペアプロの限られた時間だけではなく、冷静に一度立ち変えてコードレビューがあった方が良いと思います。
デメリット
一方デメリットしては、単純な効率の問題ですが短期的には開発時間の短縮にはならないと感じました。単純に、それぞれ別の作業をした方が効率的ではあると思います。
ただ、あくまで短期的な部分であり、総じて長期的にはペアプロを通じたスキル向上によりメリットが勝ると思っています。
私のチームでは現状、詰まりそうな時または詰まっている時にペアプロを申し出て行うことが多いですが、今後はなるべくチーム開発として頻度を増やすことを考えています。
まとめ
最後まで読んでいただきありがとうございます!
何度もお伝えしていますが、アプリケーション開発は判断に迷うことが多くあると思います。
特に経験が浅いと、実装方法は何通りか思い浮かんでもどれが最良なのか判断することに迷うことがあります。
ペアプロ、またはディスカッションをすることで、自他ともに納得できる実装を可能にするため重要だと改めて実感したため記事にさせていただきました。
ちなみにペアプロの延長として「モブプロ」と呼ばれるさらに規模を高めた方法も存在します。
私のチームも機会があれば、モブプロも行っていく方針なのでナレッジが集まったら、またこういった形式で発信できればと思います!
私自身はまだまだ開発の判断に迷うことが多いですが、こういった方法を生かして自信を持ったチーム開発ができるように邁進していきます!
MICINではメンバーを大募集しています。
「とりあえず話を聞いてみたい」でも大歓迎ですので、お気軽にご応募ください!
MICIN採用ページ:https://recruit.micin.jp/
Discussion