OpenAI Codex CLI と Clash Verge を組み合わせる理由

OpenAI Codex CLI は、ターミナルからコードの読解、編集、テスト実行、Git 操作などを進められる開発者向けの CLI ツールです。ブラウザ版の ChatGPT と違い、作業ディレクトリやローカルのコマンド実行環境と直接つながるため、ターミナルだけで開発フローを完結させやすい点が特徴です。その一方で、初回ログイン、認証トークンの取得、API へのストリーミング接続、更新確認など、複数の通信が短い時間に発生します。

macOS や Windows のブラウザは OS のシステムプロキシを利用しやすい一方、CLI は起動元のシェル、Node.js や Rust などの実行環境、WSL、Dev Container、リモート SSH の設定を個別に受け取ります。Clash Verge でシステムプロキシをオンにしただけでは、Codex CLI のすべての通信が同じ出口を通るとは限りません。ブラウザのログイン画面は開くのに CLI が待ち続ける、パッケージ取得だけ失敗する、回答のストリーミングが途中で切れる、といった問題は、この経路の違いから発生します。

この記事では、Clash Verge の基本的なモード確認から、Codex CLI のログイン、ターミナルへのプロキシ環境変数、必要なドメインだけを分けるルールまでを順番に整理します。特定のサービスを無条件に迂回することではなく、利用規約と所属組織のネットワークポリシーを守りながら、自分の環境でどの通信が失敗しているかを観測し、再現性のある設定にすることが目的です。

最初の確認:Codex CLI のエラーを見たら、まず「ログイン」「API 呼び出し」「npm などのパッケージ取得」「GitHub からの更新」のどの段階で止まったかを分けてください。Clash Verge の接続一覧とターミナルのエラーを同じ時刻で照合すると、ルール不足かノード品質かを切り分けやすくなります。

ログイン・API・パッケージ取得を三つの通信層に分ける

Codex CLI の通信は、すべて同じホストへ向かうとは限りません。第一の層はログインと認証です。ブラウザを開く方式では、認証ページ、リダイレクト先、ローカルのコールバック処理が関係します。ログイン画面そのものが表示されても、認証完了後に CLI がトークンを受け取れなければ、ターミナル側では単にタイムアウトしたように見えることがあります。ブラウザと CLI が別のプロキシを使っていないかを確認してください。

第二の層はモデル API とストリーミング応答です。Codex CLI は短い REST リクエストだけでなく、生成中の内容を少しずつ受け取る長めの接続を利用する場合があります。TLS 接続は成功しても、上流ノードの遅延や接続維持の相性によって回答が途中で止まることがあります。Clash Verge の接続ログで、対象ホストが同じポリシーグループへ入り、接続が何度も再確立されていないかを見ます。

第三の層はCLI 本体と開発依存の取得です。インストール方法によっては npm レジストリ、GitHub Releases、パッケージ CDN、証明書失効確認用のホストなどが追加されます。Codex CLI の API が正常でも、更新チェックだけが遅い場合は、この層だけが別経路になっている可能性があります。逆に、インストール時だけ失敗するなら API のルールを増やす前に、パッケージ取得先を確認する方が合理的です。

段階 主な症状 確認する場所
ログイン ブラウザは開くが CLI が完了しない 認証ホスト、リダイレクト、コールバック
API 応答 接続後に回答が止まる、再試行が続く ライブ接続、TLS、選択中のノード
取得・更新 インストールやアップデートだけ失敗する npm、GitHub、CDN の接続記録

Clash Verge 側で先にそろえる基本設定

まず Clash Verge を起動し、現在有効なプロファイルとコアの状態を確認します。購読を更新した直後は、古いプロファイルを表示したままになっていることがあるため、プロファイル一覧で実際に選択されている設定を確認してください。画面の名称はバージョンにより異なりますが、Profiles、Proxies、Connections、Logs、Settings に相当する領域を探せば作業できます。

次に、Clash Verge のMixed Port または HTTP/SOCKS の待受ポートを確認します。たとえばローカルポートが 7890 なら、HTTP プロキシと SOCKS5 プロキシのどちらを使うかを決め、ターミナル側の値と一致させます。Clash Verge が 127.0.0.1:7890 で待ち受けているのに、シェルが別のポートを参照していれば、環境変数を設定しても接続できません。

最初の検証では、いきなり TUN を有効にするよりも、システムプロキシとターミナルの明示的な環境変数を使う方が原因を追いやすくなります。TUN はプロキシ設定を継承しないアプリケーションも捕捉できる便利な機能ですが、仮想アダプター、管理者権限、別 VPN、DNS 設定などの変数が増えます。まず一つのターミナルで成功経路を作り、その後に TUN へ広げる順序が安全です。

注意:購読 URL や認証トークン、CLI のログに含まれるアクセストークンは、スクリーンショットやサポート投稿へ貼り付けないでください。接続診断を共有する場合は、ユーザー名、ホームディレクトリ、トークン、完全な URL を伏せたうえで、ホスト名とエラーの種類だけを残します。

ターミナルへプロキシを渡して Codex CLI を実行する

GUI のシステムプロキシ設定と、ターミナルで動く Codex CLI のプロキシ設定は別物として考えます。Clash Verge のローカルポートを確認したら、まず現在のシェルだけに環境変数を設定して動作を試します。HTTP 接続を利用する場合の例は次のとおりです。ポート番号は自分の Clash Verge の設定へ置き換えてください。

Temporary proxy variables for a single shell session

export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export ALL_PROXY=socks5://127.0.0.1:7891
export NO_PROXY=localhost,127.0.0.1,::1

すべての変数を同時に指定する必要はありません。CLI や内部ライブラリによって優先する変数が異なるため、まず HTTPS_PROXYHTTP_PROXY だけで試し、必要に応じて ALL_PROXY を追加します。HTTP ポートへ SOCKS の書式を指定したり、SOCKS ポートへ http:// を指定したりすると、Clash Verge の接続一覧に何も出ないまま失敗することがあります。

設定後は、同じシェルから Codex CLI のログインを実行します。コマンド名やオプションはインストールしたバージョンの公式ヘルプを優先し、古い記事に書かれたオプションをそのまま使わないでください。重要なのは、Clash Verge の Connections に認証関連の接続が現れること、ブラウザを閉じた後に CLI 側でログイン完了が返ること、そしてトークンを毎回入力しなくても次のセッションを開始できることです。

  1. Clash Verge でプロファイルと Mixed Port の番号を確認します。
  2. 新しいターミナルを開き、プロキシ環境変数を一時的に設定します。
  3. Codex CLI のログインまたは認証コマンドを実行します。
  4. Clash Verge のライブ接続で認証ホストと選択されたポリシーを確認します。
  5. 短いコード作業を実行し、API 応答が最後まで受信できるか試します。

シェルを閉じると環境変数は消えるため、毎回入力するのが面倒な場合は、シェルの設定ファイルへ追記する方法があります。ただし、ノート PC を社外ネットワークや直接接続へ持ち出す場合、常にプロキシを強制すると別の場所で通信障害が起こります。作業用スクリプトや direnv などでプロジェクト単位に切り替える方が、固定設定より管理しやすいケースもあります。

Codex 関連の通信をルールで分ける方法

プロキシ環境変数で基本動作が確認できたら、次に Clash のルールを整理します。最初から大量のドメインを登録するのではなく、Clash Verge の接続ログで実際に現れたホストを記録し、認証、API、取得系の三つに分類します。ベンダー側の構成変更でホスト名が増える可能性もあるため、推測だけで広いサフィックスを追加するより、用途と観測日時をコメントに残す方が保守しやすくなります。

Illustrative rules fragment — replace policies and hosts with verified values

proxy-groups:
  - name: CODEX_STABLE
    type: select
    proxies:
      - YOUR_PREFERRED_NODE
      - DIRECT

rules:
  - DOMAIN-SUFFIX,openai.com,CODEX_STABLE
  - DOMAIN-SUFFIX,api.openai.com,CODEX_STABLE
  - DOMAIN-SUFFIX,auth.openai.com,CODEX_STABLE
  - DOMAIN-SUFFIX,registry.npmjs.org,CODEX_STABLE
  - DOMAIN-SUFFIX,github.com,CODEX_STABLE
  - MATCH,YOUR_DEFAULT_POLICY

この断片は概念例であり、実際のログに存在しないホストを無条件に追加するものではありません。認証用ホストと API 用ホストを同じグループへまとめるか、安定性を優先して分けるかは、利用環境とログイン方式によって判断します。企業ネットワークでは、社内の認証や監査用ホストまで外部プロキシへ送らないよう、組織のルールを先に確認してください。

ルールの順序も重要です。Clash は通常、上から順に評価して最初に一致したルールを適用します。広い GEOIP、広告ブロック、地域別ルールが先にあると、Codex の通信が意図しないポリシーへ吸い込まれることがあります。専用の DOMAINDOMAIN-SUFFIX を広い MATCH より前に置き、変更後はプロファイルを再読み込みしてから新しい CLI セッションで検証してください。

ルールを増やしすぎない:OpenAI 関連に見えるすべてのドメインを一つのサフィックスでまとめると、不要な通信まで同じ出口へ送ることがあります。まず失敗した接続だけを追加し、不要になったルールは削除できるよう、変更前の YAML をバックアップしておきましょう。

接続できないときの実践的な切り分け

Codex CLI が「接続できない」と表示した場合、最初に Clash Verge の接続一覧を開いた状態で同じ操作を再実行します。接続一覧に該当ホストが現れないなら、CLI がプロキシを認識していない、名前解決より前に失敗している、または NO_PROXY の影響を受けている可能性があります。接続が現れてすぐ失敗するなら、ポート形式、TLS、上流ノード、DNS の順に確認します。

ブラウザだけログインに成功する場合は、ブラウザとターミナルが同じ経路を使っているかを比べます。ブラウザはシステムプロキシ、CLI は環境変数なし、という組み合わせが特に多いパターンです。反対に、CLI は API へ到達するのにブラウザの認証だけ失敗する場合は、ブラウザの拡張機能、PAC、企業プロキシ、認証ページのポップアップ制限を確認します。

パッケージ取得で止まる場合は、npm の現在の設定も調べます。npm config get proxynpm config get https-proxy が古いポートや存在しないプロキシを指していないか、環境変数と競合していないかを確認してください。GitHub からの更新だけ遅い場合は、API のルールを変更するのではなく、Clash のログで GitHub、リリース配信、オブジェクトストレージの接続を個別に見ます。

TUN を使う場合は、明示的な環境変数を設定したターミナルと結果が変わるかを比較します。TUN でだけ動くなら、CLI がプロキシ環境変数を読んでいない可能性があります。TUN でだけ動かないなら、仮想インターフェースの権限、DNS モード、他の VPN やセキュリティソフトとの競合を疑います。変更は一度に一項目だけにし、成功した設定を戻せる状態で進めると、原因を見失いにくくなります。

安全に運用するための更新・ログ・バックアップ

CLI と Clash Verge の両方は更新によって設定項目や通信先が変わることがあります。Codex CLI を更新した後に突然接続できなくなった場合は、まず CLI のバージョン、Clash Verge のバージョン、コアのバージョン、使用中プロファイルを記録します。次に、更新前後で接続ログのホストとポリシーが変わったかを確認します。単にノードが不安定になっただけならルールを変更しても改善しないため、別の安定ノードで同じ操作を試す比較も有効です。

YAML を編集する前には、現在動作しているプロファイルを別名で保存します。購読から生成されたファイルへ直接追記すると、次回更新で変更が消えることがあります。自分用のオーバーライド、Merge、またはローカルプロファイルを使える場合は、購読本体と追加ルールを分離してください。設定を分離しておけば、Codex 用のルールだけを無効化して通常のウェブ閲覧へ戻すことも簡単です。

ログは必要な範囲だけ保存し、認証情報を含む行は削除します。障害報告では「発生時刻」「CLI のバージョン」「OS」「Clash のモード」「接続先ホスト」「ルール名」「エラー種別」を並べると、再現条件が伝わりやすくなります。API キーやセッション情報をログへ出力するデバッグオプションは、短時間の検証後に必ず無効化してください。

Codex CLI のターミナル統合は、ブラウザだけで完結する AI サービスより、プロキシ継承、認証コールバック、ストリーミング、GitHub や npm の補助通信まで確認する必要があります。単純なシステムプロキシ設定だけでは足りない場面もありますが、Clash Verge でポート、環境変数、ライブ接続、ルール順を一つずつ照合すれば、問題を「AI が使えない」という曖昧な状態から具体的な通信段階へ分解できます。

既存の GUI 付き VPN クライアントは、システムプロキシの切り替えが簡単でも、ターミナルごとの環境変数や細かなドメイン分流を確認しにくいことがあります。逆に手動の環境変数だけに頼る方法は、シェルやコンテナごとの差分が増え、設定漏れを見つけにくくなります。Clash V.CORE なら、Clash Verge と組み合わせてローカルポート、TUN、接続ログ、ルールグループを一つの運用方針で管理しやすく、Codex CLI のような開発ツールの通信を段階的に検証できます。自分の環境に合うクライアントとコアをこれから整えるなら、対応プラットフォームを確認してダウンロードページへ進んでください

// エディターズ・チョイス

Clash V.CORE — Codex CLI の通信を見える化

Clash Verge と組み合わせて、ログイン、API、パッケージ取得の経路を確認しながら、開発作業に合わせた分流を組み立てられます。

  • Codex CLI 向けの接続ログ確認
  • HTTP・SOCKS ポートの使い分け
  • TUN とシステムプロキシの切り替え
  • ドメイン単位のルール分流
  • 複数プラットフォームでの運用
Clash V.CORE を入手 →