Claude Codeの通信経路を整理:システムプロキシだけでは足りない場合がある
Claude Codeはターミナルから起動する開発支援ツールです。Clashのシステムプロキシを有効にしても、すべてのコマンドラインアプリがその設定を自動で使うとは限りません。ブラウザーでは通信できるのに、Claude Codeではログインや応答の取得に失敗する場合、ターミナルの環境変数、Clashのローカルポート、ルールによる出力先を順番に確認しましょう。
通信の流れは、Claude Codeが起動するターミナルの環境変数、Clashが待ち受けるローカルのHTTPプロキシポート、選択中のプロキシグループ、外部サービスの順です。どこか一段でも設定が一致しないと、接続拒否、タイムアウト、認証画面に戻るといった症状が起きます。TUNはアプリ側にプロキシ設定ができない場合などに使う通信取り込み方法であり、ターミナルで環境変数を使う構成では、最初から有効にする必要はありません。
| 確認項目 | 見る場所 | 判断の目安 |
|---|---|---|
| ローカルポート | Clashのポート設定、ログ | HTTPまたは混合ポートが待ち受け中 |
| ターミナルのプロキシ | HTTP_PROXY、HTTPS_PROXY | Clashのローカルアドレスと実際のポートが一致 |
| 出力経路 | Clashの接続一覧、ルール、プロキシグループ | 対象通信が意図したポリシーに一致 |
| 認証 | Claude Codeのログイン画面、ターミナルの出力 | ネットワーク到達後にアカウント認証が完了 |
Clash側の準備:ポート、モード、プロキシグループを確認
まずClash VergeやClash Verge Revを起動し、利用中の設定が読み込まれていることを確認します。画面の名称や配置はバージョンによって異なりますが、設定または一般設定にあるHTTPポート、混合ポートを確認してください。以下では例として7890を使います。実際のポートが異なる場合は、後のコマンドも同じ番号に置き換えます。SOCKS専用ポートやコントロールAPIのポートを、確認せずにHTTPプロキシとして指定しないでください。
- コアが起動している:クライアント画面で稼働状態を確認し、ログに設定解析エラーやポート競合が出ていないか見ます。
- 接続先グループが選択されている:プロキシ画面で利用可能なノードまたは自動選択グループを選びます。グループが存在するだけでは、意図したノードが使われるとは限りません。
- ルールモードを確認する:ルールモードでは接続先ごとにルールが評価されます。全通信を一つのグループへ送るグローバルモードとは動作が異なります。
- ローカル待ち受けを確認する:ターミナルと同じ端末上で使う場合、通常はループバックアドレスの
127.0.0.1を指定します。LAN向け待ち受けを有効にして公開範囲を広げる必要はありません。
Claude Codeが利用する接続先は、サービスの構成やログイン方式により変わることがあります。特定のドメインだけを見た古い許可リストをそのまま追加するより、まずClashの接続一覧で実際の接続先と一致ルールを調べてください。接続がDIRECTになっているなら、プロキシ経由にしたい通信を既存ルールの優先順位に沿って調整します。ルールを変更する前に設定をバックアップし、広いドメイン範囲を安易にまとめてプロキシ対象にしないようにしましょう。
Clashのモードをグローバルにしても、環境変数が未設定のターミナルアプリへローカルプロキシを自動で教えるわけではありません。逆に、環境変数が正しくてもClashのモードやルールで通信が直接接続に振り分けられることがあります。両方を別々に確認するのが切り分けの基本です。
ターミナルにプロキシを設定する:環境変数と実行方法
HTTPプロキシまたは混合ポートを使う場合、HTTPSのWebサイトへ接続するための環境変数にも、通常はhttp://から始まるローカルプロキシURLを指定します。これは「接続先がHTTP」という意味ではなく、ターミナルとローカルプロキシ間の方式を示します。Clash側がTLS付きのプロキシとして設定されている特殊な場合を除き、https://127.0.0.1:7890に変更しないでください。
macOS・Linux:現在のシェルで一時設定
zsh、bashなどのターミナルで、ポート番号を実際の値に合わせて設定します。次の設定は現在のシェルと、そこから起動する子プロセスに適用されます。
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export http_proxy="$HTTP_PROXY"
export https_proxy="$HTTPS_PROXY"
claude
Claude Codeを起動する前に設定するのがポイントです。すでに起動しているターミナルやClaude Codeのプロセスには、後から環境変数を設定しても反映されません。動作確認後に毎回使う場合は、利用中のシェル設定ファイルへ追加できますが、共有端末や一時的な作業環境では、必要なターミナルだけで設定する方が安全です。
Windows PowerShell:プロセス単位で設定
PowerShellでは、まず現在のウィンドウ内だけに設定します。Windowsのユーザー環境変数として永続化する前に、この方法でポートと接続を確認してください。
$env:HTTP_PROXY = "http://127.0.0.1:7890"
$env:HTTPS_PROXY = "http://127.0.0.1:7890"
$env:http_proxy = $env:HTTP_PROXY
$env:https_proxy = $env:HTTPS_PROXY
claude
Clashのシステムプロキシをオンにしただけで変化がないときも、上記のようにターミナルのプロセス環境を確認します。反対に、環境変数を指定したのにブラウザーまで想定外の経路に変わった場合は、システムプロキシ側とターミナル側の設定を分けて調べてください。認証情報をプロキシURLへ埋め込む設定は、シェル履歴やプロセス情報に残るおそれがあるため、安易に使わないでください。
動作確認を段階的に行う:ポート、HTTPS接続、Claude Code
ここでは、Clashの混合ポートが7890である例を使います。作業中は一度に複数の項目を変えず、ポートへの接続、プロキシ経由のHTTPS通信、Claude Codeの順に確認します。途中で失敗した段階を特定できれば、認証設定とネットワーク設定を混同せずに済みます。
- Clashを起動する:設定が有効で、ノードまたはプロキシグループが選択済みであることを確認します。TUNや別のVPNは、まず無効のままにして構成を単純にします。
- 環境変数を設定する:前の節のコマンドをターミナルへ入力し、Claude Codeを実行する同じウィンドウで設定します。
- プロキシ経由のHTTPS接続を試す:macOS・Linuxでは
curl -x http://127.0.0.1:7890 -I https://api.anthropic.com、PowerShellではcurl.exe -x http://127.0.0.1:7890 -I https://api.anthropic.comを実行します。 - Clashの接続一覧を見る:テストした時刻に対応する接続が記録されているか、どのルールとポリシーが適用されたかを確認します。接続先の応答コードだけで成否を判断せず、TLS接続が進み、接続がClashを通過したかを見ます。
- Claude Codeを起動する:接続テストが通った後に
claudeを実行し、ログインまたは既存セッションの確認を行います。ブラウザーを開く認証フローでは、ブラウザー側のログイン完了後にターミナルへ戻って状態を確認してください。
curlのテスト先はサービスの機能や認証状態を検証するものではありません。未認証リクエストにエラー応答が返っても、プロキシ経由でTLS接続できていれば、ネットワーク経路の確認としては意味があります。Clashの接続一覧に通信が出ない場合は、プロキシ変数の綴り、シェルへの適用、ポート番号、ターミナルが別の環境で動いていないかを確認しましょう。
症状別の確認:タイムアウト、ログイン失敗、応答エラー
エラー文だけでは原因を決めつけず、同じ時刻のClaude Code出力とClashログを照合します。Clash側に接続が記録されないのか、接続はあるが失敗しているのか、応答後に認証で止まっているのかを分けると、確認範囲を絞り込めます。
| 症状 | 主な確認箇所 | 次の操作 |
|---|---|---|
| 接続拒否、プロキシへ接続できない | ポート、コアの稼働状態、別プロセスとの競合 | Clash画面の実ポートと環境変数を一致させる |
| タイムアウト、TLSエラー | 接続一覧、選択ノード、ルール、DNS | 同時刻のログでポリシーと名前解決を確認する |
| ログイン画面が完了しない | ブラウザーとターミナルの経路、コールバック画面 | 両方の接続状態を確認し、認証をやり直す |
| 認証エラー、権限エラー | アカウント、セッション、利用権限 | ネットワーク疎通とアカウント状態を分けて確認する |
| ブラウザーは使えるがCLIだけ失敗 | ターミナルの環境変数、起動元、別環境の有無 | 同じターミナルで環境変数を設定して再試行する |
接続拒否なら、まず指定先が127.0.0.1と正しいポートの組み合わせか確認します。ClashのHTTPまたは混合ポートが無効、別の番号に変更済み、コアが停止中というケースがよくあります。ポートを変更したら、Clash側とターミナル側の両方を更新してください。
タイムアウトやTLSエラーでは、Clashの接続詳細に表示される一致ルール、出力ポリシー、DNSエラーを確認します。意図せずDIRECTへ流れている場合は、対象通信に適用されるルールの順序を確認します。プロキシグループに接続可能な選択肢があることも確認してください。ルールを修正しても既存接続は切り替わらないことがあるため、Claude Codeを終了してから新しい接続で再試行します。
ログインだけが失敗するときは、CLIとブラウザーが異なるネットワーク経路を使っている可能性があります。ブラウザーはOSのプロキシ設定を利用していても、ターミナルの環境変数は別に必要な場合があります。また、認証ページが完了してもターミナルに戻れないなら、コールバック先へのローカルアクセスや、認証セッションの期限切れも確認します。ネットワーク疎通ができていることと、アカウントが利用可能であることは別の確認事項です。
問題が解消したら、検証用にグローバルモードへ切り替えた場合は元のルールモードへ戻し、必要のない環境変数を削除します。macOS・Linuxではunset HTTP_PROXY HTTPS_PROXY http_proxy https_proxy、PowerShellではRemove-Item Env:HTTP_PROXY,Env:HTTPS_PROXY,Env:http_proxy,Env:https_proxy -ErrorAction SilentlyContinueを実行できます。普段からプロキシを使う場合は設定を残して構いませんが、意図しない直接接続や古いポート設定が残っていないか、次回起動時にも確認してください。