約１年でペアプロ信者になった僕が、物語のすべてを語ってみる

少なくとも、僕は約１年前まで「ペアプロなんてクソくらえ！」と思っているペアプロアンチでした。

そんな中、参画した現場で言い渡される**「今から君たちには、ペアプログラミングをしてもらいます」**というセリフ。
いきなりの話で戸惑いつつも、僕の**「ペアプロを理解する」**という長い旅が始まる。

- 登場人物(開発経験年数)
    - 僕(10年)
    - A君(3年)
    - B君(3年)
    - Cさん(12年)

# ペアプロ１日目
ペアプロというのは、「ナビゲーター」役の人と、「ドライバー」役の人に分かれて行う事を教えられる。
ドライバーが基本手を動かし、ナビゲーターがドライバーへの指示(アドバイス等)を行うという具合。

僕は「Aくん」とペアを組むことになった。

もちろんプログラミング大好きな僕は「ドライバー」を熱望した。
だが無常にも「ナビゲーター」を言い渡される。

何故。

基本的に**ペア間に知識、経験の差がある場合、
より経験の多い方が「ナビゲーター」**をやることになるそうだ。

僕は経験10年、相手は3年なので僕がナビゲーターなのだろう。

いつになったらプログラミングをさせてもらえるんだ。。。
僕は心が折れた。

# ペアプロ２日目
よくわからないまま、「ナビゲーター」を行う。
A君が楽しそうにプログラミングしているのを、僕は後ろからただ見ているだけ。

暇だ。。。

今日行っている作業は簡単だから、特に教えることもなければ、聞かれることもない。
「やっぱりペアプロなんて無駄じゃないか。。。」そんなことを思いながら、ただ見守っていた。

**変数名のつけ方を１箇所アドバイスした。**

# ペアプロ３日目
今日はやたらと仲間Aから質問を受ける。
何故なら今日の作業は、A君が経験したことの無いAzureでの作業なのだ！

僕は水を得た魚のように、**Azureの知識をひけらかす**。
それを聞きながら、A君はゆっくりだが着実に作業をこなしていく。

そんな中、僕は頭の中で「これ僕がやった方が数倍早いし、やっぱりペアプロはダメだな」そんなことを考えていた。

# ペアプロ７日目
現場の偉い人と喧嘩する。

その人が言うには**「ソロとペアで作業にかかる工数は変わらない」**そうだ。
(例：2人日のタスク　ソロ→2日　ペア→**1日???**)

そんなわけあるかい！
むしろ、僕が１人でやった方が早いですけど！？
その間にA君が別のタスクをやってくれた方が工数稼げますけど！？

という具合で話は平行線。

ただでさえ嫌いだったペアプロがさらに嫌いになった。

# ペアプロ８日目
今日からはペアの入れ替えで、B君と組むことになった！

相変わらず僕はナビゲーター。

業務でプログラミングが出来ないので、業後に自宅でプログラミングを始めた。
楽しすぎて深夜2時までやってしまった。

明日仕事行きたくねぇ。。。

# ペアプロ９日目
今日もB君は楽しそうにプログラミングをしている。

特に難しそうな部分もないし、、、
ということで、僕は裏側で別作業を進める。

「これで工数が上がれば、みんなペアが無駄だってことに気づくだろう」
そんな計画を考えていた。

# ペアプロ１０日目
B君が先日作成したプログラムを確認すると、
エラー処理が甘い箇所、仕様通りになっていない箇所、不要処理の消し忘れ等々、、、問題箇所が大量に見つかった。

**これじゃあ昨日僕が裏側でやって稼いだ工数がパーじゃないか。。。**

失意の中、B君が書いたコードの大半を削除し、2人で修正作業を行った。

# ペアプロ２０日目
かれこれ１カ月くらい業務でプログラミングをしていない気がする。。。

A君とB君が作業に慣れるまでは、Cさんとのペアはお預けとなっていた。
なので、行く日も来る日もナビゲーター。

プログラミングのしかたを忘れてしまいそうである。

# ペアプロ３０日目
今日はA君とのペア。

**前回苦戦していたAzureでの作業**だったが、
たまに「これどうやるんでしたっけ？」といった質問は来るものの、
**大きな問題もなくスムーズに作業が進んだ**。

「やっぱ人から教わるのは重要なんやなぁ」としみじみ思った。


# ペアプロ４０日目
とうとうA君、B君のナビゲーターが解禁される。

ナビゲーターとは言いつつも、ドライバーの僕が説明しながら作業を行い、
それを見ていて理解できなかった部分をナビゲーターのA君、B君が「それってどういう意味ですか？」とか聞いてくるだけ。

ナビゲーターとはいったい。


# ペアプロ５０日目
今日はA君とのペア、のはずだったが僕は風邪をひいて仕事を休んだ。

「昨日やりかけだったプログラムを完成させたかった。。。」
「今日休んだ分、明日取り戻さないとだなぁ。。。」

風邪薬の睡魔に襲われ薄れゆく意識の中、僕はそんなことを考えていた。

# ペアプロ５１日目
昨日の風邪はどこへやら。
僕は全快していた。

出勤して、恐る恐る昨日の進捗をA君に確認する。

A君「予定通り進みましたよ」
僕「え？まじで？」

**結構難しい部分、それも他人が組んだコードを理解して進捗通り？**
僕は耳を疑たったが、本当に順調に進んでいた。

「ペアプロをしていたおかげか・・・」
僕はほんの少しだけ、ペアプロをありがたみを知った。


# ペアプロ６０日目
この頃には、**ペアプロについて特に不快感は感じなくなっていた**。

A君やB君もある程度知識が付き、
ナビゲーターをしていても、**「修正する」というよりも「改善する」的なコメントが増えていった**。

逆に僕がドライバーの時に、
**「こうした方が良くないっすか？」とツッコミを入れられる事さえある**。

**ちょっとイラッとした**。
自分のコードを指摘されることに不快感を感じることを知り、自分も気を付けよう。と心に留めた。


# ペアプロ８０日目
Cさんとのペアが解禁される。

経験年数が近い事もあり、技術力にあまり差はなかった。
僕がドライバー、Cさんがナビゲーターをすることになった。

僕「ここの処理はこうでいいっすかね」
Cさん「うーん、こっちの方が良いんじゃない？」
僕「でもそれだとここが・・・」

**議論を繰り返しながら組まれたコードは、とても美しく洗練されたものになっていた**。

「お互いの全力をぶつけ合って出来上がった最高のプログラムだ。。。」
より良い選択肢を模索しながら1つのものを作り上げていく快感に、僕は魅了された。


# ペアプロ８１日目
僕はCさんとのペアを楽しみながら、頭の片隅にどうしても拭えない不安を抱えていた。

そう、A君とB君のペアだ。
彼らはちゃんと作業を進められているのだろうか。。。

朝の進捗共有で、A君とB君の進捗報告を聞くと、順調との報告。

どうやら**ペアを交代しながらいろいろなプログラムを触っていたおかげで、
プロジェクト内のコードはあらかた理解できているそうだ。**

「あれ？ペアプロ優秀？」
僕はペアプロを好きになりかけていた。


# ペアプロ１５０日目
誰も経験したことのない技術を扱うことになった。

工期もそんなにないということで、僕とCさんのペアで作業を行うことにした。

ところどころ詰まりながらも、2人で何とか1歩ずつ進んでいく。

僕「こんな情報ありました！」
Cさん「こんなんもあったけどどう？」
僕「両方ダメでした！」
Cさん「あーここをこうしたらいけない？」
僕「いけました！」

何とか工期中に完成させることが出来た。
僕1人では無理だっただろう。。。

ペアプロって良いものなんだろうなぁ～とは思いつつ、まだ確信は持てないでいた。


# ペアプロ２５０日目
ペアプロをやめよう、という話になった。
全てのペアプロをやめるという話ではない。

どちらかといえば、**「すべての作業をペアプロで行う必要があるのか」**という観点から、
ペアで行う必要のない作業はソロでも良いのでは？という結論に至ったのである。

これにはA君B君Cさん全員賛成で、**ソロ作業を許すルール**を決めることになった。

- １タスクの開始から終了までの全ての作業をソロで行える事(アドバイスを求めるなど、相談はＯＫ)
- 方針等が全て決まっており、作業者間で完成物のズレが発生しないもの
- 相手に100%任せて良いと言い切れるもの

この3点を満たすタスクのみ、ソロでの作業を許容することとした。
適用は明日から。

# ペアプロ２６０日目
ソロでの作業が許容されて早10日。
僕らのチームでソロ作業を行った人はいなかった。

何故か。

それはきっと、**全員がペアプロの重要性を理解していたからだと思う**。

僕は、**ペアプロって良いものだよ！**そう自信をもって言える事を確信し、Qiitaに記事を投稿することを決めた。

# ペアプロのメリット、デメリット
#### ・メリット
- **チーム内の技術力が高まる**
 - 経験の浅い開発者の人は、先輩プログラマーに教わることで**技術力が高まり**、先輩プログラマは**人に教える事の難しさを知る**ことができます。<br>
   <br>また**仲間同士での知識の共有**など、チーム全体の知識、技術力が底上げされます。

- **コードの属人化が解消される**
 - 今までのプロジェクトで、「〇〇さんがいないとここ分からない」なんてことありませんでした？<br>
   <br>ペアプロでは、ペアで作業をしてることで、少なくとも１つのコードを２人が理解しています。
   <br>なので、**１人休んだから作業が進まない！**なんてことが起こらなくなります。

- **コードの品質向上**
 - ナビゲーターは、ドライバーが書いているコードを常に見て(レビューして)います。
   <br>気になった箇所は**その場で指摘**できるため、**手戻りも少なく済み**、**「もう納期前だから処理微妙だけどリリース」**なんて事が無くなります！<br>
   <br>また、どうしても1人では見落としてしまうような**小さなバグ**でも、複数人で見ていると意外とトラップできることが多いです。

#### ・デメリット
- **初期コストが掛かる**
 - ペアプロ７日目にも書きましたが、**「ソロとペアで作業にかかる工数は同じ」**は嘘です。
   <br>正しくは、**「チーム全体のレベルが上がってこれば、作業にかかる工数は同じ」**が正解だと思っています。<br>
   <br>最初はどうしても経験の浅いプログラマに、経験の豊富なプログラマが**育成コスト**をかけることになるため**時間を取られます**。<br>
<br>ただ、ある程度育成が進んでしまえば「コードの品質向上」でも説明した通り、**バグが減ったり、コードレビューが不要**になることでコストは抑えられます。

- **ペア間の技術レベルの差が激しい場合、楽しくない**
 - これは書いた通りです。
<br>最初のうちは「こんな事まで説明せにゃならんのか」と何度思ったか知れません。<br>
<br>でもそれがゆくゆくのプロジェクトの為、ひいては自分のためになります。
<br>**頑張って我慢しましょう！**

# まとめ
100%ペアプロが優れているとは言いません。

過去の僕のように、ペアプロを毛嫌いしている方に、
ペアプロって意外といいんだぜ！ってことが伝わればなぁと思っています。

ただ、やはり良いところ、悪いところがあるので、
ちゃんとそこを理解した上で、良いペアプロライフを送っていただければ幸いです！