0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WindowsでClaude Codeを導入してCrazyrouterに繋ぐまで

0
Posted at

WindowsでClaude Codeを導入してCrazyrouterに繋ぐまで

タグ: ClaudeCode, Windows, API, トラブルシューティング

初めてClaude Code(AIコーディングツール)を入れたとき、私は同じところで詰まりました。バージョン番号は出ているのに、claudeを起動すると403で拒否されるという状態です。

claude --versionは普通に表示されるのに、起動するとapi.anthropic.comへ繋ぎに行って弾かれます。私は最初「バージョンが古いのか」と思い、npmを3回再インストールしました。原因はただ一つ、設定の変数名を一つ間違えていたことでした。

この記事では、導入からCrazyrouter API(第三者経由のAPIゲートウェイ)への接続、そして実際にモデルが返答するまでを順に書きます。

本記事はWindows 10/11とPowerShellを前提とします。文中のYOUR_CRAZYROUTER_API_KEYはすべてプレースホルダーです。ご自身で作成したキーに置き換えてください。

バージョン番号は正常に出るが、起動時はapi.anthropic.comへアクセスして403になる

この図が出発点です。「インストール成功」と「呼び出し成功」は別の検収です。バージョン番号は最初の検収にすぎません。

1. Claude Codeを動くところまで入れる

手順A:公式のネイティブ方式(推奨)

Windows PowerShellで以下を実行します。

irm https://claude.ai/install.ps1 | iex

ドメインがclaude.aiであることを確認してください。この方式はNode.jsの事前インストールを要求しません。終わったら新しいターミナルで確認します。

claude --version

バージョンが出ればコマンドが使えます。もし「コマンドが見つからない」なら、インストーラーが%USERPROFILE%\.local\binをPATHに入れるよう求めているかもしれません。

スクリプトのダウンロードに失敗し、出力にHTMLや<script>、CAPTCHAが混じったらすぐ止めてください。それはインストールスクリプトではありません。

公式インストールスクリプトがHTMLページを返し、iexがそれをコマンドとして実行してJavaScript構文エラーを出している

エラーに<script type="text/javascript">やvarが出るなら、それはWebページをPowerShell構文で解析しようとしている証拠です。

手順B:npm方式(スクリプト失敗時、またはNode.js済み)

Node.js公式からWindows用LTSを入れます。npm方式はNode.js 22以上が必要です。再起動後に確認します。

node --version
npm.cmd --version

両方出れば、以下を実行します。

npm.cmd install -g @anthropic-ai/claude-code

npm.cmdと書くのは、PowerShellが.ps1を優先して実行ポリシーに引っかかるのを避けるためです。その後:

claude.cmd --version

E404が出たら

ネットワークやミラーを疑う前に、エラー内のパッケージ名を一文字ずつ読んでください。

二つのnpmコマンドがくっつき、パッケージ名が存在しないclaude-codenpmになっている

図のパッケージ名は@anthropic-ai/claude-codenpmで、末尾に余計なnpmが付いています。コピー時に二行が繋がったのが原因です。正しい名前は常に@anthropic-ai/claude-codeです。

Gitは必須ではありません。

2. Crazyrouter APIへの接続

Claude Codeだけ入れても、使えるモデル服務を設定しないと何も聞けません。

API Key(アクセスキー)を作る

コンソールでAPIキーを一つ作成します(名前例:claude-code-windows)。Claude Codeが必要なのはここで作るAPI Keyです。

Base URL(APIのルートURL)を間違えない

本記事は東アジア入口https://cn.crazyrouter.comを使います。

用途 アドレス 書く場所
登録・ログイン https://crazyrouter.com ブラウザ
Claude CodeのBase URL https://cn.crazyrouter.com ANTHROPIC_BASE_URL
モデル一覧 https://cn.crazyrouter.com/v1/models 別途確認
Messages API https://cn.crazyrouter.com/v1/messages クライアントが使用

Claude Codeにはルートアドレスを入れ、/v1/messagesは付けません。 OpenAI互換と逆なので注意です。

settings.jsonを書く

パスは%USERPROFILE%\.claude\settings.jsonです。PowerShellで作成します。

New-Item -ItemType Directory -Path "$env:USERPROFILE\.claude" -Force | Out-Null
notepad.exe "$env:USERPROFILE\.claude\settings.json"

中身は以下のようにします(JSONです。PowerShellに直接貼らないでください)。

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://cn.crazyrouter.com",
    "ANTHROPIC_AUTH_TOKEN": "YOUR_CRAZYROUTER_API_KEY"
  }
}

なぜANTHROPIC_API_KEYではなくANTHROPIC_AUTH_TOKENか

これが一番覚えておくべき点です。第三者のAnthropic互換端点にはANTHROPIC_AUTH_TOKENを使います。

変数 実際のリクエストヘッダ 用途
ANTHROPIC_API_KEY x-api-key: <key> Anthropic公式API
ANTHROPIC_AUTH_TOKEN Authorization: Bearer <token> カスタム・互換ゲートウェイ

ANTHROPIC_API_KEYを書くと公式チャネル認証になり、ANTHROPIC_BASE_URLが効かず403になります。私の詰まりはこれでした。

設定を確認する

$settingsPath = Join-Path $env:USERPROFILE '.claude\settings.json'
$ccSettings = Get-Content -Raw -LiteralPath $settingsPath | ConvertFrom-Json
[pscustomobject]@{
    BaseURL = $ccSettings.env.ANTHROPIC_BASE_URL
    HasAuthToken = -not [string]::IsNullOrWhiteSpace(
        [string]$ccSettings.env.ANTHROPIC_AUTH_TOKEN
    )
}

Base URLとHasAuthToken: Trueが見えればOKです(キー有効性は未検証)。

モデル一覧は以下で確認できます。

$crBase = ([string]$ccSettings.env.ANTHROPIC_BASE_URL).TrimEnd('/')
$crHeaders = @{ Authorization = "Bearer $($ccSettings.env.ANTHROPIC_AUTH_TOKEN)" }
$crModels = Invoke-RestMethod -Uri "$crBase/v1/models" -Headers $crHeaders -Method Get -TimeoutSec 30
$crModels.data | Select-Object id

3. 403の原因と対処

私が見たエラーは以下の通りです。

Failed to connect to api.anthropic.com: Status 403

三層に分けて読みます。

  1. Status 403:リクエストは届いて拒否された。ネット不通ならタイムアウトやDNS失敗で、HTTPコードは出ません。
  2. ホスト名がapi.anthropic.com:最重要。Crazyrouterを設定したはずなのに公式ドメインへ向かう=クライアントが設定を認めていない。
  3. バージョン番号が正常だったので、問題は「行き先と認証」にあります。

まずリクエストがどこへ着いたかを確認し、その後で拒否理由を考えてください。

4. 実測記録(2026-09-28)

自環境で実際に取ったデータです。

項目 結果
OS Windows 10
ターミナル Windows PowerShell
Node.js v22.22.2
npm 10.9.7
Claude Code 2.1.281
Base URL https://cn.crazyrouter.com
設定読込 settings.json解析可、ANTHROPIC_AUTH_TOKEN設定済、ANTHROPIC_API_KEYは混在せず
GET /v1/models HTTP 200、161件のモデルID、選択モデルは一覧にあり
POST /v1/messages HTTP 200、内容OK、stop_reasonはend_turn
応答ID msg_011CfVJqbN2DVuqoYqgLcdNE
トークン 入力18、出力4
往復時間(直叩き) 11569 ms
クライアント呼出 exit code 0、is_error=false、subtype=success、返値OK
クライアント時間 5103 ms
セッションID a7a76f08-fa36-4a36-8787-3f2b24dad626

最小検証のリクエストボディは以下です(HTTP本文であり、settings.jsonではありません)。

{
  "model": "claude-fable-5-1",
  "max_tokens": 32,
  "messages": [
    { "role": "user", "content": "Reply with exactly OK." }
  ]
}

モデルIDは/v1/modelsとコンソールで都度ご確認ください(クエリ時点で異なる場合があります)。

5. まとめ

目標を小さく分けましょう。バージョン正常→Crazyrouterアカウントとキー用意→JSON解析可→適合モデル選択→完全な返答→バックエンド記録と一致。 前のステップが通らなければ、そこで止めて対処します。403だからといってnpmを何度も再インストールしないように。

参考文献

免責事項:本記事は個人の経験に基づく共有であり、公式ドキュメントではありません。第三者サービス、モデル名、料金、利用可能なモデルはいつでも変更される可能性があります。最新情報は各公式ページとご自身のコンソールで必ずご確認ください。APIエンドポイントと設定パスは、参照時点の公式ドキュメントに従ってください。本記事にアフィリエイト・報酬・スポンサー内容は含まれません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?