上級テクニック 読了目安 11分

GitHub Copilot CLIが使えない?v2rayNの端末プロキシ設定術

v2rayNを起動しているのにGitHub Copilot CLIへログインできない、認証で止まる、リクエストがタイムアウトする場合の対処法を解説します。ターミナルのプロキシ環境変数、v2rayNのルーティング、DNS、TUNモード、Mux、Xrayログを順番に確認し、原因を切り分けます。

v2rayNではブラウザーが正常に通信できるのに、GitHub Copilot CLIだけがログインに失敗したり、候補生成の途中で停止したりすることがあります。この場合、ノードやサブスクリプションが直ちに壊れているとは限りません。ブラウザーはv2rayNのシステムプロキシ設定を自動的に参照していても、ターミナルから起動したCLIはプロキシ環境変数を持たず、通常の直接接続を試みている可能性があります。

Copilot CLIの通信は、認証、APIリクエスト、拡張機能や更新情報の取得など、複数の接続先に分かれることがあります。さらに、シェルの種類、環境変数の大文字と小文字、v2rayNのHTTPポートとSOCKSポート、ルーティング規則、DNSの処理場所が結果に影響します。ブラウザーで1つのWebページが開くことだけでは、CLIの実行経路が正しいとは判断できません。

この記事の要点

Copilot CLIだけが失敗するときに、v2rayNのHTTP_PROXY、HTTPS_PROXY、ALL_PROXY、NO_PROXYを正しく設定し、認証シェルの再起動、分岐ルール、DNS、TUNの順に確認する方法を説明します。ブラウザーは使えるがCLIは使えない環境を、端末側とv2rayN側に分けて切り分けたい人に適しています。

Copilot CLIがシステムプロキシを使わない理由

v2rayNの「システムプロキシを有効にする」操作は、OSや対応アプリが参照するHTTPプロキシ情報を変更します。しかし、すべてのコマンドラインツールがその設定を読み取るわけではありません。ターミナルで起動したプログラムは、通常、親プロセスから引き継いだ環境変数、アプリ自身の設定、または実装されたプロキシ検出機能だけを利用します。ブラウザーがプロキシ経由で動作していても、CLIが同じ設定を自動取得する保証はありません。

特に確認したいのは、Copilot CLIを起動した時点で環境変数が存在していたかどうかです。v2rayNを起動する前から開いていたPowerShell、コマンドプロンプト、Windows Terminalのタブには、後から変更した環境変数が反映されないことがあります。設定後は既存のシェルを閉じ、新しいターミナルを開いてください。IDE内蔵ターミナルを使っている場合も、IDE自体を再起動しないと古い環境を保持することがあります。

HTTPプロキシ

HTTP_PROXY
http://127.0.0.1:10809
HTTPS_PROXY
http://127.0.0.1:10809
用途
HTTP CONNECT対応のCLI

v2rayNのHTTPポートを指定し、HTTPSの値にも同じHTTPプロキシURLを設定します。

SOCKSプロキシ

ALL_PROXY
socks5://127.0.0.1:10808
DNS処理
socks5hを優先
用途
SOCKS5対応のクライアント

アプリがSOCKS5をサポートする場合に使用します。環境変数名だけで対応方式は変わりません。

HTTP_PROXYだけを設定しても、HTTPS接続には反映されない実装があります。まずHTTP_PROXYHTTPS_PROXYを同じHTTPプロキシへ向け、必要に応じてALL_PROXYを追加します。一方、NO_PROXYに広すぎる値を入れると、Copilot関連のドメインがプロキシを迂回してしまいます。最初の診断ではNO_PROXYを空にするか、明らかに必要なローカルアドレスだけに限定してください。

シェル別にプロキシ環境変数を設定する

まずは永続設定を変更せず、現在のターミナルだけに値を設定して動作を確認します。これなら別のアプリや社内ネットワークへのアクセスに影響を広げず、問題が環境変数にあるかを短時間で判定できます。ポート番号はv2rayNの実値に置き換えてください。以下ではHTTPポートを10809として説明します。

PowerShellで一時設定する

PowerShellでは、次のコマンドを実行した後、同じウィンドウからCopilot CLIを起動します。

$env:HTTP_PROXY="http://127.0.0.1:10809"
$env:HTTPS_PROXY="http://127.0.0.1:10809"
$env:ALL_PROXY="http://127.0.0.1:10809"
$env:NO_PROXY="localhost,127.0.0.1"
copilot

利用しているCLIの実行ファイル名が異なる場合は、最後のcopilotを実際のコマンドへ置き換えます。GitHub CLIの拡張機能として実行する環境では、gh copilotを使用することがあります。重要なのは、プロキシ変数を設定した同じプロセス階層からコマンドを起動することです。

コマンドプロンプトとmacOS・Linux系シェル

コマンドプロンプトでは次のように設定します。

set HTTP_PROXY=http://127.0.0.1:10809
set HTTPS_PROXY=http://127.0.0.1:10809
set ALL_PROXY=http://127.0.0.1:10809
set NO_PROXY=localhost,127.0.0.1
copilot

macOSやLinux系のシェルでは、変数名を小文字で読むツールとの互換性も考え、大小文字の両方を設定する方法があります。

export http_proxy=http://127.0.0.1:10809
export https_proxy=http://127.0.0.1:10809
export HTTP_PROXY=http://127.0.0.1:10809
export HTTPS_PROXY=http://127.0.0.1:10809
export ALL_PROXY=http://127.0.0.1:10809
export NO_PROXY=localhost,127.0.0.1
copilot

設定値を確認するときは、認証情報やトークンを含む環境変数までまとめて公開しないでください。表示する対象をプロキシ変数だけに限定し、共有ログへ貼り付ける場合はホスト名、ユーザー名、秘密情報を確認します。環境変数を設定しても変化がない場合は、CLIが独自のプロキシ設定を持つ、またはHTTPプロキシをサポートせずSOCKSのみを受け付ける可能性があります。

報告例: connect ECONNREFUSED 127.0.0.1:10809

原因と解決:指定したHTTPポートで待受していないか、v2rayNのHTTPプロキシが無効です。ポート番号を再確認し、v2rayNでシステムプロキシまたはHTTPインバウンドを有効にしてから再試行します。

報告例: ETIMEDOUT api.github.com

原因と解決:CLIが直接接続している、または宛先が分岐ルールで直通になっています。環境変数を設定した新しいシェルで再実行し、v2rayNのログに該当ドメインが現れるか確認します。

報告例: getaddrinfo ENOTFOUND

原因と解決:DNS解決に失敗しています。TUNやDNS設定を変更する前に、同じターミナルで名前解決を確認し、プロキシ経由で解決する必要がある場合は対応する方式を選択します。

分岐ルール、DNS、TUNを順に確認する

環境変数が正しくても、v2rayN側のルーティングでGitHub関連の通信が直通へ送られていると、CLIは失敗します。ブラウザーの一部ページだけが開く場合、静的コンテンツは直通、APIや認証エンドポイントはプロキシという分岐になっていることもあります。v2rayNのルーティング設定とログを確認し、Copilot CLIの実行時刻にどのドメインがどのアウトバウンドへ送られたかを見ます。

最初のテストでは、複雑なgeositegeoipの例外を一時的に減らし、対象ドメインを明示的にプロキシへ送る構成にすると判定しやすくなります。具体的な接続先はCLIのバージョンや認証方式によって変わるため、ログに記録された実際の宛先を基準にしてください。単に「GitHub」という名前だけで全通信を直通または全通信をプロキシに固定するのではなく、ログ上の失敗先と成功先を比較することが重要です。

結論:ブラウザーの成功よりCLIログを優先する

Copilot CLIの問題では、ブラウザーが開くかどうかより、CLI起動時に環境変数が存在し、対象ドメインがv2rayNのログへ到達しているかが強い判断材料です。まず端末からプロキシポートを使わせ、その後に分岐ルールを細かく調整してください。

DNSにも注意が必要です。CLIがドメイン名をローカルDNSで解決し、得られたIPへ直接接続する場合、ドメインベースのルールを適用しにくくなることがあります。v2rayNのTUNモードを使用している場合は、DNSリクエストがTUNへ入り、コアのDNS処理へ渡っているか、仮想DNSやFakeDNSの設定が通常のCLI通信と整合しているかを確認します。DNS設定を変更した後は、古いキャッシュを消すためにCLIとターミナルを再起動してください。

TUNはシステムプロキシを参照しないアプリにも通信経路を提供できますが、導入すれば必ず直るわけではありません。TUNの仮想インターフェース、ルート、DNS、管理者権限、除外アプリの設定が関係するため、HTTPプロキシ環境変数の確認より後に切り分けるのが安全です。TUNを有効にする場合は、まずブラウザーとCLIの双方で同じノードを使い、ローカルLANやv2rayN自身の管理アドレスを誤ってプロキシへ送らないようにします。

再現性のある最終チェック

一度に複数の設定を変えると、どの項目が効果を持ったのか分からなくなります。v2rayNのログを開いた状態で、同じノード、同じコマンド、同じネットワークから1回ずつテストします。まずプロキシ変数なしで失敗することを記録し、次にHTTP_PROXYとHTTPS_PROXYだけを設定し、その後に必要ならALL_PROXY、ルーティング、TUNの順で変更します。各段階で結果とエラー文を保存すると、再発時にも短時間で復旧できます。

確認結果優先して見る場所次の対応
ポート接続拒否v2rayNの待受ポートHTTP/SOCKSの実ポートと有効状態を修正する
ログに通信がないシェル環境変数またはTUN新しいターミナルでプロキシ変数を設定する
ログに直通と表示ルーティング規則対象ドメインの分岐順序と例外を確認する
ログはあるがDNS失敗DNS処理と解決方式DNS経路、キャッシュ、FakeDNSの整合性を確認する

よくある質問

ブラウザーが使えるのにCLIだけ失敗するのはなぜですか?

ブラウザーとCLIは別々にプロキシ設定を読み取ります。新しいターミナルでHTTPS_PROXYを設定し、同じウィンドウからCLIを起動してください。

HTTPポートとSOCKSポートのどちらを使えばよいですか?

まずはv2rayNのHTTPポートをHTTP_PROXYHTTPS_PROXYへ指定します。CLIがSOCKS5に対応している場合だけ、実際のSOCKSポートをALL_PROXYへ指定して比較します。

環境変数を設定したのにログへ通信が出ません。

古いターミナルやIDEの内蔵ターミナルを使っている可能性があります。シェルを閉じて新しく開き、変数を再設定してからCLIを起動します。

TUNを有効にすれば設定は不要ですか?

TUNはシステムプロキシを使わないアプリも捕捉できますが、DNS、ルート、除外規則、権限が必要です。まずHTTPプロキシで確認し、必要な場合だけTUNを追加してください。

v2rayN をダウンロード