激突！！ペアプロバトル！！

# はじめに

Rails、React、Redux、cssなどのコーディングを全く知らない私が、入社半年で何となく理解し始めました。
また、その間に私の会社では任意でペアプログラミングを行うようになりましたが、理解の乏しい私はペアプロ中、ナビゲータの言われるがまま書いたり、ドライバに対しての指摘ができないことがほとんどでした。
これではダメだと思い、ペアプロの時間をより良いものにするために、__ペアプロバトル！！__ という概念を作成して、実施してみました。

# そもそもペアプロとは？

ペアプログラミングの略です。以下に簡単なルールを記載します。

## ルール

- コーディング
    - ドライバ
        - 手を動かしてコードを書く人
        - ナビゲータのサポートによりコードを完成させる人
    - ナビゲータ
        - ドライバのコーディングをサポートする人
        - コードレビューをリアルタイムで行う人
        - 30分でドライバとナビゲータが交代する
- 休憩
    - 交代時に5分休憩

# ペアプロバトル！！とは？

ペアプログラミングバトルの略です。私が勝手に考えた、ペアプロをより良くするための新しい概念です。
ペアプログラミングを以下のルールで行うものとなります。

## ペアプロバトル！！ルール

- HPは20とする
- メインフェイズ、バトルフェイズを数回繰り返し、レビューフェイズを実施して勝敗の判定を行う
- フェイズ
    - メインフェイズ
        - ペアプログラミングを行うフェイズ
        - ドライバとナビゲータは30分交代とする
        - ナビゲータはドライバに対してのフィードバック内容をまとめる
    - バトルフェイズ
        - 休憩と攻撃を行うフェイズ
        - 休憩時間は5分とする
        - ナビゲータがドライバに対して、コーディング中にまとめたフィードバック内容を伝える
        - フィードバック内容1つにつき、ドライバは無条件1ダメージ(フィードバックに対してのガード(反論)は認めない)
        - フィードバックが出来なかった場合は、ナビゲータに1ダメージ
    - レビューフェイズ
        - 完成したコードを第三者にレビューしてもらうフェイズ
        - レビュー指摘1つにつき、指摘されたコードを記載した際にナビゲータだった人に、1ダメージ
- 勝敗判定
    - 残HPが高い人の勝利！！

## 発案の経緯

ペアプロを実施して、以下の課題が見つかりました。

- ナビゲータとしての上手な立ち回りが出来ない
- ドライバが全て片付けてしまい、ナビゲータ中に言う事がなくて飽きてしまう

そのため、ナビゲータが飽きない様に、フィードバック攻撃や、完成後レビュー時は
ナビゲータにダメージが入るようにしました。

# Round１

__jaramon VS kouheiszk__
ジャンル：Rails(独自Modelの新規作成)

|Player|Rails力(MAX5)|React-Redux力(MAX5)|
|:----|:----:|:----:|
|jaramon|1|1|
|kouheiszk|5|5|

![buttle!.png](https://qiita-image-store.s3.amazonaws.com/0/207081/a78b6135-6709-8d27-1615-a7ac1d635786.png)

- メインフェイズ1
    - jaramon(ドライバ) kouheiszk(ナビゲータ)
    - Rails：独自モデル作成

- バトルフェイズ1
    - kouheiszkの攻撃！
        - そろそろコピペをせずに一からコードを書くようにすればもっとコーディング力が上がるよ！
    - __jaramonに1ダメージ！！__

- メインフェイズ2
    - kouheiszk(ドライバ) jaramon(ナビゲータ)
    - Rails：独自モデル修正

- バトルフェイズ2
    - jaramonの攻撃！
        - 指摘。。。ないよぉ。。。
    - __jaramonは転んだ。jaramonに1ダメージ！！__

- レビューフェイズ1
    - enomotodevの攻撃！
        - LGTMです！
    - __jaramonは攻撃を回避した！__
    - __kouheiszkは攻撃を回避した！__

- レビューフェイズ2
    - mdeの攻撃！
        - LGTM ですー
    - __jaramonは攻撃を回避した！__
    - __kouheiszkは攻撃を回避した！__

- 結果
  - __LOSE__: jaramon HP:18
  - __WIN!__: kouheiszk HP:20

![Result.png](https://qiita-image-store.s3.amazonaws.com/0/207081/248cf574-00af-8918-47cb-d84e7a7a8983.png)

# Round2

__jaramon VS enomotodev__
ジャンル：Rails(ActiveRecordで必要なデータを取得する)

|Player|Rails力(MAX5)|react-redux力(MAX5)|
|:----|:----:|:----:|
|jaramon|1|1|
|enomotodev|3|3|

![buttle!.png](https://qiita-image-store.s3.amazonaws.com/0/207081/e90decde-aa16-6cca-1acc-4e7d8fde95ad.png)


- メインフェイズ1
    - jaramon(ドライバ) enomotodev(ナビゲータ)
    - Rails：ActiveRecordのデータ取得箇所の修正

- バトルフェイズ1
    - enomotodevのジェットストリームアタック！
        - コーディング中にずっと喋ってたのよかったです！！
        - 人が途中まで進めたコードのキャッチアップに時間かかるなぁ。。。
        - バトルフェイズ中にどこまでやるか、最初にゴールを設定して欲しい！！どこに向かっているのかが分からないです！！
    - __jaramonに3ダメージ！！嬉しいのもあるけど3ダメージ！！__

- メインフェイズ2
    - enomotodev(ドライバ) jaramon(ナビゲータ)
    - Rails：ActiveRecordのデータ取得箇所の修正

- バトルフェイズ2
    - jaramonの攻撃！
        - この方式じゃダメだ。。。ってなった時の切り替えの速さが素晴らしいです！！
        - 「次は何やります！」のように、もう少し喋ってコードを書くようにして欲しかったです！！
    - __enomotodevに2ダメージ！！__

- レビューフェイズ1
    - kouheiszkの攻撃！
        - LGTMです😄
    - __jaramonは攻撃を回避した！__
    - __enomotodevは攻撃を回避した！__

- レビューフェイズ2
    - mdeの攻撃！
        - LGTM🎉です！！！
    - __jaramonは攻撃を回避した！__
    - __enomotodevは攻撃を回避した！__

- 結果
  - __LOSE__: jaramon HP:17
  - __WIN!__: enomotodev HP:18

![Result.png](https://qiita-image-store.s3.amazonaws.com/0/207081/332b6a0e-578a-5244-adc1-9859d311a5be.png)

# Round3

__jaramon VS mde__
ジャンル：Rails・React(URLを追加し、新規画面を作成する)

|Player|Rails力(MAX5)|React-Redux力(MAX5)|
|:----|:----:|:----:|
|jaramon|1|1|
|mde|2|5|

![buttle!.png](https://qiita-image-store.s3.amazonaws.com/0/207081/7b4bf2e4-0406-5752-7c2a-a9620db0d436.png)


- メインフェイズ1
    - mde(ドライバ) jaramon(ナビゲータ)
    - Rails：routesとcontrollerの追加

- バトルフェイズ1
    - jaramonの攻撃！
        - Reactの時の迷ったらとりあえず書くの精神をRailsでも発揮していいと思います！！
        - ナビゲータにちゃんと質問してくれて素晴らしいと思いました！！
    - __mdeに2ダメージ！！__

- メインフェイズ2
    - jaramon(ドライバ) mde(ナビゲータ)
    - Rails：controllerの処理を追加

- バトルフェイズ2
    - mdeの攻撃！
        - コピペで早く書けてるのですが、jaramonさんならもう直でコードを書けると思いますよ！！
        - 何をするのか喋らずにコードを書き始めた時があって一瞬ついて行けなくなりました！！
    - __jaramonに2ダメージ！！__

- メインフェイズ3
    - mde(ドライバ) jaramon(ナビゲータ)
    - Rails：ActiveRecordのデータ取得箇所の修正

- バトルフェイズ3
    - jaramonの攻撃！
        - うーん。。。さっきのも改善されているし特に指摘ないっすね。。。
    - __jaramonはわけもわからず自分を攻撃した。jaramonに1ダメージ！！__

- メインフェイズ4
    - jaramon(ドライバ) mde(ナビゲータ)
    - Rails：ActiveRecordのデータ取得箇所の修正

- バトルフェイズ4
    - mdeの攻撃！
        - ちょっと緊急で他の作業してました！ごめんなさい！
    - __mdeは急に飛んできたバグにぶつかった。mdeに1ダメージ！！__

- メインフェイズ5
    - mde(ドライバ) jaramon(ナビゲータ)
    - React:さっき作ったcontrollerの呼び出し・データ取得するコンポーネントを追加

- バトルフェイズ5
    - jaramonの攻撃！
        - うん。わかってたよ。指摘がないことくらいね。
    - __jaramonは落ち込んだ。jaramon（の精神）に1ダメージ！！__

- メインフェイズ6
    - jaramon(ドライバ) mde(ナビゲータ)
    - React：取得したデータのリストとそのリストを選択できるコンポーネントを追加

- バトルフェイズ6
    - mdeの攻撃！
        - Reactの方がコピペしてますね！！でもちゃんとコピペした内容を理解しているのでいいと思います！！
    - __jaramonに1ダメージ！！__



・
・
・


何回か繰り返していくうちに、毎回フィードバックは出せないねってなりました。。。



- レビューフェイズ1
    - kouheiszkの攻撃！
        - 変数名を`dropdownClassName`のようにわかりやすくしたいです！！
    - __jaramonは攻撃を回避した！__
    - __mdeに1ダメージ！__

- レビューフェイズ2
    - enomotodevの攻撃！
        - LGTM🎉です！！！
    - __jaramonは攻撃を回避した！__
    - __mdeは攻撃を回避した！__

- 結果
  - __LOSE__: jaramon HP:15
  - __WIN!__: mde HP:16

![Result.png](https://qiita-image-store.s3.amazonaws.com/0/207081/590629b1-9034-e893-7ad2-696c00b00980.png)

# 実際にやってみて
ペアプロはナビゲータが非常に重要だと私は考えているので、ペアプロの文化を醸成する上で実施できて良かったと思いました。
新しく入社される方とかと一緒にやっていきたいと思います！！
また、フィードバックと銘打っていたが、良かった点が連携されると思っていなかったので、とても嬉しく思いました。
ですが、フェーズ毎にフィードバックをすることがむずかしいので、全体フェーズでフィードバックする方が良さそうでした。
もしくは賞賛を増やすために、賞賛したら回復するとか。。。？

# おわりに
ペアプロは中・長期的に見るとチームとしての生産性が上がると思いますが、短期的に見ると生産性が下がることがほとんどです。
中・長期的に見て生産性を上げるため、その中・長期がなるべく短期間で訪れるように、様々な工夫が必要だと思っております。
皆様もチームの生産性が爆上がりするようなペアプロライフを送っていきましょう！！