Code Remote

設定

始めるために設定することは何もありません。このページは、中で何が起きているかを知りたいときのためのものです。

アクセスできる人

デフォルトでは、リクエストは 2 つのチェックを通る必要があります:

  1. あなたのアカウント。トンネルはプライベートです。Dev Tunnels のリレーは、coderemote up を実行した GitHub または Microsoft アカウントだけを通します。
  2. あなたのスマートフォン。 QR コードのトークンでスマートフォンを登録できます。その後は Secure Enclave で作られ外に出ない自分の鍵でサインインし、トークンだけではほかに何も開けません。coderemote devices でスマートフォンを一覧表示し、coderemote devices revoke で 1 台を外します。

スマートフォンとエージェントの間はすべて、QR コードに入っているコンピューターの鍵でエンドツーエンド暗号化されます。間のリレーが中継するのは暗号文だけです。ターミナルを開く、コーディングエージェントに入力する・起動する、ビルドを始めるときも Face ID を求めます。coderemote devices policy でその厳しさ(しない、コマンド、コマンドと変更)と、1 回の確認の長さ(5 分、30 分、1 時間)を設定できます。

coderemote up --allow-anonymous では 1 つ目の確認が省かれます。どちらの場合も、ファイルと git は共有フォルダーの中にとどまり、ターミナルはあなたのユーザー権限で動く本物のシェルです。

プレビューの公開リンクは唯一の例外です。終了するまで、リンクを持つ人は誰でも、どちらのチェックもなしでその開発サーバーを開けます。エージェント、そのファイル、ターミナルには届きません。

コンピューター上のファイル

すべて ~/.coderemote(Windows では %USERPROFILE%\.coderemote)にあり、あなただけが読み取れます:

パス内容
config.jsonアクセストークン、このコンピューターのトンネルとそのプレビュー用トンネルの id。これを残せば、すべてのペアリングが維持されます。
e2e/, lan/このコンピューターのエンドツーエンド暗号化の鍵と、ネットワーク上のスマートフォンが確認する証明書。rotate-token で置き換わります。
devices/共有フォルダーごとに登録されたスマートフォンと、その Face ID の設定。rotate-token で空になります。
bin/初回実行時にダウンロードされる Dev Tunnels CLI。
agents/実行中のエージェントごとに 1 エントリ。status、kill、stop がそれを見つけるために使います。
update.jsonnpm の最新バージョンと、up が最後に問い合わせた時刻(1 日に 1 回まで)。
runtime/インストールスクリプトが Node.js をダウンロードした場合のみ: その Node.js と、その中にインストールされた coderemote、そして PATH に追加された coderemote と node コマンドが入る runtime/bin。

このフォルダを削除する(インストールスクリプトが runtime/ を作った場合はそれを残す)と、Code Remote がリセットされます。次の up が新しいトークンとトンネルを作り、すべてのデバイスがペアリングし直す必要があります。

環境変数

変数動作
CODEREMOTE_DEVTUNNEL使用する devtunnel バイナリへのパス。指定しない場合は PATH 上のもの、次にダウンロードしたものを使います。
CODEREMOTE_CODEup --web 用の VS Code の code コマンドへのパス。指定しない場合は PATH 上の code を使います。
CODEREMOTE_NO_UPDATE_CHECK1 にすると、up は新しいバージョンがあるか npm に問い合わせなくなります。

インストールスクリプトは、独自の変数もいくつか読み取ります:

変数動作
CODEREMOTE_VERSIONインストールするバージョンまたは npm の dist-tag。0.3.7 や next など。デフォルトは latest。
CODEREMOTE_PRIVATE_NODE1 にすると、すでに新しい Node.js があっても coderemote 用に Node.js をダウンロードします。
CODEREMOTE_NO_MODIFY_PATH1 にすると PATH とシェルの起動ファイルを変更しません。どのフォルダを追加すればよいかはスクリプトが表示します。

トンネル

コンピューターごとにトンネルは 1 つです。その URL は実行のたびに変わらず、up は期限切れにならないよう毎回更新します。共有するフォルダは一度に 1 つです。複数のプロジェクトに届かせるには、親フォルダを共有してください。Git タブがその中のすべてのリポジトリを見つけます。

トンネルには coderemote というラベルが付き、アプリはこれで他のマシンを見つけます。プレビューは 2 つ目のトンネルを使い、ラベルは coderemote-preview、最初のプレビューで作られ、エージェントの停止時に削除されます(仕組み)。coderemote tunnels は、他のコンピューターのトンネルとあわせて両方を一覧表示します。

Dev Tunnels アカウントで保持できるトンネルは 10 個です。使わなくなったコンピューターのトンネルは、coderemote tunnels delete で削除するまで残ります。

アプリでは

  • Machine Info(マシンのメニュー)には、そのトンネルが表示されます: アドレス、アカウント、アクセスできる人、有効期限(coderemote up を起動するたびに延長されます)、現在接続中のクライアント、これまでのトラフィック、プレビュー中のポートの数。
  • Settings › Connections には、ペアリング済みのコンピューターが接続しているアカウントが一覧表示されます。各アカウントには、そのアカウントで coderemote を動かしているすべてのコンピューター(オンラインかどうか、この iPhone がペアリング済みかどうか)と、アカウントの 10 個のトンネルのうちいくつ使われているかが表示されます。コンピューターを追加するには、そこで coderemote up を実行して QR コードを読み取ります。

アプリは表示するだけです。トンネルはコンピューターの所有者のものなので、アカウントにサインインしたコンピューターで coderemote tunnels を使って一覧表示と削除を行います。そのために、Connections でマシンをタッチして長押しすると、そのトンネル ID をコピーできます。アプリの一覧からマシンを削除しても、その iPhone がマシンを忘れるだけです。

トラブルシューティング

"Port 31580 is already in use"

別のエージェントまたはプログラムがポートを使っています。coderemote status でエージェントを確認できます。それ以外は、何が使っているかを調べてください:

$ lsof -nP -iTCP:31580 -sTCP:LISTEN      # macOS, Linux
PS> netstat -ano | findstr :31580         # Windows

それを停止するか、coderemote stop --all を実行するか、--port で別のポートを指定してください。

iPhone が接続できない

coderemote up が動いていること、コンピューターが起動していてオンラインであることを確認してください。iPhone が、コンピューターと同じアカウントでサインインしていることも確認してください(Access: の行に表示されます)。

"Your Dev Tunnels account already has 10 tunnels"

アカウントがいっぱいで、削除できる使われていないプレビュー用トンネルがありませんでした。メッセージに一覧が表示されます。古いコンピューターのものなど、使われていないものを coderemote tunnels delete <id> で削除し、もう一度 coderemote up を実行してください。

サインインの有効期限が切れた

up が検知してブラウザを再び開きます。ブラウザがない場合は coderemote login --device-code を実行してください。

Ports タブに「Update coderemote」と表示される

コンピューターで動いている coderemote が、ポートとプレビューの機能より前のものです。coderemote update を実行し、coderemote up を再起動してください。

プレビューに「nothing is listening on port …」と表示される

その裏の開発サーバーが停止したか、別のポートで再起動しました。もう一度起動して再読み込みしてください。Ports タブに、いま待ち受けているものが表示されます。

Linux でインストールに失敗する

ターミナルのサポートはインストール時にコンパイルされ、python3、make、C++ コンパイラ(Debian と Ubuntu では build-essential)が必要です。サインインには libsecret-1-0 が必要です。

解決しませんか?サポートをご覧ください。