はじめに
Claude Code を起動したのに、ログイン画面が進まない、API への接続でタイムアウトする、あるいはブラウザーでは Claude を使えるのにターミナルからの実行だけ失敗する――こうした症状では、Clash のノードが使えないとは限りません。デスクトップアプリの通信はプロキシ経由でも、ターミナルで起動した CLI が別の通信経路を使っていることがあります。
Claude Code のような開発ツールは、シェルから起動され、環境変数や実行時のネットワーク設定の影響を受けます。そのため、Clash の画面で「接続済み」と表示されていても、端末側にプロキシが設定されていなければ、Claude Code の通信が Clash を通るとは限りません。また、端末の設定が正しくても、Clash のルールが対象ドメインを DIRECT に振り分けていたり、選択したノードが不調だったりすれば、接続は失敗します。
この記事で確認すること
Clash のローカルポート、端末のプロキシ環境変数、ルールとノードの順に切り分け、Claude Code をプロキシ経由で実行するための基本手順を確認します。
1症状から原因を切り分ける
まず、失敗がどの段階で起きているかを整理します。ブラウザーの Claude は正常なのに CLI のみ失敗する場合は、端末の環境変数やアプリの実行環境が第一候補です。一方、Claude Code 以外のアプリも同じノードで接続できない場合は、ノード、ルール、Clash 自体の状態を先に確認します。
- ログインや認証で止まる: ブラウザーを開く認証フローと、CLI から行われる API 通信は別の経路を通る場合があります。ブラウザーだけ成功しても、CLI の接続確認にはなりません。
- タイムアウトする: CLI にプロキシが渡っていない、プロキシのポート番号が違う、または選択中のノードやネットワーク経路に問題がある可能性があります。
- 接続拒否になる: 指定したアドレスにプロキシが待ち受けていない、Clash が停止している、または HTTP プロキシではないポートを指定しているケースが考えられます。
- 一部の操作だけ失敗する: 認証、API、補助サービスなど、接続先によって Clash のルールが異なる可能性があります。接続ログで実際のドメインとルールを調べます。
Clash Verge Rev や Mihomo を使っている場合は、設定画面または現在のプロファイルで mixed-port、port、socks-port の値を確認してください。たとえば mixed-port: 7890 なら、一般的には http://127.0.0.1:7890 を HTTP/HTTPS プロキシとして指定できます。ただし、ポート番号は環境によって異なるため、例の値をそのまま使わず、実際の設定と照合してください。
確認時の注意
Clash のポートを推測で指定しないでください。ポートの種類や番号が違うと、プロキシ設定を追加しても接続できません。また、認証情報や API キーを含むログ、設定ファイルを公開の場へ貼り付けないようにしましょう。
2端末にプロキシを設定する
次に、Claude Code を起動するシェルにプロキシを設定します。まず Clash を起動してノードを選択し、システムプロキシまたは必要なモードを有効にしてください。Claude Code の CLI には、HTTP プロキシとして Clash のローカル待ち受け先を渡す方法が分かりやすいです。以下ではポート番号を 7890 としています。自分の Clash の設定に合わせて読み替えてください。
ターミナルで次のコマンドを実行してから Claude Code を起動します。
大文字と小文字の環境変数を両方設定するのは、ツールや実行環境によって参照する表記が異なる場合に備えるためです。設定がこのターミナルのセッションだけに適用されるので、動作確認後に別のターミナルを開いて再現しない場合は、起動したシェルが異なっていないかも確認してください。
PowerShell から Claude Code を起動する場合は、同じウィンドウで環境変数を設定します。
Windows のユーザー環境変数に恒久設定する方法もありますが、まずは上記の一時設定で接続を確認するのがおすすめです。これなら設定変更の影響範囲がその PowerShell セッションに限られ、切り戻しもウィンドウを閉じるだけで済みます。IDE の内蔵ターミナルから起動する場合は、IDE が起動時点で古い環境変数を保持していることがあるため、IDE を再起動してから試してください。
SOCKS 専用ポートを使う場合は、そのポートが本当に SOCKS5 用として設定されているかを確認します。ツール側の対応状況が分からないときは、まず Clash の HTTP または mixed-port を使用してください。プロキシの URL に認証情報が必要な環境では、指定方法を利用中のツールと Clash の設定に合わせます。パスワードをシェル履歴や共有ログに残さないよう注意しましょう。
設定が反映されているか確認
同じターミナルで echo $HTTPS_PROXY(macOS / Linux)または $env:HTTPS_PROXY(PowerShell)を実行し、Clash のローカル URL が表示されるか確認します。表示されても接続が保証されるわけではないため、続けて Clash の接続ログも確認してください。
3Clash のルールとノードを確認する
端末がプロキシを指定していても、Clash が対象の通信を適切なノードに送らなければ解決しません。Claude Code を起動し、接続に失敗した時刻に合わせて Clash の「接続」またはログ画面を開きます。Claude 関連のドメインが記録されていれば、その行に表示されるルール、ルールの判定結果、プロキシグループ、選択されたノードを確認してください。
ルールモードで対象通信が DIRECT になっている場合、端末の環境変数が正しくても通信は直接接続されます。既存プロファイルを編集する場合は、ルールの適用順序にも注意してください。一般に、具体的なドメインルールを広い範囲に一致するルールより前に置き、最後の包括ルールより前で意図したプロキシグループへ振り分けます。接続先はサービスや機能によって変わり得るため、特定のドメイン一覧を固定で追加するのではなく、実際の接続ログに出たホスト名を根拠に調整してください。
- Clash が起動し、選択中のノードが利用可能であることを確認します。
- プロファイルまたは設定画面で、Claude Code が使うプロキシポートと環境変数のポート番号が一致しているか確認します。
- 端末から Claude Code を起動し、失敗した時刻の接続ログを確認します。該当する通信がログにない場合は、CLI が環境変数を参照していないか、別の端末・実行環境から起動している可能性があります。
- 該当通信が
DIRECTならルールを見直します。プロキシグループへ送られているなら、別のノードを選んで再テストします。 - 設定を一度に複数変更せず、変更ごとに Claude Code を再起動して、結果が変わるか比較します。
ノードを変更する際は、速度だけでなく接続の安定性も見てください。遅延テストに成功していても、実際のサービスへの通信が正常とは限りません。複数のノードで同じエラーになるなら、ローカル設定、ルール、アカウント側の状態も含めて調べます。特定のノードだけ失敗するなら、そのノードの一時的な障害や接続先との相性が疑われます。
4接続確認と設定の戻し方
変更後は、Claude Code をいったん終了して、環境変数を設定した同じターミナルから再起動します。ログインできるか、基本的なコマンドを実行できるかを確認しながら、Clash のログに対象通信が記録され、意図したプロキシグループとノードが選ばれているかも照合します。画面上の応答だけで判断せず、端末と Clash の両方で経路を確認することが大切です。
- 環境変数はあるのにログに通信がない: Claude Code を起動した端末が設定を引き継いでいるか確認します。IDE、別のシェル、コンテナー、リモート開発環境では、それぞれプロキシ設定が独立していることがあります。
- Clash のログに通信はあるが失敗する: ルールの判定先とノードを確認し、別ノードでもテストします。エラーが特定ノードだけで発生する場合は、ルールよりノード側を優先して切り分けます。
- 変更後にほかの CLI まで影響する: 環境変数は、そのシェルから起動するほかのプログラムにも適用される場合があります。不要になったら一時設定を解除してください。
macOS / Linux では次のように解除できます。
PowerShell では次のコマンドで解除します。
それでも改善しない場合は、エラーの発生時刻、使用 OS、Clash クライアントとコアの種類、プロキシのポート設定、ルール判定、ノードを記録し、順に比較してください。診断のためログを共有する場合は、トークン、アカウント情報、認証ヘッダー、プロキシのユーザー名やパスワードを必ず伏せます。プロバイダーやサービス側の利用条件、提供地域、アカウント状態による制限は、端末のプロキシ設定だけでは解消できない場合があります。
まとめると、確認の順序は「Clash の待ち受けポート」「起動シェルの環境変数」「接続ログのルール判定」「ノードの状態」です。ひとつずつ検証すれば、Claude Code がプロキシを参照していないのか、Clash の振り分けが原因なのかを見分けやすくなります。