リモートだからこそ出来るペアプログラミングを目指して
リモートでのペアプログラミングで使っているツール、工夫していること、感じること。
こんにちは、VMware Tanzu LabsでSoftware Engineerとして働くYukaです!
みなさんはリモートワークしていますか?
コロナ禍になってリモートワークが増えた会社も多いのではないでしょうか。VMwareもそんな会社の一つで、Tanzu Labsでは現在はほとんどのプロジェクトがリモートメインで行われています。
一方で、我々が実践しているLeanXPというプロダクト開発手法にはコミュニケーションを重視したプラクティスが多く存在しており、これまではチームメンバー全員が物理的に同じ場所にいることを大事にしていました。
それが常に実現できなくなった現在は、Zoomやmiroなどみなさんにもお馴染みの様々なオンラインツールを活用しながらリモートワークでのLeanXPを実現しています。
今回はその中でもペアプログラミング(以下ペアプロ)について、どのようにアジャイルな開発を実践しているか、使っているツールなどを紹介します!
※このブログでは過去にもペアプロについての記事が投稿されているので、興味があれば是非そちらも読んでみてください。
リモートでペアプロ、どうやってる?
結論から言うと、リモートでもツールを活用してオンサイトに近い環境を作っています。
オンサイトの場合は「1つのPCをミラーリングし、2人分のモニタ、キーボード、マウスを用意する」という形でペアプロをするため、リモートではなにかしらのデスクトップ/IDE共有ツールを使い、常に通話をしながら行います。
ペアプロ中はコードについて常にお互いフィードバックしあうことを大切にしているため、相手の感情や反応をキャッチしやすいようにカメラもなるべくONにしています。
どんなツールで共有しているかは後述しますが、ペアリング中はFigmaなどの資料の参照、ドキュメント作成、調べ物やチャットへの返信など、プログラミング以外の行動も可能であればペアで実施します。そのためIDEだけでなくデスクトップ全体の共有が必要になるシチュエーションも多いです。
Discordの活用
また、どのようなツールを使っていてもペアごとにDiscordのボイスチャンネルに入室し(ツール側に通話機能があっても)Discordで通話するようにしています。
私たちはチーム内でいつでも素早くコミュニケーション取れることを重要視しているため、Discordでは「今誰と誰が会話しているか」が可視化できるというメリットがあります(2人ともミュートになっていたら休憩中だなということを推測したりもできる)。
チーム全体でDiscordを利用することで、PMやデザイナーともお互い気軽に声をかけられる環境を作ることができています。
(使う共有ツールによっては動作が不安定なため、突然通話が切れないようにDiscordを使っている側面もあります)
リモートでもなるべく体を動かせる休憩を
オンサイトの場合でも、我々がやってるようなペアプロは充実した時間の使い方ができる一方でかなりの集中力や体力を使うのですが(そのため就業時間をしっかり守って日々コンディションを整えるようにしています)、それはリモートでも変わりません。
身振り手振りなど相手から伝わってくる情報量が減った分、より疲れると感じる人もいるでしょう。
そのため自分たちにあった休憩方法も毎回チームやペアで検討するようにしています。私たちはオフィスではよく卓球をしていましたが、今はYouTubeで体操やストレッチの動画を探してチーム全員で体を動かす休憩を取り入れているチームが多いです。
個人的には10–15分の休憩でちょっとした家事をやるのも気分転換になって良いですね。雑談したいのか、1人でゆっくりしたいのか、 ペア相手と話してそのときの気分で休憩方法を決めています。
ペアプロに使えるツール
さて、ここからが本題かもしれません。
リモートでのペアプロを実現するためのツールはいくつかあり、どれも得意なこと・不得意なことがあります。そのためLabsとして特定のものを使うというよりは、チームの状況・環境によって使い分けています。
Tuple
Mac/Linuxにインストールして使うデスクトップ共有アプリです(トライアル有、有料)。
相手のデスクトップをそのまま操作できるようになるため、リモート以前にやっていたペアプロに近い形を再現できます。動作も安定していますし、Tuple社がペアプログラミングに関する記事や動画を公開しているのもとても心強いです!
共有上限が3人までなので、4人以上でのモブプログラミングはできません。
Pop
こちらもTupleと同じようにデスクトップ全体を共有できるアプリケーションです。
こちらはWindowsにも対応していて、更にアプリをインストールせずにブラウザから参加することもできます。そのためワークショップなどにペアプロやモブプロを取り入れるときにも使いやすいです。こちらは3人以上での共有にも対応しています。
※現在Beta版のため、Pro版を無料で使うことができます。将来的に有料化するかもしれません。
IntelliJ Code with Me / VSCode Live Share + Discord画面共有
IntelliJのCode With Me、VSCodeのLive Shareはどちらもデスクトップ共有ツールではなくIDE付属のリアルタイムコラボレーション機能です(IntelliJ Code With Meは有料版のみになります)。
そのためデスクトップ共有に比べると動作が軽いのが長所です。共有可能なのはIDE上のみですが、どちらのIDEもターミナルを内蔵しているため開発に関するほとんどの作業はIDE内で完結可能です。
ペアリング中はブラウザを利用したい画面も多く、Figmaを参照したり調べ物をするときなどはDiscordの画面共有で補完しています。
VSCodeはあまり問題ないですが、IntelliJは少し日本語入力があやしいです(我々はBDDライクなテストを書くため、テストケースの名前などに日本語を使うことも多いです)。また、一部のIDE機能や拡張機能はホスト側でしか動作しなくなるため、ホスト側が常にサポートしてあげる必要があります。
また、こういったコラボレーション機能があるIDEしか使えないのも欠点です。例えばAndroidアプリ開発に使うAndroid StudioはIntelliJと同じくJetBrains製でCode With Me対応なのですが、実際にはうまく認証できなかったり頻繁にクラッシュするなどまだ少し不安定なようです。
これから試してみたいもの
最近はGitHub Codespaces(実質VSCode)、AWS Cloud9、JetBrains Gatewayなどお馴染みの企業からリモートで共同作業するためのさまざまなツールが登場しています。クラウド上に用意されたIDEにブラウザからアクセスするWebIDEなどです。
これらはまだ実際のプロジェクトでは試せていないのですが、ネットにさえ繋げられれば誰でも同じ環境で開発できるというのは魅力的ですね!
Labsではオンサイトで働く場合、まったく同じ設定をした開発PCを並べてペアリングステーションとして使っていました。こういった仮想環境を活用することでチームでの開発環境の統一・準備が楽になりそうです。
リモートペアプロで気をつけていること
オンサイトでもリモートでも自分たちが価値があると考える体験をなるべく再現できればと思っていますが、何もかも同じというわけにはいきません。逆にリモートならではの良さもあります。
個人的に大きく変わったと感じることは、ペアリング中でも別々で作業することができるようになったことです。
オンサイトでは1つのPCを2人でミラーリングして使うため、別々に作業することはできませんでした。この変化は良い点でもありますが、扱いが難しい点でもあります。
例えばIntelliJ Code With MeやVSCode Live Shareを使っている場合、2人で別々のソースコードのファイルを参照・編集することができます。長いコードからバグの原因を探したり、Lintによる指摘など軽微かつ大量の修正箇所などがある場合は作業を分担をした方が効率よく対応できるでしょう。
一方で、このタスクに対してペア相手がどのように対応するのかを観察し学ぶ機会が失われてしまいます。
一見誰がやっても同じになりそうなシンプルなタスクでも、自分が知らない知識やキーボードショートカットなどを目撃し、そこから学びを得るということはペアプログラミング中にはよく起きます。Googleを使って解決方法を調べる場合でも、どんな検索キーワードを使うのか、どういう点に着目してドキュメントを読み解くかなど学べることはとても多いです。
そのためリモートのペアリングでは、このパラレルで作業できる特性をよく理解し使い分けることが重要だと思います。
基本的には常に一緒に実施することでお互いから学びとフィードバックを得るようにし、慣れていてよく理解している作業であれば分担するなどケースバイケースで選択するようにしています。
そして、もっと大切な変化
リモートの働き方に対応したことで学びや変化がたくさんありましたが、最も良かったと感じることは「働き方の多様性が生まれたこと」です。
コロナ禍の前のLabsでは、単なるプロダクト開発手法だけではなく文化そのものを体験してもらうためにクライアントの皆さんに私たちのオフィスに来ていただき、そこで一緒に働くという形が主流でした。
今はリモートが普及したこと、私たちも自信を持ってリモートでLeanXPを実践できることで、オフィス(VMwareのオフィスは東京の田町にあります)から離れた場所のクライアントの皆さんともお仕事させていただく機会が増えたことはとても嬉しいです。
Labsメンバー、クライアントの皆さんの環境や状況も様々で、海外から参加したり、小さいお子さんがいる家庭から参加している方もいます。これらはオンサイトが前提の頃は(もちろん無理ではないけれど)今よりも越えなければいけないハードルが多かったのではないでしょうか。
最近ではチームごとに1週間ほど期間を決めた上で、集中的にオフィス集まって働くこともあります。そうなるとやはり「リモートよりもコミュニケーションしやすい!効率が良い!」という声がでますし、それは事実だと思います。
ですが、だからと言ってオンサイトの方が優れていると言い切れるものではありません。
効率的に働ける、コミュニケーションできることは大事です。でも「リモートワークに対応することで一緒に働ける人が増える」ということは、私はそれ以上に価値があることだと感じています。
私はオフィスでみんなと顔を合わせて働くことが大好きです。それと同時に今は「もっとリモートワークがうまくなりたい!リモートでももっと上手にアジャイルな開発を実践したい!」と強く思っています。それはTanzu Labsのミッションである、
Transforming How The World Builds Software(世界がソフトウェアを構築する方法を変える)
を実現し続けるために、世界を変える仲間を増やすために、必要なことだからです。
なのでチームで改善・成長をしようとするとつい「オンサイトを理想としてリモートでの体験をなるべくそこに近づけるには?」と考えてしまうのですが、「リモートだからこそ実現できることにも目を向け、チームとチームメンバーにあったアジャイル開発体験を作り出す」という気持ちを忘れないようにしています。
最後に
最適なペアプロのやり方はチームによって変化するものだと思います。是非みなさんのチームで取り入れてる工夫やツールがあったら気軽にコメントしてもらえると嬉しいです。
Tanzu Labsではこれからもリモートワーク時代ならではのアジャイル開発、LeanXPの実践を探求していきます!
今回はエンジニアのペアプログラミングを中心にお話ししましたが、他にもリモートになってから生まれた様々な学びや工夫があるので、今後も記事にしていければと思います。