🐺

コンパイルを通し続ける事を意識したペアプログラミング

に公開

はじめに

ペアプログラミングを行う際に「コンパイルを通し続ける」を意識するといいよという話です。

ペアプロの難しさ

阿吽の呼吸でペア作業を進めることは非常に難しいです。
特に、ペアの経験が浅い場合はなおさらかと思います。
TDDというプラクティスを採用していても尚、実装に着手するタイミングでは景色がずれやすいものです。

ペアの認識がずれてしまうと思うようにストーリーが進まず「しんどさ」にも繋がります。

静と動

コンパイルの話をする前にもう一つ重要だと思うポイントについて触れておきます。
コンパイルを通すことは大切なのですが、ペアで作業を進める上で「止まること」が非常に重要な前提となるからです。

ペアプログラミングでは何度も止まるタイミングがあります。
ここでの止まるタイミングとは「変数名についてどうする?」「どんなドメインにする?」「テストはどうする?」など一つ一つの作業を始める前全てを指します。
何度も止まり、ペアで設計や実装の方針を検討しながら進める事があるという事です。

「止まる事」ができずにペアの一人が実装を進めてしまうと相方を置いてけぼりにしてしまい
ペアの認識がずれ結果的にチームレベルでの認識がずれてしまうことに繋がります。
※コンテキストの積み上げも難しい状況になります。

コンパイルを通し続ける事

あくまで一つの手段としてコンパイルを通し続ける事はペアの認識を揃える上で非常に有効だと感じています。

コンパイルを通し続けることに意識を向けると自ずと次にやるべき事が絞られるためペア間で意識が自然と合いやすいです。

コンパイルエラーにならないようにするにはどうすべきか?という問を
作業を進める毎に考えるだけで大きな効果があります。
静と動 の「止まる事」のタイミングを自然と作り出すことができるからです。

シグネチャを一つ追加する場合においても
どうしたらコンパイルが通り続けた状態で進められるか?

逆にコンパイルエラーが起きているということは
あまり全体を把握しながらプログラミングができていないFBとも取れると思います。

シグネチャを例に出しましたが、その他のファイル名の変更や実装を進める上では基本的に同様で、どうしたらコンパイルエラーを最小限にできるかなどにフォーカスすることが重要だと思います。

補足としてテスト上では一時的にエラーになることは許容しています。
TDDで進める上では一時的に存在しない関数名やクラスをテストコード上で書くことは避けられないとしているためです。
その点においても、どう進めれば最小限のコンパイルエラーに留められるか、どう進めるかに話をフォーカスすることで、ペアの認識が揃いやすいです。

IDEを使い倒す

t-wadaさんなどもIDEのリファクタリング機能を使い倒すことを推奨しているように
ペアで使用するエディターはIDEがおすすめです。
リファクタリングの機能が非常に充実しているので手動ミスは基本的に避けることができます。

シグネチャの変更や追加は手動でやると大変なので
IDEのリファクタリング機能を使うことで大幅に作業コストが小さくなります。

テストコードで新しい関数を呼び出す場合なども
IDEの補完機能を使うことで自動で関数を生成することもできるためペア作業において非常に助けになります。

パラレルチェンジを駆使する

特にリファクタリングでインターフェースを変更する場合などは パラレルチェンジ も有効です。
コンパイルも通し続けることができるため、ペアの認識を揃える上で非常に有効です。

おわりに

当たり前と言えば当たり前の話なのかもしれないですが
ペアプログラミングでは、私自身も「止まる事」を忘れがちなので、自然発生させやすい「コンパイルを通し続ける事」は非常に助かっています。

メンバーにペア経験が浅い方がいる場合にも効果が高いと感じているので、ぜひ取り入れてみることをおすすめします。

この記事が参考になれば幸いです。

Discussion