Claude Codeをターミナルから利用する場合、ブラウザだけをClash Vergeのプロキシ経由にしても、CLIの通信まで自動的に切り替わるとは限りません。安定して使うためには、Clash Verge側でプロファイルとルールを準備し、ターミナルで使用するプロキシポートを明示し、最後に実際の通信を確認する必要があります。この記事では、Clash Verge Revなどmihomo系カーネルを搭載したClash Verge系クライアントを前提に、Claude Codeの導入前に確認すべき項目、システムプロキシと環境変数の違い、接続できない場合の切り分け方を順番に解説します。
APIキーは設定例に書き込まない
Claude Codeで使用するAPIキーはアカウントへのアクセス権限を持つ秘密情報です。設定ファイル、シェル履歴、スクリーンショット、公開リポジトリに直接貼り付けないでください。この記事では接続経路とClash Vergeの設定だけを扱い、APIキーそのものは例として表示しません。
1. まず理解したい通信の流れと必要な準備
Claude Codeの通信は、ブラウザでWebページを開く場合とは経路が異なります。基本的な流れは、ターミナルで起動したClaude CodeがHTTPSリクエストを作成し、そのリクエストがローカルのプロキシポートへ渡され、Clash Vergeのmihomoコアがルールを判定し、必要に応じて選択中のノードから外部APIへ接続する、というものです。
したがって、ブラウザでClaude関連のページが開けることだけでは、Claude Codeの動作確認にはなりません。ブラウザはOSのシステムプロキシを利用していても、ターミナル上のNode.jsプロセスやシェルから起動したCLIは、環境変数やアプリケーション独自の設定を参照する場合があります。Clash Vergeを起動し、ノードを選択し、システムプロキシを有効にしたうえで、CLI側にも必要なプロキシ情報を渡すのが確実です。
| 確認項目 | 確認する内容 | 未設定の場合に起きること |
|---|---|---|
| Clash Verge | プロファイルが読み込まれ、mihomoコアが起動している | ローカルポートが開かず、CLIが接続できない |
| ノード | 利用可能なノードを1つ選択している | プロキシ経路が成立せずタイムアウトする |
| モード | 通常はRule、検証時だけGlobal | 必要な通信がDIRECTに流れる、または全通信が迂回する |
| ローカルポート | Clash Vergeのmixed portまたはHTTPポートを確認する | 環境変数の送信先が間違い、接続拒否になる |
| 認証情報 | Claude Code側でAPI利用に必要な認証を設定する | 通信は成功しても401や認証エラーになる |
2. Clash Vergeでプロファイルを読み込み、基本設定を整える
最初にClash Vergeを起動し、「Profiles」または「プロファイル」に契約中のサブスクリプションURLを追加します。URLを入力して取得した後、一覧に設定ファイルが表示されていることを確認し、そのプロファイルを選択して有効化してください。プロファイルが見えているだけでは不十分で、mihomoコアがその設定を実際に読み込んでいる状態にする必要があります。
- プロファイルを追加するプロバイダーの管理画面からサブスクリプションURLをコピーし、Clash Vergeのプロファイル追加欄に貼り付けます。URLの前後に空白や改行が入っていないか確認してください。
- 設定を選択する取得したプロファイルをクリックし、現在使用する設定として選択します。ノード一覧が空の場合は、プロファイルの更新を実行してから再度読み込んでください。
- ノードを選ぶ「Proxies」ページで手動選択または自動選択のグループを開き、応答時間だけでなく実際に接続できるノードを選択します。
- モードをRuleにする普段の利用ではRuleを基本にします。Claude Code関連のドメインだけをプロキシへ送る構成にできるため、不要な通信まで経由させずに済みます。
Clash Verge Revではポートの初期値が環境やバージョンによって異なる場合があります。7897がよく使われる一例ですが、必ず「Settings」や「General」に表示されているmixed port、HTTP port、SOCKS portを確認してください。HTTP_PROXYとHTTPS_PROXYに指定するポートを取り違えると、Clash Vergeが正常に動いていてもClaude Codeだけが接続できません。
3. Claude Codeの通信をルールモードで安定させる考え方
Ruleモードでは、接続先のドメインやIPアドレスをルールと上から順番に照合し、一致したポリシーへ送ります。Claude Codeの接続先は利用するサービス、アカウント、バージョン、認証方式によって変わる可能性があるため、特定の1ドメインだけを決め打ちして終わりにするのは安全ではありません。まずはログを確認し、実際にどの宛先が表示されているかを調べてください。
設定ファイルを自分で管理している場合は、必要なドメインを既存のプロキシグループへ送るルールを、一般的なMATCHルールより前に置きます。たとえば次のような形です。ドメイン名はサービス仕様や利用環境に合わせて確認し、根拠なく多数のドメインを追加しないでください。
rules:
- DOMAIN-SUFFIX,anthropic.com,PROXY
- DOMAIN-SUFFIX,claude.ai,PROXY
- MATCH,DIRECT
上のPROXYは実際のプロファイル内に存在するポリシーグループ名へ置き換えます。プロファイルによっては「PROXY」ではなく「Proxy」、「ノード選択」、「自動選択」など別の名前になっています。存在しないグループ名を記述すると、ルールが読み込めない、または期待した出口へ送られない原因になります。
サブスクリプションがルールを自動配布している場合、購読設定の更新によって手動変更が上書きされることがあります。Clash Vergeのオーバーライド機能やルールプロバイダーを利用できる場合は、元の購読ファイルを直接編集するよりも、追加ルールを分離して管理する方が安全です。編集後は設定の構文エラーがないことを確認し、コアを再起動または設定再読み込みしてください。
ルールの確認では、Claude Codeを起動した時刻のログを見ます。接続先、適用されたルール、使用されたポリシーが期待どおりなら、Clash Verge側の振り分けは機能しています。ログに何も出ない場合は、CLIが別の経路を使っている、またはプロキシ環境変数が設定されていない可能性があります。
4. ターミナルからプロキシを渡す:環境変数の設定方法
ターミナルで起動するCLIに対しては、HTTP_PROXYとHTTPS_PROXYを設定する方法が分かりやすいです。Clash Vergeのmixed portはHTTPとSOCKSの両方を受け付ける構成で使われることが多く、まずはHTTP形式のURLを指定します。以下のポート番号は例なので、Clash Vergeの画面に表示された実際の値へ置き換えてください。
Windowsで一時的に設定する
PowerShellでは、現在開いているターミナルの間だけ環境変数を有効にできます。接続確認が終わったらウィンドウを閉じるだけで元に戻るため、最初のテストに向いています。
$env:HTTP_PROXY="http://127.0.0.1:7897"
$env:HTTPS_PROXY="http://127.0.0.1:7897"
$env:NO_PROXY="localhost,127.0.0.1"
コマンドプロンプトを使う場合は次の形式です。
set HTTP_PROXY=http://127.0.0.1:7897
set HTTPS_PROXY=http://127.0.0.1:7897
set NO_PROXY=localhost,127.0.0.1
Windowsのユーザー環境変数へ永続的に登録する方法もありますが、共有端末では他の開発ツールにも影響します。まず一時設定で動作を確認し、必要性を判断してから永続化してください。
macOSとLinuxで一時的に設定する
macOSやLinuxのシェルでは、次のようにexportを使います。
export HTTP_PROXY="http://127.0.0.1:7897"
export HTTPS_PROXY="http://127.0.0.1:7897"
export NO_PROXY="localhost,127.0.0.1"
毎回入力するのが面倒でも、最初からシェルの設定ファイルへ追加するのではなく、動作確認を先に行うことをおすすめします。永続化する場合は、使用しているシェルがzshかbashかを確認し、該当する設定ファイルへ記述します。プロキシを使わないネットワークへ移動したときは、環境変数が残っていると通常の通信まで失敗することがあるため、解除方法も覚えておきましょう。
unset HTTP_PROXY HTTPS_PROXY NO_PROXY
環境変数名の大文字・小文字の扱いはツールやランタイムによって差があるため、必要に応じて小文字版も設定します。ただし、同じ変数に異なるポートを混在させると原因が分かりにくくなるため、まずは同じClash Vergeポートに揃えてください。
5. Claude Codeを起動する前後の確認手順
設定を一度に全部変更すると、問題が起きたときに原因を特定できません。次の順番で確認すると、Clash Verge、ローカルポート、ルール、Claude Code認証を分けて検証できます。
- Clash Vergeのローカルポートを確認設定画面でmixed portまたはHTTP portの番号を記録します。ポートが変更されている場合は、ターミナルの環境変数も同じ番号にします。
- ノードを1つ選択自動選択でも構いませんが、最初は動作確認しやすいノードを手動で選び、ログに使用ノードが表示される状態にします。
- ルールログを有効にするログ画面を開いたまま、Claude Codeの起動や簡単な問い合わせを実行します。接続先と出口を確認します。
- Claude Codeの認証を確認プロキシ経路が成立していても、APIキーやログイン状態が正しくなければ認証エラーになります。401、403などの応答は、まず認証設定とアカウント権限を確認します。
- 同じ操作を別ノードで試す特定ノードだけ失敗するのか、すべてのノードで失敗するのかを比較します。これによりノード障害と設定問題を切り分けられます。
接続確認用に、プロキシ環境変数が有効なターミナルからHTTPSリクエストを実行する方法もあります。たとえば次のコマンドで、Clash Vergeのログに通信が記録されるか確認できます。
curl -I https://example.com
このテストが成功してもClaude CodeのAPI通信が必ず成功するとは限りませんが、少なくともターミナルからローカルプロキシへ接続できるかを確認できます。curl自体が見つからない、証明書検証に失敗する、接続が拒否されるといった場合は、Claude Codeの認証を調べる前にローカルプロキシ設定を直してください。
6. システムプロキシとTUNモードはいつ使い分けるか
Clash Vergeの「System Proxy」をオンにすると、OSのプロキシ設定を参照するアプリケーションがローカルプロキシへ接続するようになります。ブラウザの確認には便利ですが、すべてのターミナルツールがOS設定を読み取るわけではありません。そのため、Claude Codeではシステムプロキシをオンにしたうえで、HTTP_PROXYとHTTPS_PROXYも明示する構成が確認しやすい方法です。
TUNモードは仮想ネットワークインターフェースを作り、システムプロキシを利用しないアプリケーションの通信もmihomo側へ取り込む方式です。CLIや開発ツールが環境変数を無視する場合には有効な選択肢ですが、管理者権限、仮想インターフェース、DNS設定、ルート設定など追加の要素が増えます。初回設定では、まず通常のローカルHTTPプロキシでClaude Codeを動かし、それで対応できない通信だけTUNモードを検討してください。
| 方式 | 向いている場面 | 注意点 |
|---|---|---|
| システムプロキシ | ブラウザやOS設定を参照するアプリ | CLIが設定を読まない場合がある |
| HTTP_PROXY / HTTPS_PROXY | ターミナル、Node.js系ツール、スクリプト | シェルごとに設定が必要 |
| TUNモード | プロキシ設定を持たないアプリや広範囲の通信 | 権限、DNS、ルーティングの問題が増える |
| Globalモード | 一時的な経路確認 | 不要な通信までノード経由になる |
7. 接続できないときのログ別トラブルシューティング
エラーの見た目だけで「Clash Vergeが壊れた」と判断しないでください。エラーが発生した時刻にClash Vergeのログを開き、通信がコアまで届いているかを最初に確認します。
ローカル接続拒否またはポートエラー
connection refused、dial tcp 127.0.0.1:7897のような表示が出る場合、指定したポートでClash Vergeが待ち受けていない可能性があります。Clash Vergeが終了していないか、コアが起動しているか、設定画面のポート番号と環境変数が一致しているかを確認します。別のアプリがポートを使用している場合は、Clash Vergeのポートを空いている番号へ変更し、ターミナルを開き直してください。
タイムアウトまたはTLSエラー
timeoutやTLSハンドシェイク関連のエラーが出る場合は、まず別のノードへ変更します。すべてのノードで同じ結果になる場合は、サブスクリプションの期限、ローカルネットワーク、システム時刻、DNSを順に確認します。特定の宛先だけ失敗するなら、ルールがDIRECTへ送っていないか、対象ドメインが誤ったポリシーグループへ入っていないかをログで調べます。
401、403などの認証エラー
Clash Vergeのログに接続先と出口が記録され、Claude Codeから401や403が返る場合、プロキシ経路よりも認証情報、契約状態、利用権限の問題を疑います。環境変数名の誤り、期限切れの認証情報、別アカウントのログイン状態などを確認してください。APIキーをターミナルのコマンドライン引数に直接入力すると履歴に残ることがあるため、認証情報の公式手順に従い、秘密情報を露出させない方法で設定します。
Clash Vergeのログに何も出ない
ログに該当通信がまったく出ない場合、Claude CodeがClash Vergeを経由していません。環境変数を設定したターミナルとは別のウィンドウから起動していないか、変数名の綴りに誤りがないか、プロセス起動後に設定を変更していないかを確認します。GUIランチャーやIDE内蔵ターミナルから起動する場合は、その実行環境へ環境変数が引き継がれているかも確認が必要です。
切り分けの順番
ログなしならCLIからClash Vergeまでの経路、ローカル接続拒否ならポート、ログありでタイムアウトならノードやルール、401・403なら認証情報を調べます。この順番を守ると、無関係な設定を同時に変更せずに済みます。
8. よくある質問
Clash Vergeのシステムプロキシをオンにすれば、Claude Codeも自動でプロキシ経由になりますか?
必ずしもそうとは限りません。Claude Codeや実行環境がOSのプロキシ設定を参照する場合もありますが、ターミナルツールはHTTP_PROXYやHTTPS_PROXYを使う構成の方が確認しやすいです。まずClash Vergeのポートを確認し、現在のターミナルに環境変数を設定してから起動してください。
HTTP_PROXYとHTTPS_PROXYにはSOCKSポートを指定してもよいですか?
ツールがSOCKS形式に対応している場合は利用できますが、対応形式は実行環境によって異なります。最初はClash Vergeのmixed portまたはHTTP portを、http://127.0.0.1:ポート形式で指定する方が切り分けやすいです。
GlobalモードにするとClaude Codeが動きます。常にGlobalで使うべきですか?
常用はRuleモードを推奨します。GlobalではClaude Code以外の通信もすべて選択中のノードへ送られ、遅延や通信量が増える可能性があります。Globalで動作確認をした後、ログを見ながら必要な宛先だけをRuleでプロキシへ送る構成に戻してください。
TUNモードを有効にすれば環境変数の設定は不要ですか?
TUNモードによって多くの通信を取り込めるようになりますが、アプリケーションやDNS、ルーティングの挙動まで一律に同じになるとは限りません。TUNを有効にする場合でも、まず通常のHTTPプロキシで動作を確認し、ログとルールの結果を比較してください。
設定の要点は、Clash Vergeでプロファイルとノードを準備すること、ターミナルのプロキシポートを正しく指定すること、Claude Codeの認証と通信経路を別々に検証することです。最初から複雑なオーバーライドやTUN設定を追加せず、Ruleモードと一時的な環境変数から始めると、問題が起きたときにも原因を追いやすくなります。
Clashをダウンロード全プラットフォーム対応