Claude Media
Claude Codeのinstall scriptがHTML/403を返す原因と対処

Claude Codeのinstall scriptがHTML/403を返す原因と対処

install.shやinstall.ps1がHTMLページや裸の403を返すのは、地域制限・プロキシ遮断・一時障害のいずれかが原因です。切り分け手順を示します。

install scriptがHTML/403を返すとはどういう状態か

curl -fsSL https://claude.ai/install.sh | bashirm https://claude.ai/install.ps1 | iexを実行したとき、返ってくるべきはインストールスクリプトそのものです。ところが実際にはHTMLページやエラーステータスが返り、シェルがそれを実行しようとして落ちます。bashなら次の形で現れます。

bash: line 1: syntax error near unexpected token `<'
bash: line 1: `<!DOCTYPE html>'

<で始まるのはHTMLの先頭タグで、bashがそれをコマンドとして解釈しようとした結果です。PowerShellではiexがHTML・CSSをそのままパースしようとして、次のような形で崩れます。

iex : At line:1 char:2310
+ ... igin="anonymous"/><script type="text/javascript">!function(o,c){var n ...
Missing argument in parameter list.

文言はPowerShellのバージョンやシステム言語で変わり、Missing expression after unary operator '--'ParserErrorParseExceptionになることもあります。共通しているのは、引用された文字列の中にHTMLタグやCSSが混じっている点です。ここで-OutFile install.ps1のようにファイルへ保存してから実行しようとしても解決しません。保存されるのは同じWebページなので、.ps1という拡張子が付くだけで中身はHTMLのままです。

ルーティングの経路によっては、本文なしの裸の403だけが返ることもあります。

curl: (22) The requested URL returned error: 403

原因は地域制限・プロキシ遮断・一時障害の3系統

これらはすべて、install URLがスクリプトの代わりにHTMLページやエラーステータスを返したという1つの事実の現れ方違いです。原因は主に3つに分かれます。

返ってきたHTMLページに「App unavailable in region」と書かれていれば、地域制限です。Claude Codeが自分の国では提供されていないことを意味し、ネットワーク設定をいじっても解決しません。

本文なしの裸403は、多くは地域制限が原因ですが、企業のプロキシやファイアウォールがダウンロードをブロックしているケースもあります。裸403にはメッセージ本文が付かないため、この1行だけを見ても地域制限とプロキシ遮断のどちらかは断定できません。デフォルトのcurl -fsSL-fオプションによってエラー応答時に本文を捨ててしまうので、切り分けの際は-fを外してcurl -sI(または-v)で応答ヘッダーとボディを直接確認します。サポート対象国にいるのに403が出る場合は、次の到達性診断を先に済ませてから代替インストーラーを試します。

どちらでもない場合は、ネットワークの問題や地域的なルーティング、Anthropic側の一時的な障害が疑われます。ダウンロード自体は始まったのに途中で切れる場合は、原因の系統が異なります。応答の先頭がスクリプトとして始まっている以上、配布元までは到達できているためです。切断はネットワーク経路やプロキシのタイムアウト側の問題で、本記事で扱う「応答そのものがスクリプトになっていない」ケースとは切り分けて考えます。ここで扱うのは、応答そのものがスクリプトになっていないケースです。

まず到達性を診断する

原因を切り分ける前に、インストーラーのダウンロード元に到達できているかを直接確認します。-sIはヘッダーだけを取得するオプションで、本体のHTMLやスクリプトを丸ごとダウンロードしません。install scriptの実行結果を見て推測するより、この1行のほうが速く確実です。

curl -sI https://downloads.claude.ai/claude-code-releases/latest

Windows PowerShellではcurlInvoke-WebRequestのエイリアスになっており-sIを受け付けないため、curl.exeを明示的に呼びます。

curl.exe -sI https://downloads.claude.ai/claude-code-releases/latest

返ってきた1行目の意味は次のとおりです。

応答意味
HTTP/2 200(macOS/Linux)・HTTP/1.1 200 OK(Windows付属curl)意味サーバーに到達している。元の失敗は一時的だった可能性が高く、インストールコマンドを再試行する
403意味プロキシやネットワークフィルターがホストをブロックしているか、地域制限の対象。サポート対象国にいるならプロキシ側を疑う
5xx意味一時的なサービス障害。数分待って再試行する
応答なし・Could not resolve host・タイムアウト意味ネットワークが接続そのものをブロックしている。社内ファイアウォールやプロキシ、地域的なネットワーク制限を確認する

社内ファイアウォールで許可リストを組む場合、downloads.claude.aiはネイティブインストーラー本体・自動更新・バージョンチェックに加えて、プラグイン実行ファイルの取得にも使われる通信先です。npmやbunでインストールする場合はこのホストへの到達性は不要になる代わりにregistry.npmjs.orgへの到達性が必要になるため、インストール方式によって許可すべきホストが変わる点に注意します。

プロキシ配下での注意点

install scriptを実行する段階では、まだClaude Code自体はインストールされていません。この時点でHTTP通信を行っているのはcurlやPowerShellのInvoke-RestMethodであり、Claude Code本体の設定ファイルではなく、シェルの環境変数HTTPS_PROXYHTTP_PROXYをそのまま使います。Claude Codeはhttps_proxyHTTPS_PROXYhttp_proxyHTTP_PROXYの順で最初に設定された値を使い、SOCKSプロキシには対応していません。install script実行前にプロキシ変数を設定してから同じコマンドを再実行します。SOCKSプロキシしか使えない環境では、この方式は使えないため、HTTP/HTTPSプロキシを経由できる別のネットワークかVPNを用意する必要があります。

export HTTPS_PROXY=http://proxy.example.com:8080
export HTTP_PROXY=http://proxy.example.com:8080
curl -fsSL https://claude.ai/install.sh | bash

社内プロキシがTLS検査を行う場合は証明書検証で別のエラーになります。CA証明書の指定方法とインストール後のNODE_EXTRA_CA_CERTS設定はClaude Codeプロキシ設定ガイドにまとめています。install script実行時点ではこの環境変数はまだ意味を持たないため、TLS検査由来のエラーはインストール完了後にあらためて対処します。

切り分けが終わったら

到達性診断の結果に応じて、対処は次のように分かれます。

  • 200が返るのに元のコマンドは失敗した: 一時的な問題だった可能性が高いので、そのままインストールコマンドを再試行します。
  • プロキシ・ファイアウォールが原因: 上記のプロキシ変数を設定するか、ネットワーク管理者にdownloads.claude.aiの許可を依頼します。
  • 地域制限: ネットワーク設定では解決しません。プロキシ変数の設定や許可リストへの追加を試しても、応答が変わらないことを確認してから次の対処に進みます。
  • どちらとも判断がつかない、または急いでいる: macOSならHomebrew、WindowsならWinGetの代替インストーラーに切り替えます。どちらもdownloads.claude.aiとは別経路で配布されます。
brew install --cask claude-code
winget install Anthropic.ClaudeCode

インストール後はclaude --versionでバージョン番号が表示されることを確認します。同じ端末のままclaudeが見つからないと出た場合は、新しいターミナルウィンドウを開いて再確認します。インストール時のセッションは古いPATHを保持したままのことがあるためです。

よくあるつまずき

  • -OutFileで保存しても解決しない: 保存されるのは受け取ったのと同じHTMLファイルです。拡張子が.ps1になっているだけで中身は変わらないため、保存してから実行し直しても同じエラーになります。
  • 一時的な403を恒久的な遮断だと決めつける: 到達性診断をせずにいきなりプロキシ設定を変更したり、ファイアウォール管理者に問い合わせたりすると、実は数分後に自然回復した一時障害だったというケースを見逃します。まずcurl -sIで状態を確認し、403の直後に何度か再試行して応答が変わらないかを見てから動きます。
  • PowerShellのエラー文言だけを見て別問題と誤診断する: バージョンやシステム言語によってMissing expression after unary operatorParserErrorなど表記が変わりますが、引用文中にHTMLタグやCSSが含まれていれば原因は同じです。

まとめ

install scriptがHTML/403を返す症状は、地域制限・プロキシ/ファイアウォール遮断・一時障害のいずれかに必ず分類できます。curl -sI https://downloads.claude.ai/claude-code-releases/latestで到達性を先に確認し、200が返るなら再試行、403やタイムアウトならプロキシ設定と許可リストを見直します。急ぎならHomebrewやWinGetの代替インストーラーに切り替えるのが最短です。ここに挙げていないcommand not foundや権限エラーなど別の症状は、Claude Codeインストールエラーの切り分けチェックリストに症状別の一覧があります。

よくある質問

npmやbunでインストールする場合も同じ原因で失敗しますか

いいえ。npm・bunインストールはdownloads.claude.aiではなくregistry.npmjs.orgと通信するため、原因の切り分けも許可リストの対象ホストも別になります。downloads.claude.aiへの到達性診断はネイティブインストーラー・自動更新の経路にだけ関係します。

VS Code拡張版のインストールでもこのエラーは出ますか

VS Code拡張は拡張機能ディレクトリの中に独自のCLIコピーを同梱する形で配布され、downloads.claude.aiからの取得とは別経路です。本記事の症状はターミナルからの単体インストールに固有です。

HomebrewやWinGetに切り替えれば地域制限も回避できますか

回避できません。配布経路が変わるだけで、アカウント側の地域判定は変わらないためです。地域制限が原因と確認できた場合、インストール方法を変えても解消しない点に注意します。

数分待って再試行する目安はどれくらいですか

明確な基準は公式に示されていませんが、一時的なサービス障害が原因の場合は数分程度で解消することが多いとされています。診断で5xxが返った場合はこのケースに該当し、再試行の前にネットワーク側の設定変更は不要です。

CI/Dockerのビルド環境でこのエラーが出た場合の対処は変わりますか

原因の切り分け方自体は同じですが、CI環境はコンテナ内からのネットワークアクセスが個別に制限されていることが多いため、curl -sI診断もそのCI環境の実行コンテキスト内で行う必要があります。ホストマシンから到達できてもコンテナからは到達できない構成はよくあるので、切り分けの実行場所を混同しないようにします。イメージのビルドステップと実行時コンテナでネットワーク設定が異なる構成もあるため、両方で診断コマンドを流しておくと切り分けが速くなります。

この記事を共有:XはてブLinkedIn