Claude Codeはオフライン環境で使えるか
Claude Codeが完全なオフライン・エアギャップ環境で動かない理由と、最低限必要な4つの通信先をAnthropic公式ドキュメントの記載から示します。
Claude Codeは完全なオフライン環境やエアギャップ環境(インターネットから物理的に切り離されたネットワーク)では動作しません。モデルの応答はすべてAPIへのリクエストとして処理されるため、ネットワーク接続を完全に断つとサインインの時点で先に進めなくなります。
ただし「外向きの通信を許可リストで絞った閉域網」なら話が違います。必須のドメインは4つで、npm・bunで入れる場合だけレジストリが加わります。残りの通信の多くは環境変数や設定で止められます。
Claude Codeがオフラインで動かない理由
Claude Codeは、モデル推論をローカル端末で完結させるツールではなく、入力のたびにAPIへリクエストを送って応答を受け取るCLIです。ネットワークから完全に切り離された環境では、サインインの段階で先へ進めず、それ以上作業を進められません。
中でもapi.anthropic.comはClaude APIへのリクエスト全般を担い、ここが塞がれると中核の処理が失敗します。WebFetchのドメイン安全性チェック(取得前にホスト名をAnthropic側のブロックリストと照合する仕組み)、機能フラグの取得、テレメトリ送信もこのホスト宛てです。
最低限必要な4つの通信先
許可リストに最低限入れるホスト
api.anthropic.com
Claude APIリクエスト全般です。
claude.ai
claude.aiアカウントの認証です。
claude.com
claude.aiのサインインは、ブラウザで
claude.comのページを開き、claude.aiへリダイレクトされる経路をたどります。事前承認済みのWebFetchによるドキュメント参照も、このホストに届きます。platform.claude.com
Anthropic Consoleアカウントの認証です。claude.aiアカウントのOAuthトークンの交換・更新・失効もここを通るため、どちらのサインインでも必要です。
初回セットアップでは、サインイン画面を出す前にapi.anthropic.comとplatform.claude.comへの疎通確認が走ります。各プローブの待ち時間は10秒で、どちらかに届かないと理由を表示して終了します。
Unable to connect to Anthropic services
Failed to connect to api.anthropic.com: ECONNREFUSED
Connection to api.anthropic.com timed out after 10 seconds
A proxy is configured via HTTPS_PROXY. Check that it allows connections to the host above.npmやbunでインストールする場合は、パッケージレジストリのregistry.npmjs.org(または社内ミラー)も必要です。ネイティブインストーラ経由なら、Claude Code本体の入手にこのホストは要りません(プラグインやnpx起動のMCPサーバーが使う場合は別です)。許可するドメインの全一覧と、企業プロキシ配下でのCA証明書・mTLS設定手順はClaude Codeプロキシ設定にまとめています。
4つ以外の通信は何のために出ていて、どう止めるか
必須ホスト以外は、機能ごとに止められます。許可リストを作る前に不要な通信を落としておくと、申請するホストが減ります。
| ホスト | 使われる機能 | 止める手段 |
|---|---|---|
mcp-proxy.anthropic.com | 使われる機能claude.aiのMCPコネクタ | 止める手段ENABLE_CLAUDEAI_MCP_SERVERS=false またはdisableClaudeAiConnectors |
downloads.claude.ai | 使われる機能プラグインの実行ファイル、ネイティブ版の自動更新と版数確認 | 止める手段更新はDISABLE_UPDATES=1 |
storage.googleapis.com | 使われる機能/pluginに出るインストール数など | 止める手段— |
raw.githubusercontent.com | 使われる機能/release-notesの変更履歴 | 止める手段CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC |
| Datadogの2ホスト | 使われる機能運用テレメトリとエラーレポート | 止める手段DISABLE_TELEMETRY / DISABLE_ERROR_REPORTING |
*.frame.claudeusercontent.com | 使われる機能Artifactの内容の読み取り | 止める手段"enableArtifact": false またはCLAUDE_CODE_DISABLE_ARTIFACT=1 |
Datadog宛ての通信は、Anthropic APIを直接使うときだけ発生します。Amazon Bedrock・Google CloudのAgent Platform・Microsoft Foundryでは送られません。
まとめて止めるならCLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICです。自動更新、テレメトリ、エラーレポート、/feedback、リリースノート、PR状況バッジの確認、fast modeの可否チェックが対象になります。settings.jsonに書くなら次の形です。
{
"env": {
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
"DISABLE_UPDATES": "1"
},
"skipWebFetchPreflight": true
}skipWebFetchPreflightは上の変数では止まらず、設定で別に切る必要があります。切ると、ブロックリストを見ないままWebFetchが任意のURLを取りに行くため、WebFetchの権限ルールと併用する設計になります。設定の挙動と切り分けはskipWebFetchPreflightの解説にあります。
NONESSENTIAL_TRAFFICで止まるものと止まらないもの
一緒に止まる
機能フラグの取得も止まります。フラグ取得に依存するRemote Controlなどの機能は使えなくなります。
止まらない
公式プラグインマーケットプレイスの自動登録(CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL=1)、ゲートウェイのモデル一覧取得(別のオプトイン)です。
自動更新まわりは2段階あります。DISABLE_AUTOUPDATER=1はバックグラウンドの更新だけを止め、手動のclaude updateは通ります。claude updateやclaude installも含めて止めるのはDISABLE_UPDATES=1です。自社配布の版に固定したい閉域網では後者を選びます。
閉域網でプラグインを使う場合
プラグインのマーケットプレイスはgitホストから取得するため、閉域網ではバックグラウンドの更新確認が毎セッション失敗します。既存のチェックアウトがあれば使い続けるようCLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1を設定します。一度もクローンしていないマーケットプレイスには効かないので、オンラインの環境で追加しておく必要があります。
外へ出られない環境では、イメージのビルド時にプラグインのディレクトリを作っておく方法があります。
CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin marketplace add your-org/your-marketplace
CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin install code-formatter@your-marketplace実行時はCLAUDE_CODE_PLUGIN_SEED_DIR=/opt/claude-seedを指すと、起動時にシード内のマーケットプレイスを登録し、クローンせずに使います。シード内のプラグインはそれだけでは有効にならないので、enabledPluginsの指定が要ります。ビルド済みのシードは読み取り専用で、自動更新は強制的にオフです。ただし使えるようになるのはプラグインの中身で、モデルへの通信が不要になるわけではありません。
claude --helpの通信・認証まわりの文言(v2.1.287)
v2.1.287のclaude --helpには、通信と認証に関わる文言が2か所あります。
$ claude --version
2.1.287 (Claude Code)
--dangerously-skip-permissions Bypass all permission checks.
Recommended only for sandboxes with no
internet access.
--bare ... Anthropic auth is strictly ANTHROPIC_API_KEY or
apiKeyHelper via --settings (OAuth and keychain are never read).「インターネットのないサンドボックス向け」は、権限確認を飛ばしてよい隔離環境を指す安全面の注意書きです。モデルへの通信が要らないという意味ではないので、隔離したコンテナでこのフラグを使う構成でも、APIへの経路は別に用意します。--bareはフックやプラグイン同期などの自動処理を省くモードで、OAuthとキーチェーンを読みません。このモードでは、Anthropicへの認証は常にAPIキー側になります(Bedrockなどはそれぞれの認証情報を使います)。
一時的な通信断とエアギャップ環境は別物
Wi-Fiが数秒切れる、VPNが瞬断する、といった一時的な通信断は「オフラインで使えない」とは別の話です。接続自体に失敗したときは、原因の種類を括弧に入れて表示します。
Unable to connect to API. Check your internet connection
Connection refused — a firewall or proxy may be blocking it (ConnectionRefused)
Can't reach the API server — check your internet or DNS (ENOTFOUND)
No internet route — check your connection or VPN (EHOSTUNREACH)
Request timed out. Check your internet connection and proxy settings経路が恒久的に存在しないエアギャップ環境では、これらが毎回出ます。再試行しても成功しないので、プロキシ設定の見直しでは解消しません。
応答が返らない場合は別のメッセージです。最初のバイトの期限内にヘッダーが届かないと、リクエストを打ち切って最大1回だけ再送します。既定の期限は直接のAnthropic APIで180秒、Claude Platform on AWSで300秒です。Bedrockではオプトインしたときだけ300秒で働き、Agent PlatformとFoundryでは働きません。ANTHROPIC_BASE_URLのゲートウェイ経由でも働きません。再送にも応答がなければ、待った時間を並べて終了します。
API Error: No response from API (waited 3m, then 10m on the retry). ...1回目の待ち時間はCLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MSで変えられ、設定値は10秒から30分に収まります。再送側の待ちはAPI_TIMEOUT_MSより1秒短い値です。Bedrockでは再送の待ちが1回目と同じになり、時間表示は1つだけです。待ち時間を延ばす意味があるのは、応答を溜めてから返すプロキシが間にある場合です。経路そのものが無い環境では、延ばしても結果は変わりません。
切り分けの順序
通信断なのか許可リストの漏れなのかは、同じシェルから次の順に確かめます。
疎通が取れない原因を切り分ける
- 1
同じシェルからAPIホストへ届くか見る
curl -I https://api.anthropic.comを実行します。Windows PowerShellではInvoke-WebRequestのエイリアスを避けるためcurl.exeを使います。 - 2
curlが通るのにClaude Codeが失敗するなら、残った設定を疑う
echo $ANTHROPIC_BASE_URLで値を見て、設定ファイルのenvブロックも探します。停止済みのローカルプロキシを指す値が残っていると、curlは通るのにConnection refusedになります。 - 3
プロキシ配下なら、プロキシ側の許可を確認する
HTTPS_PROXYを指定して起動します。疎通確認が失敗したときは、メッセージにその変数名が出ます。
なお、管理設定でforceLoginMethodをgatewayにした場合(またはforceLoginGatewayUrlだけを設定した場合)は、この疎通確認が省略されます。サインイン画面が「Cloud gateway」を出すためで、ゲートウェイ自体への到達性は別に必要です。
他のプロバイダー経由に切り替えても解消しない
「社内でAWSやGoogle Cloud経由なら閉域網で完結するのでは」という発想も成り立ちません。Amazon Bedrock、Google CloudのAgent Platform、Microsoft Foundry、またはLLM gatewayを使う構成では、モデルへの通信と認証先がapi.anthropic.com・claude.ai・platform.claude.comからそれぞれのプロバイダーやゲートウェイに変わるだけです。Amazon BedrockでClaudeを使う場合も、AWSのAPIエンドポイントへの到達性は必須です。
self-hosted runnerで自社マシンからクラウドセッションを動かす構成も同様です。Anthropicホスト型のクラウドセッションはAnthropic管理インフラからリポジトリに接続するのに対し、self-hosted環境のセッションは自社ネットワークの内側から接続します(Anthropic git proxyを使うランナーを除く)。変わるのは接続の発信元だけで、Anthropicのエンドポイントへ到達できる前提は変わりません。
Claude DesktopやWebブラウザ版も同じ制約を受けるか
ここまでは、ターミナルから実行するスタンドアロンCLIとしてのClaude Codeの話です。Claude DesktopアプリやWebブラウザのclaude.aiは、アプリコードやアーティファクトの読み込みにassets-proxy.anthropic.comや他の*.claudeusercontent.com系ホストを使います。CLIの一覧には載らないホストで、claude.aiだけを許可してこれらを塞ぐと、エラーではなく白紙のページが出ます。
よくあるつまずき
raw.githubusercontent.comを塞ぐと他の機能まで止まると心配する — 影響は/release-notesと、更新後にキャッシュの変更履歴が古いときのバックグラウンドでの取得に限られますCLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=0で戻したつもりになる —0やfalseでも通信は止まったままです。未設定にします
まとめ
完全なオフライン環境では使えません。閉域網で決めるのは、4ホストを許可リストに入れること、不要な通信をCLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICとDISABLE_UPDATESで落とすこと、WebFetchを使うならskipWebFetchPreflightを設定で別に切ることの3点です。通信を絞れば成立しますが、モデルへの経路そのものは省けません。
つまずいたときは、疎通確認とエラー文言からClaude Codeでよくあるエラー10選の症状別の切り分けに進めます。