Code With Me を用いたリモート開発

22日目

昨日の[TensorFlow.jsでお絵かき大喜利](https://qiita.com/doushiman_jp/items/e2a84136da5ca1270ccc)で紹介されている絵を私の目で識別しようと試みたところ、どうしてもニンジンだけは識別できませんでした〜！
どうも！開発歴4ヶ月のサーバーサイドエンジニア🔰です!

普段、[IntelliJ IDEA](https://www.jetbrains.com/ja-jp/idea/)を使用してリモートで開発をしています。

今回は、リモート開発で感じたとある悩みとその悩みを解決してくれるIntelliJのプラグインを紹介したいと思います！

## 「コードを画面で共有する」は、時間がかかる
開発歴が浅いこともあり、実装方法がわからない箇所がある場合、多分に先輩方に質問をしています。百聞は一見にしかずということもあり、リモートではありますが、ビデオ会議端末を通して、先輩方がモブプロ形式で実装方法を教えてくださいました。
画面越しで教えていただけるのは本当にありがたいことですが、一点悩みがありました。
それは、画面共有でコードを見せることです。
画面共有でコードを見せる場合、画面のあちこちに指示が飛ぶので、私は「あれ？どこだろう」と指示されたものを探す時間が多くかかってしまいます。結果、時間が多く費やされる傾向にありました。
これではナビゲーターの先輩方への負担が大きいなと感じつつも、よい解決策は思い付かず時間だけが過ぎていました。

（何かリモートでもモブプロしやすい方法はないだろうか・・・）

## 悩みを解消してくれるキミの存在！
なんと、IntelliJ IDEAのプラグインに、圧倒的リモートの味方がお出ましになっていたようです。これが「[Code With Me](https://plugins.jetbrains.com/plugin/14896-code-with-me)」（2020年9月リリース）です！
### Code With Me とは
簡単にいうと、コードを共同編集できるプラグインです。
ホスト（コードを共有する側）の、IntelliJ IDEA のバージョンが2020.2以降であれば、使用することが可能です。

Live Share（Visual Studio Code のプラグイン）と基本的に機能は同じなのですが、IntelliJで同じことができるというのが感動的でした！

プラグインを入れると、IntelliJの上部にこんな感じで表示されるようになります。


　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647579/3fb19450-18b9-36da-2c80-7b375be9ec34.png)

枠右端の三角印を押すことで、メニューが表示されます。

- `Enable Access and Copy Invitation Link`を選択すると、コードの共有を始めることができます！（リンクは自動的にクリップボードにコピーされている状態です）
- `Join Another IDE as Participant`を選択すると、以下のウィンドウが表示されます。共有参加先のURLをペーストして`OK`を選択すると、後述のCode With Me 専用アプリケーションが起動します。

　　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647579/b5320fa7-cc91-30dd-3c68-40ada0564102.png)




参加者の場合は、IntelliJ Clientというアプリを通じてコード共有に参加することができます！
上記の`Join Another IDE as Participant`を選択したのち招待リンクをペーストする、もしくは、Webブラウザから招待リンクに飛ぶと、IntelliJ Clientが起動します。
初めての場合は、IntelliJ Clientがインストールされていないので、招待リンク先のコマンドを実行してあらかじめ、ローカル環境にアプリをインストールする必要があります。

そんなこんなで簡単にCode With Meを起動できると思います。

### こんなことができる
#### 参加者もホストとほぼ同じ環境でIntelliJを使える
参加者の場合、ところどころ制限されている機能がありますが、ショートカットキーを使えるので便利です。
特に[Cmd + クリック]が使えるので、ファイルの行き来がしやすいです。

#### さまざまなFollowができる
ここでいうFollowとは、ある参加者のカーソルの動きを追従することを指します。
その参加者のカーソルを追いかけなくても、フォーカスしている参加者の動きについていけるので便利です。
Code With Meでは、3種類のFollowの仕方があります。

##### 1. 特定のユーザーをFollowする
これが、最もスタンダードなFollowの仕方です。参加者のアイコンを選択することで、その参加者のカーソルの動きを追従してくれます。


##### 2. 他の参加者全員に自分を強制Followさせる
メニューから`Force Others to Follow You`を選択すると、他の参加者を自分のカーソルの動きに追従させることができます。コードを見てもらいたい時とかに使用すると思います。

　　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647579/311fb7e2-435c-ab1c-cb33-9f53b1c04f12.png) 

##### 3. 特定の参加者1人と相互Followする
メニューを開いた状態で参加者表示の右にある三角印を選択すると、さらにメニューが展開されます。そこで、`Full sync mode`を選択すると、その参加者と相互Followした状態になります。一方がカーソルを動かすと、もう一方はその動きを追従する形になります。ペアプロをする際には、使ってみるといいかもしれないですね！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647579/578aff43-13aa-0c68-10e1-e3c187798a82.png)



#### ホスト時に有効な設定のカスタマイズ
IntelliJのメニューで`Preferences` > `Other Settings` > `Code With Me`と遷移するとホスト時に有効な設定を変更できます。具体的には、2つあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647579/635469f1-5ae4-584c-37fd-03a2e91ceeb8.png)
##### ホスト時のユーザー名を変更する
Code With Me でホストをする場合のユーザー名を決めることができます。デフォルトの場合、システムユーザー名が適用されています。
##### 接続に使用するサーバーを指定する
任意で使用するサーバーを指定することができます。デフォルトの場合、JetBrainsのサーバーを使用しているみたいです。セキュリティとかの問題でデフォルトのサーバーではCode With Meが使えない場合に対処する方法がなくはないようですね。

## まとめ
リモートでモブプロやペアプロをする際には、画面共有をするよりもCode With Meを使ったほうがサクサク進められていると感じています！Code With Meがあるおかげで最近は、開発チームでモププロやペアプロをする機会が増えてきた気がします。

みなさんもCode With Meでモブプロ/ペアプロをやってみてください！！！
最後まで読んでいただきありがとうございました！