Code With Meの紹介 & VSCode Live Shareと比較してみた


# はじめに

IntelliJ IDEA 2020.3が12月にリリースされました。

2020.2からβ版がプラグインインストールできるようになり、2020.3から標準同梱されたペア・モブプロ用ツール、[Code With Me](https://pleiades.io/help/idea/code-with-me.html)の利用方法を紹介します。

特徴がわかるように同じくペアプロ用ツールの[Visual Studio Code Live Share](https://visualstudio.microsoft.com/ja/services/live-share/)との比較も行いました。

# Code With Meとは

[公式FAQ](https://pleiades.io/help/idea/faq-about-code-with-me.html#cwm_requirements)より
> JetBrains IDE のプラグインであり、同僚とリアルタイムでコードを共同で確認、編集、デバッグできるツールです。

つまり、リモートで相手と画面共有及び操作ができるツールという事ですね。

続いて利用方法を紹介していきます。

# 利用方法

ホスト：共有する人
ゲスト：共有画面に接続する人

## ホストの操作（招待リンク作成まで）

1. IntelliJを開き、右上の人マークをクリックする。（ver2020.2ではプラグインダウンロードの必要あり）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/f17ff3b6-e44f-5446-f2f0-838cc1c617c2.png" width=700>
2. "Enable Access and Copy Invitation Link"をクリック。<br>
  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/a51c69ec-3ccd-460c-74e6-07c82ab365f5.png" width=200>
3. 必要な権限を設定する画面が出てくる。それぞれ設定後"Enable Access"をクリック。（β版はこの画面遷移なし）

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/d8db7e3d-115c-10b2-2518-a0afdd9d3703.png" width=300>
VSCode Live Shareの場合は、[settings.json](https://docs.microsoft.com/ja-jp/visualstudio/liveshare/use/vscode)によってアクセス権限設定を行う事ができます。

4.Enable Accessをクリックすると自動的にリンクがクリップボードにコピーされるのでURLにゲストに共有する。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/30571cd7-e618-caaf-eca7-4eaadef8534e.png" width=300>
VS Code Live Shareも"Share"をクリックすると自動で共有リンクがコピーされるので、似てるものがあります。


## ゲストの操作(アクセス依頼まで)

共有URLをもらってアクセスします。

IntelliJを開いてる場合とない場合で挙動が異なります。
やってることはどちらも一緒でClientをDownloadする。

IntelliJ(2020.2以降)を開いてる場合

- こんな画面がブラウザに出てきます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/cbbd67f9-effb-99c8-f031-37828793a6f8.png" width=300>

- (初回のみ)ClientのDownloadが始まるので待ちます。
 <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/0d1f92eb-556a-b131-e899-36db4cc108a6.png" width=500>

IntelliJ(2020.2以降)を開いていない、または持っていない場合

- 以下の画面がブラウザに出ます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/1fa9eef0-689b-4aff-2314-b79048a60340.png" width=300>

- (初回のみ)画面記載のコマンドをターミナルから実行してClientをDownload
![スクリーンショット 2020-12-18 14.29.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/3cda8cb3-faeb-f12d-6d70-5af57fa4a995.png)


どちらの場合もDownlaodが終わったらClientツールが起動します。ホストの承認確認のステータスになるので承認を待ちます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/de8e348f-6626-7fa4-35be-56c0d0623c31.png" width=500>

VSCode Live Shareの場合はゲストもホスト同様VSCode本体とVSCode Live Shareを利用して接続するので、Clientのダウンロードは不要です。

## ホストの操作(ゲストのアクセス依頼後）

- 以下の画面がIntelliJに出るので"Accept"をクリック。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/87d165a1-ccf3-4dce-f6d3-89f802691d51.png" width=400>

- 共有ができると右上にホストのイニシャルが出る。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/12bc35e1-bfa9-083b-385a-02610e938f69.png" width=100>

## ゲストの操作（ホストのアクセス承認後）

-  ホストの画面がClient上に出てきます。これでホスト側にアクセス可能になりました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/225a8251-7057-c56f-1f39-13d5595ae0df.png" width=500>

もし画面を閉じたり接続が切れた場合は以下のようなウェルカム画面が出るので、"Connect"をクリックすれば再接続できます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/b8c4f2fc-9444-571b-c477-d74c92053d24.png" width=400>

一度Acceptされていれば、ゲストが以下の"Disconnect And Close Project"をしない限り、ホスト側の再Acceptせずに再接続が可能です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/b7a081a7-e5d0-49ee-ba89-48ad0c06bd94.png" width=200>

VSCode Live Shareの場合は、クリップボードにコピーしたリンクが自動で貼られ、再接続は再度コピペして接続か、ホスト側がInviteする事で再接続できます。

以上が利用方法です。
VSCode Live Shareと比べると以下が特徴です。

- ログイン不要
- IDE本体のダウンロードは不要。Clientのダウンロードは必要
- 権限設定がGUI操作

Code With Meには以下のような機能もありますので紹介します。

## 共有時の名前変更

接続する名前の変更ができるので紹介します。
デフォルトではPCのユーザアカウント名が適用されています。

### ホスト側
Preference -> Other -> Code With Meから変更できます。
一度IDEを再起動しないと適用されないのでご注意を。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/eb5b9bc0-2b2f-1f3d-f92e-af1b02016ec8.png" width=400>

### ゲスト側

ホスト同様の設定方法で設定が変更できます。
また、以下のように接続時にも接続URLと一緒に設定できます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/c4850a6f-3826-a81f-3d49-dfaa795093a6.png" width=400>

VSCode Live Shareはログインしたアカウントに依存したDispayNameが設定されます。現時点ではLive Shareから直接変更する方法はなさそうです。
参考：https://docs.microsoft.com/ja-jp/visualstudio/liveshare/user-profile


## ファイル・ディレクトリ単位でのアクセス制御

ホスト側でファイル・ディレクトリ単位でのアクセス制御ができます。

以下のPermissonsを選択して
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/01e3e178-289f-8214-7fa1-ed8517f8fd83.png" width=200>

以下のようにManage hidden files...を選択するとExcluded Files画面が出てくるのでファイルまたはディレクトリを追加する事で設定できます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/98b7328f-5535-39c2-b6ac-e017fb1d6dda.png" width=500>

.ideaはデフォルトで除外対象に入っています。

VSCode Live Shareでは、デフォルトで.gitignore対象のファイルを除外しています。除外ファイルの設定はプロジェクト直下に.vsls.jsonにJSON形式で除外ファイルを追加していきます。


## 通信状況の確認

公式にも載ってないので見方が定かではないですが、ゲスト・ホスト共に共有中画面右下の通信速度らしき表示（以下画面の赤枠部分）をクリックすると細かい通信状況が確認できるようです。
Speed up/downは通信速度の上り下りのことかと思われます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48316/622de1e7-30b0-9948-e9ef-50cd4e849380.png" width=600>

macのアクティビティモニタではIDE単位でのプロセスになっているので、ツール単位で通信状況を教えたかったのかもしれません？

VSCode Live Shareでは特にそういった機能はないですが、VSCodeではなくVSCode Live Share本体のvsls-agentというプロセスが別途立ち上がるので本体との判別はできます。

# VSCode Live Shareとの比較結果

以下のような比較結果です。

| | Code With Me | VSCode Live Share |
|:-:|:-:|:-:|
|(ホスト)事前の本体ダウンロード|必要(IntelliJ他対応IDE)| 必要(VSCode) |
|(ゲスト)事前の本体ダウンロード|不要※接続過程でClientのダウンロードあり|必要(VSCode)|
|プラグインのインストール|不要(同梱なので)| 必要 |
|アカウント| 不要 | 必要（Github or microsoftアカウント） |
|接続アカウント名変更|可能| 不可(アカウントに依存) |
| 同期遅延 | 特になし | 特になし |
| 再接続方法 | Connectボタンクリック(前回URLは記録されてる) |  ホストがinviteするか、URLを再コピペjoin |
| 権限設定方法 | 設定画面でFile,Terminal,Run単位制御（.ideaはデフォルト閲覧不可) |  設定用のjsonで各種制御(.gitignore対象はデフォルト閲覧不可） |
|個別ファイル単位での権限設定 | 可能 | 可能 |

# まとめ

結論、Code With MeもVSCode Live Shareもどちらも利用方法に大きな差分はなかったです。

なのでどちらも便利なツールです。強いて言うならCode With Me対応IDEを使っているのに、ペアプロのためだけにVSCodeを使う必要はなさそうです。もちろん逆も然り。

対応IDEは使ってるけど、まだCode With Meを使ったことがない方は一度試してみてはいかがでしょうか？