すべてのページ
このページの内容

oar コマンド

oar は、リレーを動かすマシンのコマンドラインです。設定ファイルを書き込み、リレーを起動・停止し、ブラウザーで開くアドレスを表示し、ログイン時に起動するサービスをインストールし、OAR を更新し、インストールを確認し、またインストールを削除します。このコマンドは、起動元のインストールに対して、それを実行したマシン上で動作します。別のマシンのリレーとは通信しません。

何も付けずに oar を実行するとメニューが、oar help を実行すると使い方のテキストが表示されます。OAR のインストール方法はインストールに、初めての起動は初回起動にあります。

コマンド一覧 #

コマンド 動作
oar ターミナルではメニューを、それ以外では状態と使い方のテキストを表示します
oar setup 認証トークン、アクセス(このマシンのみか LAN か)、ポートを設定ファイルに書き込みます。Windows では自動起動のモードも書き込みます
oar start リレーをバックグラウンドで起動します
oar stop 実行中のターンがなくなったらリレーを停止します
oar restart 実行中のリレーを再起動します。停止中のリレーは起動します
oar status リレーが動いているかを表示します。終了コードは 0 または 3 です
oar url トークン付きのリレーのアドレスを表示し、スマートフォンで使える場合は QR コードも表示します
oar update 最新のリリース、または指定したリリースをインストールし、リレーを再起動します
oar service ログイン時に起動するサービスのインストール、削除、状態の表示を行います
oar autostart 0.9.15 で追加 リレーが自動で起動する方法(サインイン時、起動時、オフ)を切り替えます
oar uninstall 0.9.15 で追加 自動起動のエントリとパッケージを削除します。--purge を付けない限り、データは残ります
oar copilot リレーと GitHub Copilot のターミナルセッションを起動します
oar doctor インストール、設定ファイル、見つかったプロバイダーの CLI を表示します
oar help 使い方のテキストを表示します
oar version バージョンを表示します

ほとんどのメッセージは [oar] で始まります。エラーは標準エラー出力に、通常の出力は標準出力に書き出されます。

コマンドラインの解釈 #

  • コマンドは、オプションではない最初の単語です。オプションはコマンドの前に置いてもかまいません。oar --port 3400 setup は oar setup --port 3400 と同じです。
  • --port、--migrate-from、--to、--autostart は値を取ります。値は次の単語として、または --port=3400 の形で指定します。値がないと、oar は --port needs a value. と表示して終了コード 2 で終了します。oar update --to と oar copilot --migrate-from では、スペースで区切る形を使ってください。それぞれのコマンドの注意書きを参照してください。
  • -- より前にある --help または -h は、その行にほかに何があっても使い方のテキストを表示し、終了コード 0 で終了します。
  • --setup、--start、--stop、--status は、ほかにコマンドが指定されていないときにコマンドを指定します。oar --setup --start は oar setup --start と同じです。
  • コマンドなしの --install-extension、--no-install-extension、--migrate-from、または -- の部分は、oar copilot を意味します。コマンドなしの --version または -v は、バージョンを表示します。
  • 各コマンドは、そのコマンド自身のオプションだけを受け付けます。それ以外の場合は、次のいずれかのメッセージ(標準エラー出力)の後に使い方のテキストを表示し、終了コード 2 で終了します。
[oar] Unknown command: backup
[oar] Unknown option: --verbose
[oar] Unknown option for oar start: --port
[oar] Unexpected argument: extra
[oar] --lan needs a command.
[oar] oar start takes no "--" part.

-- の部分を受け付けるのは oar copilot だけです。

ターミナルでは、oar はバージョン、リレーが動いているかどうか、URL(トークンなし)、ポート、アクセス、サービスの状態、警告があればその警告を表示し、続いて次の項目を表示します。

キー 項目 実行するコマンド
1 Start(起動) oar start
2 Stop(停止) oar stop
3 Restart(再起動) oar restart
4 Show URL and QR code(URL と QR コードを表示) oar url
5 Settings(設定) oar setup(質問あり)
6 Install or remove the service(サービスをインストールまたは削除) サービスがインストールされていなければ oar service install。インストールされていれば、Remove the service? [y/N] の後に oar service remove。サービスを使えない環境では oar service status
7 Update(更新) oar update。更新に成功するとメニューは閉じます。メニュー自身のファイルが置き換えられるためです
8 Doctor(診断) oar doctor
9 Copilot session(Copilot セッション) oar copilot
q Quit(終了)

矢印キー(または j と k)で移動して Enter を押すか、数字または q を押します。項目の実行後は、任意のキーでメニューに戻ります。質問中に Ctrl+C を押すとメニューに戻り、メニューで押すと終了コード 130 で oar が終了します。環境変数 NO_COLOR を設定すると、色が付かなくなります。1 文字ずつキーを読み取れないターミナルでは、同じ一覧が Choose (1-9, q): というプロンプトとともに表示されます。

標準入力または標準出力がターミナルでない場合、oar は oar status と同じ内容、空行、使い方のテキストを表示し、状態にかかわらず終了コード 0 で終了します。

oar setup #

oar setup [--port <port>] [--lan | --local] [--new-token] [--autostart signin|boot|off] [--defaults] [--start] [--migrate-from <dir>]

OAR の状態フォルダーに config.json を書き込みます(oar がファイルを置く場所を参照。キーは config.json にあります)。インストール後と、ポート、アクセス、トークンを変えたいときに実行します。既存の設定ファイルでは、このコマンドが扱わない設定はそのまま残ります。

ターミナルで実行し、--port、--lan、--local、--new-token、--autostart、--defaults のどれも指定しなかった場合は、3 つの質問をし、現在の値を角かっこ内に表示します。Enter を押すと、その値のままになります。0.9.15 で追加 Windows では、4 つ目の質問でリレーの起動方法を尋ねます。既定値は現在有効なモードです。起動タスクを読み取れないときは、この質問は省かれます。初回起動で、これらの質問を順に説明しています。

New auth token? It signs every device out. [y/N]
Access: 1 = this machine only, 2 = LAN (other devices on your network) [1]:
Port [3333]:
Autostart: 1 = at sign-in, 2 = at boot, before anyone signs in (one administrator prompt), 3 = off [3]:
オプション 値 既定値 効果
--port 数字、1〜65535 設定ファイルのポート。新しい設定ファイルでは、3333 から順に探して最初に見つかった空きポート(20 個試して見つからなければ 3333) 質問せずにポートを設定します。ほかのものが使っているポートは拒否されます
--lan なし 設定ファイルのアクセス ネットワーク上のほかのデバイスからのアクセスを許可します(localhostOnly: false)。--local とは併用できません
--local なし 設定ファイルのアクセス。新しい設定ファイルでは this machine only(このマシンのみ) このマシンからのアクセスだけを許可します
--new-token なし トークンを維持。新しい設定ファイルにはランダムなトークン 新しい認証トークンを書き込みます。すべてのデバイスがサインアウトされます
--autostart signin、boot、off 現在有効なモード 0.9.15 で追加 oar autostart と同じように、質問せずに自動起動を切り替えます。Windows ではサインイン時のエントリまたは起動タスク(管理者確認が 1 回)、Linux ではサービスです。グローバルインストールのみ:git チェックアウトでは拒否され、何も書き込まれません
--defaults なし オフ ターミナルでも何も質問せず、実行中のリレーを確認なしで再起動します
--start なし オフ グローバルインストールのみ(インストーラーが使います)。systemd のユーザーセッションがある場合はサービスのユニットも書き込み、その後リレーを起動します。サービスがあれば、サービス経由で起動します。git チェックアウトでは無視されます
--migrate-from フォルダー なし プロジェクトの名前が変わる前の git チェックアウトの状態(<folder>/server)を、OAR の状態フォルダーにコピーします。コピー元は変更されません。コピー元からまだリレーが動いていると、コピーできません。グローバルインストールのみ。フォルダーを指定するたびに実行されます。すでに移行済みでデータベースが残っているフォルダーでは、<state folder> is already migrated from <folder>; nothing to do. と表示するだけです。移行するものがないフォルダーはエラーになります(Nothing to migrate from <folder>: <reason>.)。データベースにすでに会話がある状態フォルダーでは拒否され、何も上書きされません。ファイルとフォルダーを参照してください

ポートが空いているとは、そのポートで何も応答せず、このマシンでバインドできることです。このインストール自身の実行中のリレーのポートは、空きとして扱われます。WSL では、Windows が使っているポートも拒否されます。新しい設定ファイルでポート 3333 が使われている場合、setup は Port 3333 is in use — using <port>. と表示します。グローバルインストールでは、オプションを指定しなくても、以前の管理対象の設定フォルダーから状態を 1 回だけ引き継ぎます。

実行する処理:

  1. 古い状態を移行します(グローバルインストール)。以前の管理対象の設定フォルダーは 1 回だけ自動で移行し、--migrate-from を指定した場合はそのフォルダーを移行します。[oar] Migrated <folder or "earlier relay state"> into <state folder> (<n> items, sources untouched; receipt in backups/MIGRATION.md).
  2. config.json を書き込み(Windows 以外ではパーミッション 600)、[oar] Wrote <path> と表示します。新しい設定ファイルには、authToken、port、localhostOnly、pollIntervalMs(3000)、processingTimeoutMs(600000)、conversationSessionMode(isolated)が入ります。
  3. 0.9.15 で追加 --autostart または質問の答えに従って、自動起動を切り替えます(グローバルインストール)。そのモードで oar autostart を実行し、その出力を表示します。
  4. リレーが動いていて、トークン、ポート、アクセスのいずれかが変わった場合は、リレーを再起動し、新しい設定で応答するまで待ちます。ターミナルでは The relay is running. Restart it now to apply the change? [Y/n] と尋ね、no と答えると The running relay keeps its earlier settings until it restarts: oar restart と表示します。ターミナルがない場合は、確認なしで再起動します。
  5. トークン付きのリレーの URL を表示し、スマートフォンがそのアドレスに到達できる場合(LAN アクセスで、WSL 内部ではないネットワークアドレスがある場合)は QR コードも表示します。自動起動の手順がうまくいかなかった場合は、その後に The config is written; the autostart step did not go through (see above). と表示し、終了コード 1 で終了します。
  6. リレーが動いていない場合は、起動方法を示します。oar start(サービスがなければ oar service install のヒント付き)、git チェックアウトでは npm start です。
終了コード 条件
0 設定ファイルを書き込み、求められた再起動または起動も成功した
1 ポートが使われている、リレーが再起動または起動しなかった、移行が拒否されたか失敗した(コピー元から、または状態フォルダー上でリレーが動いている、データベースにすでに会話がある、指定したフォルダーに移行するものがない)、自動起動の手順がうまくいかなかった、git チェックアウトで --autostart を指定した
2 --port が 1〜65535 の数値でない(--port expects a number from 1 to 65535.)、--autostart が signin、boot、off のいずれでもない(--autostart expects signin, boot or off.)、または --lan と --local の両方を指定した
130 質問中に Ctrl+C を押した

oar start #

oar start

リレーをバックグラウンドで起動し、リレーの URL を表示します(トークン付き、QR コードなし)。オプションはありません。設定ファイルが必要で、ない場合は No config yet — run: oar setup と表示します。git チェックアウトでは拒否されます(This is a git checkout — start the relay with: npm start)。どちらも終了コード 1 です。

  • すでに応答しているリレーには何もしません:The relay is already running. It keeps the version and settings it started with until you restart it: oar restart。
  • oar setup より前の設定でリレーが動いている場合、oar start はそのことを伝え、oar restart を案内します。
  • systemd のユーザーサービスがインストールされている場合(Linux)は、サービスを有効にして起動します。それ以外の場合は、ターミナルを閉じても動き続けるバックグラウンドプロセスとしてリレーを起動し、ログフォルダーに server.log と server-err.log を書き込みます。マシンの再起動後は、もう一度 oar start を実行するか、ログイン時の起動を設定してください。
  • リレーが応答するまで最大 20 秒待ちます。起動したプロセスが終了した場合は、早めに待つのをやめます。その場合は The relay did not come up — see <log folder>/server-err.log と表示します(サービス経由の場合は see journalctl --user -u oar)。0.9.14 で追加 稼働中のリレーがロックを保持している場合は、2 行目でロックを示し、対処方法を伝えます:The lock <path> is held by relay process <pid> (started <time>): oar stop, or end process <pid>.。ロックに記録されたプロセスがリレーかどうか判別できない場合は、The lock <path> names process <pid>, which cannot be told to be a relay: if no relay is running, end process <pid> or delete the lock. と表示します。
  • 0.9.14 で追加 これまで使っていたデータベースをまだ移行中のリレー(0.9.14 への更新後の最初の起動)は、失敗とは見なされません。oar start は The relay (process <pid>) is bringing over the database it ran on until now (…) and is still running; it answers once that is done. と表示し、そのログを示します。
  • まだ起動中のリレーのロックは、最大 5 秒待ちます。以前のバージョンのロックで、そのリレーが応答しないものは削除されます(Removing a leftover relay lock)。0.9.14 で追加 このバージョンが書いたロックはリレーに任せます。古くなったロックは、リレー自身が判断します(データフォルダーごとに 1 つのリレーを参照)。
  • ほかのプログラムがポートを使っている場合、または別のトークンのリレーの場合は、Port <port> is in use by another program, or by a relay with another token. と表示し、oar setup --port <port> で別のポートを選ぶようヒントを出します。
  • WSL では、Windows がポートを使っていると警告します(WSL)。

終了コード 0 は、リレーが動いているか、まだデータベースを移行中の場合です。終了コード 1 は、設定ファイルがない、git チェックアウトである、ポートが使われている、またはリレーが起動しなかった場合です。

oar stop #

oar stop

オプションはなく、設定ファイルが必要です(ない場合は終了コード 1)。

  • systemd のサービスが動いている場合は、すぐに systemctl --user stop oar を実行し、The relay service is stopped. It starts again at the next boot (without lingering: at the next login); to take it out: oar service remove と表示します。
  • それ以外のリレーには、リレー自身のインターフェースを通じて停止を依頼します。リレーは、実行中のターンがなくなると停止します。ターンが実行中の場合は、Waiting for the relay's running turns to finish … と表示されます。oar stop は最大 30 秒待ち、The relay is stopped. または The relay is still busy; it stops by itself when its running turns finish. と表示します。どちらも終了コード 0 です。
  • リレーが動いていない場合:The relay is not running.、終了コード 0。
  • ほかのものがポートを使っている場合:Port <port> is in use by another program, or by a relay with another token.、終了コード 1。ロックファイルにこのインストールの稼働中のプロセスが記録されていれば、2 行目でそのプロセス ID を示し、その Web UI の ⋯ → Restart web relay(⋯ → Web リレーを再起動)で再起動するか、そのプロセスを終了するよう伝えます。
  • The relay did not accept the stop request.、または systemctl の失敗:終了コード 1。

Windows の場合と、サービスがインストールされていても動いていない場合は、リレー自身のインターフェースを通じて停止します。停止が実行中のターンに与える影響は、リレーの再起動を参照してください。

oar restart #

oar restart

実行中のリレーを再起動して、新しいバージョンを読み込ませ、設定ファイルを読み直させてから、リレーの URL を表示します。停止中のリレーは、oar start と同じように起動します。オプションはなく、設定ファイルが必要です。

  • systemd のサービスが動いている場合は、systemd がすぐに再起動します。実行中のターンは終了します(リレーの再起動)。
  • それ以外のリレーには再起動を依頼し、リレーは実行中のターンを待ちます。コマンドは、リレーが設定ファイルのポートで設定ファイルのトークンを使って応答するまで最大 60 秒待ち、The relay restarted. と表示します。ターンがまだ実行中の場合は The relay is still busy; it restarts by itself when its running turns finish. と表示し、終了コード 0 で終了します。0.9.13 で追加 再起動は 🌄 Restart web relay と同じようにキューに入ります。ブラウザーにはそのバナーが表示され、Ask after a queued relay restart has waited(キューに入れたリレー再起動の待機後に確認する)の時間が過ぎると、今すぐ再起動するか、待ち続けるか、取り消すかをブラウザーで尋ねます(再起動の待機)。
  • 終了コード 1 と The relay came back on its earlier port and token: it was started with fixed ones (oar copilot). End that session, then run: oar start:oar copilot で起動したリレーは、渡されたポートとトークンを維持します。
  • 終了コード 1 と The relay did not accept the restart request. Restart it from the web UI (⋯ → Restart web relay).(Restart web relay)、systemctl --user restart oar failed、または The relay did not come back — see <log folder>/server-err.log(サービス経由の場合は see journalctl --user -u oar)。
  • ほかのものがポートを使っている場合:oar stop と同じメッセージ、終了コード 1。

oar status #

oar status

リレーの状態を表示し、スクリプトで判定できる終了コードで終了します。

[oar] OAR 0.9.19
[oar] The relay is running on port 3333 (this machine only): http://localhost:3333/
[oar] Service: installed, running
行 意味
Not set up yet — run: oar setup 設定ファイルがありません。この行の前には、バージョンの行だけが表示されます
The relay is running on port <port> (<access>): <url> リレーが設定ファイルのトークンで応答しています。Access の部分は LAN access(LAN アクセス)または this machine only です。URL にはトークンが含まれません。トークン付きの URL は oar url が表示します
The relay is stopped (port <port>, <access>). Start it with: oar start ポートで何も応答していません
Port <port> is in use by another program, or by a relay with another token. 何かが応答していますが、このトークンを持つこのリレーではありません
Service: <state> installed, running(インストール済み、実行中)、installed、not installed(未インストール)のいずれかです。報告することがない場合は省かれます:git チェックアウト、macOS、systemd のユーザーセッションがない Linux
Tunnel: <state> 設定ファイルで組み込みの Cloudflare トンネルがオンの場合だけ表示されます。実行中のリレーでは running、not connected、not connected (<reason>)、off: <reason> のいずれかです。それ以外では managed (cloudflared: <path>) または managed, cannot start: <reason> です
警告 ポートまたはトークンを変更した oar setup の後は The relay runs with its earlier settings; restart it to apply the new ones. です。WSL では、Windows がポートを使っているという警告です

終了コード 0 は、リレーが動いている場合です。終了コード 3 は、リレーが停止している、ほかのものがポートを使っている、または設定ファイルがない場合です。

oar url #

oar url

ブラウザーで開くアドレスを、oar setup の最後と同じように認証トークン付きで表示します。オプションはなく、設定ファイルが必要です(ない場合は終了コード 1)。それ以外は終了コード 0 です。

[oar] Relay URL: http://localhost:3333/?token=...
[oar] This machine only. For a phone, switch on LAN access (oar setup --lan) or use a tunnel (README: Remote access).
  • LAN アクセスの場合、アドレスはマシンの最初の内部でない IPv4 アドレスで、1 行目の後にその QR コードが続きます。
  • LAN アクセスなのにネットワークアドレスがない場合:LAN access is on, but this machine has no network address.。WSL の既定(NAT)のネットワークでは、アドレスは WSL 内部のものです。出力ではそのことを伝え、回避策としてトンネルまたはミラーモードのネットワークを示します。これらの場合、QR コードは表示されません。
  • 実行中のリレーがトンネルのアドレスを報告している場合は、トークンを付けた Tunnel URL: の行と、その QR コードが続きます。
  • 最後の行は The relay is not running. Start it with: oar start です。設定の変更後であれば、oar restart までリレーが以前の設定で動いていることを伝えます。

oar update #

oar update [--beta] [--to <version>]

npm から OAR の新しいリリースをインストールし、実行中のリレーに再起動を依頼します。Settings → General(設定 → 一般)にある Update(更新)ボタンのターミナル版です(OAR の更新)。git チェックアウトでは This install runs from a git checkout — update with git pull, then restart the relay. と表示し、終了コード 1 で終了します。

オプション 値 既定値 効果
--beta なし オフ 更新マニフェストから beta チャンネルのバージョンを取得します(チャンネル)。指定しない場合、beta 版は beta チャンネルに、それ以外は stable に従います。バージョンのないチャンネルは stable にフォールバックします
--to X.Y.Z、プレリリース付きも可(X.Y.Z-beta.N) チャンネルの最新版 マニフェストを使わず、このバージョンを npm から直接インストールします。古いバージョンも指定できます。実行中のバージョンとは比較しません

--to はスペースを空けて書く

--to 0.9.2 は動作します。--to=0.9.2 はコマンドラインのチェックを通りますが無視され、oar update はチャンネルの最新リリースをインストールします。

実行する処理:

  1. --to がない場合は、Web UI の自動確認がオンかどうかにかかわらず、毎回 https://oar.sh/latest.json を取得します(5 秒)。
  2. チャンネルのバージョンが実行中のものより新しくない場合:Already up to date (<version>).、終了コード 0。
  3. Updating @oar-sh/oar <old> -> <new> ... と表示し、OAR とそのネイティブ依存関係のインストールスクリプトの実行を許可するフラグを付けて、npm install -g @oar-sh/oar@<version> を実行します。Windows 以外では、oar を実行している Node.js と同じ場所にある npm を、パッケージがあるプレフィックスに対して実行します。Windows では npm.cmd を使います。npm は自身の出力を表示し、その後に Installed @oar-sh/oar@<version>. と表示されます。
  4. リレーが動いていれば、キューがアイドルになったら再起動するよう依頼します(Relay restart requested — it restarts once the queue is idle.)。リレーがなければ、No running relay detected — the update loads on the next start. と表示します。依頼が拒否されると、Could not request a relay restart; restart it manually to load the update. と表示します。

終了コード 0 は、インストールした場合か、すでに最新の場合です。終了コード 1 は、git チェックアウトである、--to が 0.9.2 のようなバージョンでない、マニフェストを取得できない(Could not fetch <url>.)か schemaVersion が 1 以外か使えるバージョンがない、または npm install が失敗した(the running install is unchanged)場合です。

変数 効果
OAR_NO_UPDATE_CHECK=1 マニフェストの取得を禁止します。その場合 oar update は終了コード 1 で終了し、oar update --to X.Y.Z を案内します。こちらは引き続き動作します
OAR_UPDATE_MANIFEST_URL 代わりにこの URL からマニフェストを読み込みます

oar service #

oar service [install | remove | status]

ログインのたびにリレーを起動します。oar service だけを実行すると、oar service status と同じです。git チェックアウトでは拒否されます(終了コード 1)。リレーを自動で起動するのページでは、オーナーの視点からサービスを説明しています。

Linux #

systemd のユーザーユニット oar.service を、~/.config/systemd/user/ に置きます。このユニットは、このインストールの設定、データ、ログのフォルダーと、シェルの PATH に ~/.local/bin と使用中の Node.js のフォルダーを加えたものでリレーを実行します。systemd は、クラッシュの 5 秒後にリレーを再起動します。

単語 動作
install 設定ファイルが必要です。ユニットを書き込み、ログアウト後もリレーが動き続けるように loginctl enable-linger を実行し(失敗した場合は、自分で実行するコマンドを表示します)、systemd を再読み込みし、サービスがポートを使えるように手動で起動したリレーを停止し、サービスを有効にして起動します。そのリレーが停止しない場合、サービスは有効になり、次回のマシン起動時(lingering がなければ次回のログイン時)、またはそのリレーが停止した後に oar start を実行したときに引き継ぎます
remove サービスを無効にして停止し、ユニットを削除し、systemd を再読み込みします。サービスがない場合は The service is not installed. と表示します
status Service: installed, running、installed, not running、not installed のいずれかです

systemd のユーザーセッションがない場合は、そのことを伝えて終了コード 1 で終了します。WSL では、systemd を有効にする方法もメッセージに含まれます:/etc/wsl.conf の [boot] の下に systemd=true を書き、Windows から wsl --terminate <distro> を実行します。

Windows #

スタートアップフォルダーのエントリが、サインイン時にリレーを起動します。

単語 動作
install 設定ファイルが必要です。サインイン時の起動をオンにします。リレーはすぐには起動しません(Start it now with: oar start)
remove サインイン時の起動をオフにします:Autostart is off. A running relay keeps running; stop it with: oar stop
status Autostart: on, at sign-in、on, at boot (scheduled task)、off のいずれかです

スケジュールされたタスクによる起動時の開始は、oar autostart boot または Web UI の Settings → General → Autostart (Windows)(設定 → 一般 → 自動起動、Windows)で設定します(Windows)。そのタスクが準備完了の状態にある間、install と remove は The relay starts at boot through a scheduled task. Change that with oar autostart signin|off, or in the web UI: Settings → General → Autostart (Windows). と表示して拒否します(終了コード 1)。status はそのタスクを報告します。

macOS #

The service is not supported on macOS yet. Start the relay with: oar start と表示し、どの単語でも終了コード 1 で終了します。

終了コード 0 は、完了した場合か status の場合です。終了コード 1 は、git チェックアウト、macOS、systemd のユーザーセッションがない、install で設定ファイルがない、Windows でスケジュールされた起動タスクがある、または install の後にリレーが起動しなかった場合です。終了コード 2 は、3 つ以外の単語、または 2 つ目の単語がある場合です。

oar autostart 0.9.15 で追加 #

oar autostart [signin | boot | off | status] [--replace]

このインストールのリレーが自動で起動する方法を切り替えます。oar autostart だけを実行すると、oar autostart status と同じです。git チェックアウトでは拒否されます(This is a git checkout — autostart is for global installs.、終了コード 1)。signin と boot には設定ファイルが必要で、off と status には不要です。自動起動では、オーナーの視点からモードを説明しています。

Windows #

単語 動作
signin スタートアップフォルダーにエントリを書き込み、起動タスクがあれば削除します(管理者確認が 1 回)。The relay starts when you sign in to Windows. と表示します。リレーはすぐには起動しません
boot スケジュールされたタスク oar-relay とそのランチャーを登録し(管理者確認が 1 回:Confirm the administrator prompt to register the boot task …)、サインイン時のエントリを削除します。The relay starts at boot, before anyone signs in (scheduled task \oar-relay). と表示します。すでに起動時モードの場合は何も変更せず、確認も求めません。生成されたランチャーがないか、以前のバージョンのものであれば、管理者確認を 1 回行ってタスクを登録し直します
off 起動タスク(管理者確認が 1 回)とサインイン時のエントリを削除します。Autostart is off. A running relay keeps running; stop it with: oar stop
status モードとすべてのエントリを、それぞれ (generated by OAR) または (hand-made) を付けて表示します。状態を参照してください

管理者確認は PC 自身のデスクトップに表示され、最大 2 分待ちます。管理者権限で実行されるのは、schtasks の呼び出しだけです。確認を拒否すると、何も変更されません(Nothing changed: the administrator prompt was declined.)。--replace を付けて切り替えた後は、各コピーが示されます:Kept a copy of <entry> as <copy>。確認の後に切り替えが失敗した場合は、削除したタスクを元に戻し、エラー行の最後に Copies kept: … が付きます。

削除や上書きの対象は、OAR が生成したエントリだけです。手動で作成または編集したエントリが新しいモードと並んで残る場合や、新しいモードに置き換えられる場合は、何も変更せず、そのエントリを示します。OAR が作成していないエントリを参照してください。

オプション 効果
--replace 手動で作成したエントリを、OAR のエントリに置き換えます。その前に、それぞれのコピーを <name>.bak として OAR フォルダーに保存します。ランチャーのコピーはランチャーの横に、タスクはエクスポートした XML(<task>.task.xml.bak)を、スタートアップのエントリはそのコピーを保存します。--replace がなければ、手動で作成したエントリが変更されることはありません

起動タスクを読み取れない場合は、--replace を付けていても、すべての切り替えが止まります(Nothing changed: the boot task could not be read (<reason>).)。たとえば Access is denied(アクセスが拒否されました)の場合です。

Linux と macOS #

Linux では、単語は oar service に対応します。signin と boot は oar service install を、off は oar service remove を、status は oar service status を実行します。lingering が有効なら、サービスはマシンの起動時に開始します。macOS では Autostart is not supported on macOS yet. Start the relay with: oar start と表示し、終了コード 1 で終了します。

終了コード 0 は、完了した場合か status の場合です。終了コード 1 は、git チェックアウト、macOS、signin または boot で設定ファイルがない、手動で作成したエントリが妨げになる、管理者確認が拒否されたか失敗した、起動タスクを読み取れない、またはサインイン時のエントリを変更できない場合です。Linux では oar service の場合と同じです。終了コード 2 は、ほかの単語、2 つ目の単語、またはほかのオプションがある場合です。

oar uninstall 0.9.15 で追加 #

oar uninstall [--purge]

データを残したまま、OAR をマシンから取り除きます。git チェックアウトでは拒否されます(This is a git checkout — there is no global package to uninstall.、終了コード 1)。--purge を付けると、まず質問をします(下記)。その後、次の順に処理します。

  1. oar stop と同じようにリレーを停止します。実行中のターンを待ちます。その後もリレーがまだ処理中なら、コマンドは終了し(The relay finishes its running turns first; it stops by itself after them.)、ほかには何も変更しません。データベースの移行中や起動中で、ロックを保持したまま応答しないリレーの場合も終了します:The relay (process <pid>) is bringing over its database and does not answer yet; once oar status says it runs, run oar uninstall again.、または A relay (process <pid>) holds <lock> without answering; stop it (oar stop, or end process <pid>).
  2. OAR がこのインストール用に生成した自動起動のエントリを削除します。Windows では起動タスク(管理者確認が 1 回)とそのランチャーとタスクの XML、およびサインイン時のエントリです。Linux では、oar service install が書いたものであれば systemd のユニットです。続いて、OAR がこのインストール用に書いた ~/.copilot/extensions/web-relay/ の Copilot 拡張機能ラッパーを削除します。手動で作成または変更したエントリやラッパー、あるいは別のインストールのものは残り、その名前が示されます(Left as it is: <path> (hand-made))。
  3. --purge を付けた場合は、データを削除します(下記)。
  4. oar を実行している Node.js と同じ場所にある npm を使って(Windows では npm.cmd)、パッケージがあるプレフィックスに対して npm uninstall -g @oar-sh/oar をバックグラウンドで開始します。npm は実行中のパッケージを削除できないため、oar が終了するまで(最大 2 分)待ってから、npm の結果を oar-uninstall.log に書き込みます。場所は OAR の logs フォルダー、--purge の場合は一時フォルダーです。

最後に、実行した内容を表示します。

[oar] Done: stopped the relay.
[oar] Done: removed C:\Users\dev\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\oar-web-relay.cmd.
[oar] Your data stays in C:\Users\dev\AppData\Roaming\oar (config, database, uploads, logs). A later install picks it up again; delete the folder yourself if you no longer need it.
[oar] npm removes @oar-sh/oar once this command has ended (log: C:\Users\dev\AppData\Roaming\oar\logs\oar-uninstall.log).

データフォルダーが状態フォルダーの外にある場合は、この行に両方が示されます。セッションワーカーはリレーが停止しても動き続け、npm は実行中のプログラムが使っているファイルを削除できません。パッケージからまだプログラムが動いている場合、コマンドはそれらのプロセス ID を示し、npm はそれらのファイルを、パッケージがあった場所の横にある隠しフォルダー .oar-* に残します。ログにはそのフォルダーが示されます。それらのプログラムが終了したら、遅くともマシンの再起動後に、そのフォルダーを削除してください。

ある手順が失敗すると、コマンドは理由(たとえば Uninstall stopped: <reason>. や The relay did not stop.)を示して止まり、続いて Done: … と Not done: the autostart entries; the package.(--purge の場合は the data も)、そして Run oar uninstall again once that is sorted out.(--purge の場合は oar uninstall --purge)を表示します。

オプション 効果
--purge 状態フォルダーも完全に削除します。対象は設定ファイル、すべての会話を含むデータベース、アップロード、ログです。まず --purge deletes <folder> for good: … と表示し、delete と入力するよう求めます(Type "delete" to confirm: )。それ以外を入力すると、Not confirmed. Nothing was changed. と表示して終了します。Ctrl+C を押すか、読み取る入力がない場合は、何も変更せずに終了コード 130 で終了します

--purge では、delete の後に、いくつかのフォルダーについて個別の質問([y/N])があります。git チェックアウトの中にある状態フォルダー、rescued-package-data(以前のバージョンがパッケージ内に保存していたデータ)、状態フォルダーの外にあるデータフォルダー(設定ファイルの dataDir、または COPILOT_WEB_RELAY_DATA_DIR)です。何を入力しても、状態フォルダーが次のいずれかであれば、--purge はその中の何も削除しません:ドライブまたはファイルシステムのルート、ホームフォルダーまたはその上位のフォルダー、システムフォルダーまたはその上位のフォルダー、Windows フォルダー内のフォルダー、git チェックアウト、OAR の設定ファイルもデータベースも含まないフォルダー。その場合は --purge deletes nothing in <folder> (<reason>). Nothing was changed. と表示します。このような追加のフォルダーは、削除の選択肢に出ません(Not deleted, and not offered: …)。

終了コード 0 は、パッケージの削除を開始した場合です。終了コード 1 は、git チェックアウト、--purge が拒否する状態フォルダー、delete が入力されなかった、リレーが停止しなかったかロックを保持したまま応答しない、自動起動のエントリを削除できなかった(確認が拒否された、起動タスクを読み取れない)、フォルダーを削除できなかった、npm を起動できなかった(remove it yourself: npm uninstall -g @oar-sh/oar)場合です。終了コード 2 はほかのオプションがある場合、終了コード 130 は質問中に Ctrl+C を押した場合です。

oar copilot #

oar copilot [--port <port>] [--install-extension] [--no-install-extension] [--migrate-from <dir>] [-- <gh copilot args>]

応答するリレーがなければリレーを起動し、ターミナルで GitHub Copilot CLI(gh copilot)を実行します。このコマンドが起動したリレーは、セッションの終了とともに停止します。どのような場合に使うかは、GitHub Copilot で説明しています。copilot という単語がなくても、同じオプションを指定すればこのコマンドが実行されます:oar -- <args>、oar --install-extension、oar --port 3400 --no-install-extension。

オプション 値 既定値 効果
--port 1〜65535 設定ファイルのポート、なければ 3333 設定ファイルを変更せずに、この実行に限りこのポートでリレーを探すか起動します。このコマンドが設定ファイルを作成する場合は、そこに保存されます。そのポートですでに動いているリレーがあれば、それを使います。ポート番号でない値は、メッセージなしで無視されます
--install-extension なし オフ ユーザー全体用の拡張機能ラッパーを ~/.copilot/extensions/web-relay/ に書き込むか更新して、終了します(COPILOT_CONFIG_HOME で ~/.copilot の場所を変えられます)。gh は不要です
--no-install-extension なし オフ この実行ではラッパーの処理を省きます。指定しなければ、実行のたびにラッパーを書き込むか更新します
--migrate-from フォルダー なし oar setup と同じです。スペースを空けて書いてください。--migrate-from=dir は無視されます
-- 行の残り なし gh copilot に、そのコマンド自身の -- の後ろに付けて渡されます

処理の順序は次のとおりです。gh があるかを確認し、ラッパーを更新し(失敗は報告されますが、止まるのは --install-extension のときだけです)、古い状態を移行し(グローバルインストール)、ポート上のリレーを探し、応答しなければ起動して最大 20 秒待ち(Relay did not become ready at <url>)、最後にターミナルを接続したまま、現在のフォルダーで gh copilot を実行します。すでに動いていたリレーは、そのまま動き続けます。設定ファイルがない場合は、このマシンのみのアクセスで作成されます。

-- より前の --help または -h は、copilot 用ではなく、全体の使い方のテキストを表示します。-- の後の --help または -h は oar copilot の使い方を表示し、終了コード 0 で終了します。-- の後の --install-extension と --no-install-extension も、oar が読み取ります。これらはどれも gh には渡りません。

Copilot セッションのリレーは、起動時に渡されたポートとトークンを持ちます。oar restart でそれを変えることはできません。oar restart を参照してください。

終了コード 条件
gh copilot の終了コード セッションが実行された(gh がシグナルで終了した場合は 1)
0 --install-extension がラッパーを書き込んだ
1 gh がインストールされていない(The Copilot session needs the GitHub CLI (gh)...)、--install-extension でラッパーを書き込めない、ポートが使われている、リレーの準備ができなかった、リレーがまだデータベースを移行中、状態の移行に失敗した(妨げられた移行は Nothing was migrated; starting on the state root as it is. と報告され、セッションはそのまま開始します)

oar doctor #

oar doctor

oar が見つけたものを表示します。オプションはなく、何も変更せず、終了コード 0 で終了します。

OAR 0.9.19
  node          : v22.13.0 (linux)
  mode          : global install
  state root    : /home/dev/.oar
  config        : /home/dev/.oar/config.json
  port          : 3333 (localhostOnly: yes)
  auth token    : set
  tunnel        : disabled
  database      : /home/dev/.oar/data/copilot.db (12.4 MB)
  provider CLIs :
    gh (Copilot)  : gh version 2.60.0 (2025-01-01)
    claude        : 2.1.0 (Claude Code)
    grok          : not found
    cursor        : bundled (@cursor/sdk)
行 意味
mode global install または git checkout
state root 状態フォルダー。git チェックアウトでは (repo-local server/)
config 設定ファイルのパス。ない場合は (missing — run: oar setup) が付き、port、auth token、tunnel は省かれます
port 設定ファイルのポート。localhostOnly: yes はこのマシンのみ、no はネットワークです
auth token set または MISSING
tunnel disabled、managed (cloudflared: <path>)、managed, cannot start: <reason> のいずれか
database パスと MB 単位のサイズ、または (not created yet)
provider CLIs gh (Copilot)、claude、grok では、<cli> --version の 1 行目(60 文字で切り詰め)です。出力がなければ installed、コマンドが失敗するか存在しなければ not found です(制限時間 5 秒)。cursor は常に bundled (@cursor/sdk) です。Cursor には CLI が不要です
warning WSL で、Windows がリレーのポートを使っている場合

oar help と oar version #

oar help          # also: oar --help, oar -h, oar <command> --help
oar version       # also: oar --version, oar -v

help は使い方のテキストを、version はインストールされているバージョン(例:0.9.19)を表示します。どちらも終了コード 0 で終了します。--version と -v は、コマンドがない場合にだけ動作します。

oar がファイルを置く場所 #

oar が扱うのは 1 つのインストール、つまり起動元のパッケージとその状態フォルダーです。

インストール 状態フォルダー 設定ファイル データ ログ
グローバル、macOS と Linux ~/.oar その中の config.json data/ logs/
グローバル、Windows %APPDATA%\oar その中の config.json data\ logs\
git チェックアウト チェックアウトの server/ server/config.json server/data/ ~/.config/copilot-remote/logs(Windows:%LOCALAPPDATA%\copilot-remote\logs)。npm start は server/logs に書き込みます

OAR_STATE_ROOT で、グローバルインストールの状態フォルダーを移動できます。.git を含むパッケージフォルダーは、git チェックアウトとして扱われます。データフォルダーには、データベース copilot.db、ロックファイル relay-server.lock、そして oar setup からそれを適用する再起動までの間は relay-previous.json が置かれます。ログは server.log と server-err.log です。oar が書き込むその他の場所は、~/.config/systemd/user/oar.service(Linux のサービス)、Windows のスタートアップフォルダーの oar-web-relay.cmd、%APPDATA%\oar 内の oar-web-relay-launcher.cmd、起動タスクの XML、oar-relay-elevate.ps1、oar-web-relay.log、oar-web-relay-launcher.log、そして ~/.copilot/extensions/web-relay/extension.mjs です。0.9.15 で追加 oar autostart --replace はコピーを状態フォルダーに <name>.bak として保存し、oar uninstall は oar-uninstall.log をログフォルダー(--purge の場合は一時フォルダー)に書き込みます。

環境変数 #

変数 使用するコマンド 効果
OAR_STATE_ROOT すべて グローバルインストールの状態フォルダー
OAR_NO_UPDATE_CHECK update 1 でマニフェストの取得を禁止します。--to は引き続き動作します
OAR_UPDATE_MANIFEST_URL update マニフェストの別の URL
COPILOT_WEB_RELAY_LOG_DIR すべて 別のログフォルダー
COPILOT_WEB_RELAY_CONFIG copilot のみ 存在する場合に使う設定ファイル。ほかのコマンドは、常にインストール自身の config.json を使います
COPILOT_WEB_RELAY_DATA_DIR copilot、start、restart、setup、uninstall、Windows の自動起動 これらがリレーを起動するときに、データフォルダーとしてリレーに渡されます(Linux のサービスによる起動を除く)。setup はそこに移行し、uninstall はそれを示して、--purge で削除の選択肢に含めます。oar 自身は、既定のデータフォルダーでロックファイルを探します
COPILOT_CLOUDFLARED_MODE、COPILOT_CLOUDFLARED_TOKEN、COPILOT_CLOUDFLARED_BINARY status、doctor リレーのトンネルを変えるのと同じように、status の Tunnel: 行と doctor の tunnel 行を変えます
COPILOT_CONFIG_HOME copilot ラッパー用の Copilot のホームフォルダー。既定は ~/.copilot
APPDATA、USERPROFILE、LOCALAPPDATA、XDG_CONFIG_HOME すべて Windows と従来のフォルダーの場所
NO_COLOR メニュー 色を付けなくします
PATH service install サービスは、この PATH に ~/.local/bin と Node.js のフォルダーを加えたものを受け取ります

oar がリレーを見つける方法 #

oar は、インストールの config.json からポートとトークンを読み取り、そのトークンで http://localhost:<port>/api/status に問い合わせます。

応答 oar の解釈
リレーの状態 リレーが動いている
それ以外の応答(誤ったトークン、別のプログラム)、または 2.5 秒以内に応答なし ほかのプログラム、または別のトークンのリレーがポートを使っている
接続が拒否される リレーが停止している

ロックファイルは、リレーが動いている証拠にはなりません。リレーより長く残ることがあるからです。oar start と oar copilot は、ロックを保持していてまだ応答しないリレーを待ち、以前のバージョンが書いたロックだけを削除します。oar update は、有効なロックを実行中のリレーと見なします。oar uninstall は、稼働中のプロセスがロックを保持している間は先に進みません。ポートまたはトークンを変更した oar setup から、それを適用する再起動までの間、リレーは古い値で応答し続けます。oar は relay-previous.json を通じてそのリレーを見つけ、以前の設定で動いていることを伝えます。

サービスがインストールされている場合、Linux では start、stop、restart は systemd を経由します(すぐに実行され、ターンを待ちません)。それ以外の場合、start はデタッチされたプロセスを起動し、stop と restart はリレー自身のインターフェースを使います。こちらは、実行中のターンがなくなるまで待ちます。Windows では、start に自動起動が関わることはありません。自動起動または起動タスクがオンのとき、status は Service: installed と表示します。

WSL #

WSL では、oar はディストリビューションを検出し(WSL_DISTRO_NAME または WSL_INTEROP、あるいはカーネルのリリース)、どのプログラムがポートを使っているかを Windows に問い合わせます。oar setup は、Windows が使っているポートを拒否します。oar setup、start、status、doctor は Windows holds port <port> (<program>): a browser on Windows reaches that program, not this relay. Pick another port: oar setup --port N と表示します。WSL の既定のネットワークで LAN アクセスがオンの場合、oar url はアドレスが WSL 内部のものであることを伝えます。

終了コード #

コード 意味 コマンド
0 完了。stop と restart では、リレーがまだ処理中で、自分で完了する場合も含みます すべて。status はリレーが動いている場合のみ
1 コマンドが求められたことを実行できなかった:設定ファイルがない、git チェックアウト、ポートが使われている、リレーが起動しなかったか依頼を受け付けなかった、npm install が失敗した、gh がない、管理者確認が拒否された、手動で作成した自動起動のエントリが妨げになる、--purge が確認されなかった。予期しないエラーも含みます setup、start、stop、restart、url、update、service、autostart、uninstall、copilot
2 使い方の誤り:不明なコマンドまたはオプション、値がない、不正な --port(copilot を除く)または --autostart、--lan と --local の併用 すべて
3 リレーが動いていない(停止している、ほかのものがポートを使っている、または未設定) status のみ
130 質問中またはメニューで Ctrl+C を押した setup、uninstall、メニュー
gh copilot の終了コード Copilot セッションが終了した copilot