# Claude Code

Source: https://aiand-docs-staging.pages.dev/ja/integrations/claude-code/

[Claude Code](https://claude.com/claude-code) は Anthropic の Messages API と通信します。ai& は Anthropic 互換の `/v1/messages` エンドポイントを公開しているため、[カタログ](/ja/models/catalog/) 内の `tool_calling` 対応モデルであればエージェントループを駆動できます。

<Aside type="note">
  以下の設定では、ai& の 2 つのモデルを Claude Code のスロットに割り当てます: `moonshotai/kimi-k3` を **Opus** と **Sonnet**(主要な処理)に、より安価な `google/gemma-4-31b-it` を **Haiku**(軽量なバックグラウンド処理)に使用します。各行は[カタログ](/ja/models/catalog/)内の別の `tool_calling` 対応モデルに置き換えられます。
</Aside>

設定方法は 2 つあります:

- **[セッション](#セッションこのターミナルのみ)** — 現在のシェルに環境変数を `export` します。ターミナルを閉じると失われます。お試し用。
- **[永続化](#永続化-settingsjson)** — 同じ内容を `settings.json` に書き込みます。セッションをまたいで有効になり、プロジェクト単位または全体に適用できます。

## セッション(このターミナルのみ)

<Tabs syncKey="os">
<TabItem label="macOS / Linux">

**1. Claude Code をインストール**

前提: [Node.js 22 以上](https://nodejs.org/)

```bash
npm install -g @anthropic-ai/claude-code
```

インストール確認 — `claude --version` がバージョン番号を表示すれば成功です:

```bash
claude --version
```

**2. このターミナルで環境変数を設定**

```bash
export ANTHROPIC_BASE_URL="https://api.aiand.com"
export ANTHROPIC_AUTH_TOKEN="sk-your-aiand-api-key"
export ANTHROPIC_API_KEY=""
export ANTHROPIC_DEFAULT_OPUS_MODEL="moonshotai/kimi-k3"
export ANTHROPIC_DEFAULT_SONNET_MODEL="moonshotai/kimi-k3"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="google/gemma-4-31b-it"
export CLAUDE_CODE_SUBAGENT_MODEL="moonshotai/kimi-k3"
```

**3. Claude Code を起動**

```bash
claude
```

</TabItem>
<TabItem label="Windows (PowerShell)">

**1. Claude Code をインストール**

前提:

- [Node.js 22 以上](https://nodejs.org/)
- [Git for Windows](https://git-scm.com/download/win)

```powershell
npm install -g @anthropic-ai/claude-code
```

インストール確認 — `claude --version` がバージョン番号を表示すれば成功です:

```powershell
claude --version
```

**2. このターミナルで環境変数を設定**

```powershell
$env:ANTHROPIC_BASE_URL = "https://api.aiand.com"
$env:ANTHROPIC_AUTH_TOKEN = "sk-your-aiand-api-key"
$env:ANTHROPIC_API_KEY = ""
$env:ANTHROPIC_DEFAULT_OPUS_MODEL = "moonshotai/kimi-k3"
$env:ANTHROPIC_DEFAULT_SONNET_MODEL = "moonshotai/kimi-k3"
$env:ANTHROPIC_DEFAULT_HAIKU_MODEL = "google/gemma-4-31b-it"
$env:CLAUDE_CODE_SUBAGENT_MODEL = "moonshotai/kimi-k3"
```

**3. Claude Code を起動**

```powershell
claude
```

</TabItem>
</Tabs>

## 永続化 (settings.json)

Claude Code は起動時に `settings.json` の設定を読み込みます。同じ `env` ブロックを記述しておけば、以降 export し直す必要はありません:

```json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.aiand.com",
    "ANTHROPIC_AUTH_TOKEN": "sk-your-aiand-api-key",
    "ANTHROPIC_API_KEY": "",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "moonshotai/kimi-k3",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "moonshotai/kimi-k3",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "google/gemma-4-31b-it",
    "CLAUDE_CODE_SUBAGENT_MODEL": "moonshotai/kimi-k3"
  }
}
```

スコープは 2 つ — どちらか一方を選びます:

- **プロジェクト単位 (`.claude/settings.local.json`)** — そのリポジトリで `claude` を起動したときだけ適用されます。このファイルには API キーが平文で保存されるため、下のコマンドはリポジトリの `.gitignore` にもこのファイルを追加します (同じ行がすでにあれば追加しません)。`.gitignore` の変更はコミットしてください。最初に ai& を試すならこちらがおすすめ。
- **全体 (`~/.claude/settings.json`)** — マシン全体に適用されます。Claude Code のすべての利用面が同じ ai& バックエンドを参照するようになります — 任意のターミナルセッションで起動する `claude` CLI、[Claude Code VS Code 拡張](https://code.claude.com/docs/en/vs-code)(拡張と CLI は[このファイルを共有する](https://code.claude.com/docs/en/vs-code#configure-settings)設計です)、**および** Claude Desktop アプリ。ai& をマシン全体のデフォルトにしたい場合はこちら。

以下のコマンドは `env` ブロックを**安全にマージ**します — 既存のキー(`permissions`、`hooks` など)はそのまま保持されます。ステップ 1 で Claude Code を npm からインストールしているため、Node はすでにマシンにあります。実行前に `sk-your-aiand-api-key` を実際のキーに置き換えてください。

### プロジェクト単位 (お試しに最適)

<Tabs syncKey="os">
<TabItem label="macOS / Linux">

プロジェクトのルートで実行します:

```bash
mkdir -p .claude && node -e '
const fs = require("fs"), p = ".claude/settings.local.json";
const d = fs.existsSync(p) ? JSON.parse(fs.readFileSync(p, "utf8")) : {};
d.env = Object.assign(d.env || {}, {
  ANTHROPIC_BASE_URL: "https://api.aiand.com",
  ANTHROPIC_AUTH_TOKEN: "sk-your-aiand-api-key",
  ANTHROPIC_API_KEY: "",
  ANTHROPIC_DEFAULT_OPUS_MODEL: "moonshotai/kimi-k3",
  ANTHROPIC_DEFAULT_SONNET_MODEL: "moonshotai/kimi-k3",
  ANTHROPIC_DEFAULT_HAIKU_MODEL: "google/gemma-4-31b-it",
  CLAUDE_CODE_SUBAGENT_MODEL: "moonshotai/kimi-k3"
});
fs.writeFileSync(p, JSON.stringify(d, null, 2));
const g = ".gitignore", gi = fs.existsSync(g) ? fs.readFileSync(g, "utf8") : "";
if (!gi.split(/\r?\n/).includes(p))
  fs.appendFileSync(g, (gi && !gi.endsWith("\n") ? "\n" : "") + p + "\n");
'
```

</TabItem>
<TabItem label="Windows (PowerShell)">

プロジェクトのルートで実行します:

```powershell
New-Item -ItemType Directory -Force -Path .claude | Out-Null
$script = @'
const fs = require("fs"), p = ".claude/settings.local.json";
const d = fs.existsSync(p) ? JSON.parse(fs.readFileSync(p, "utf8")) : {};
d.env = Object.assign(d.env || {}, {
  ANTHROPIC_BASE_URL: "https://api.aiand.com",
  ANTHROPIC_AUTH_TOKEN: "sk-your-aiand-api-key",
  ANTHROPIC_API_KEY: "",
  ANTHROPIC_DEFAULT_OPUS_MODEL: "moonshotai/kimi-k3",
  ANTHROPIC_DEFAULT_SONNET_MODEL: "moonshotai/kimi-k3",
  ANTHROPIC_DEFAULT_HAIKU_MODEL: "google/gemma-4-31b-it",
  CLAUDE_CODE_SUBAGENT_MODEL: "moonshotai/kimi-k3"
});
fs.writeFileSync(p, JSON.stringify(d, null, 2));
const g = ".gitignore", gi = fs.existsSync(g) ? fs.readFileSync(g, "utf8") : "";
if (!gi.split(/\r?\n/).includes(p))
  fs.appendFileSync(g, (gi && !gi.endsWith("\n") ? "\n" : "") + p + "\n");
'@
node -e $script
```

</TabItem>
</Tabs>

### 全体スコープ (すべてのプロジェクト)

<Tabs syncKey="os">
<TabItem label="macOS / Linux">

```bash
mkdir -p ~/.claude && node -e '
const fs = require("fs"), os = require("os"), path = require("path");
const p = path.join(os.homedir(), ".claude", "settings.json");
const d = fs.existsSync(p) ? JSON.parse(fs.readFileSync(p, "utf8")) : {};
d.env = Object.assign(d.env || {}, {
  ANTHROPIC_BASE_URL: "https://api.aiand.com",
  ANTHROPIC_AUTH_TOKEN: "sk-your-aiand-api-key",
  ANTHROPIC_API_KEY: "",
  ANTHROPIC_DEFAULT_OPUS_MODEL: "moonshotai/kimi-k3",
  ANTHROPIC_DEFAULT_SONNET_MODEL: "moonshotai/kimi-k3",
  ANTHROPIC_DEFAULT_HAIKU_MODEL: "google/gemma-4-31b-it",
  CLAUDE_CODE_SUBAGENT_MODEL: "moonshotai/kimi-k3"
});
fs.writeFileSync(p, JSON.stringify(d, null, 2));
'
```

</TabItem>
<TabItem label="Windows (PowerShell)">

```powershell
New-Item -ItemType Directory -Force -Path $HOME\.claude | Out-Null
$script = @'
const fs = require("fs"), os = require("os"), path = require("path");
const p = path.join(os.homedir(), ".claude", "settings.json");
const d = fs.existsSync(p) ? JSON.parse(fs.readFileSync(p, "utf8")) : {};
d.env = Object.assign(d.env || {}, {
  ANTHROPIC_BASE_URL: "https://api.aiand.com",
  ANTHROPIC_AUTH_TOKEN: "sk-your-aiand-api-key",
  ANTHROPIC_API_KEY: "",
  ANTHROPIC_DEFAULT_OPUS_MODEL: "moonshotai/kimi-k3",
  ANTHROPIC_DEFAULT_SONNET_MODEL: "moonshotai/kimi-k3",
  ANTHROPIC_DEFAULT_HAIKU_MODEL: "google/gemma-4-31b-it",
  CLAUDE_CODE_SUBAGENT_MODEL: "moonshotai/kimi-k3"
});
fs.writeFileSync(p, JSON.stringify(d, null, 2));
'@
node -e $script
```

</TabItem>
</Tabs>

## 動作確認

Claude Code 内で以下を実行します:

```text
/status
```

現在のベース URL とモデルがパネルに表示されます。`https://api.aiand.com` と `moonshotai/kimi-k3` が見えれば成功です。

シェルから直接エンドポイントを叩いて確認することもできます:

<Tabs syncKey="os">
<TabItem label="macOS / Linux">

```bash
curl -sS https://api.aiand.com/v1/models \
  -H "Authorization: Bearer sk-your-aiand-api-key" \
  | grep -o 'moonshotai/kimi-k3'
```

</TabItem>
<TabItem label="Windows (PowerShell)">

```powershell
(Invoke-RestMethod https://api.aiand.com/v1/models `
  -Headers @{ Authorization = "Bearer sk-your-aiand-api-key" }).data.id `
  | Select-String "moonshotai/kimi-k3"
```

</TabItem>
</Tabs>

一致すればキーの認証が通り、モデルが組織で利用可能であることを確認できます。

<Aside type="note">
  既に Anthropic アカウントで Claude Code にログイン済みの場合、`claude` 内で一度 `/logout` を実行してください。キャッシュされた OAuth 認証情報が環境変数 / settings.json の値より優先されるため、知らないうちに ai& ではなく Anthropic にアクセスし続けてしまいます。
</Aside>

## 動作上の注意

- **Effort。** `/effort` と `CLAUDE_CODE_EFFORT_LEVEL` は反映されます。Claude Code はレベルを `output_config.effort` として送信し、ai& はそれをモデルの [`reasoning_effort`](/ja/models/catalog/) として適用します。`none` 以外でモデルの一覧にないレベルは一つ上のレベル(なければ最も高いレベル)で実行されるため(一覧にない `none` は 400)、最上位が `max` のモデルで `/effort xhigh` を指定すると `max` で実行され、コストが上がる場合があります。適用されたレベルは `X-Reasoning-Effort` で返され、各モデルのレベルは `reasoning_efforts` に記載されています。レベルが送信されない場合、ai& は何も指定せずに転送し、モデルは自身のデフォルト(最も高コストなレベルの場合もあります)で動作するため、明示的に設定してください。
- **コンテキスト上限。** 会話がモデルのウィンドウを超えると、ai& は Anthropic 本家と同じ「prompt is too long」の文言で応答するため、Claude Code は自動で圧縮(compact)して再試行します。Claude Code は認識しないモデル名に対して 200K のウィンドウを仮定するため、`context_window` がそれより小さいモデルでは上限に早く達し、この圧縮と再試行に頼ることになります。
- **Thinking。** Claude Code はメインのチャットリクエストで adaptive thinking を要求し、バックグラウンドの呼び出しでは `thinking` を送りません。ai& はモデルの推論を `thinking` ブロックとしてストリーミングで返します。thinking ブロックはレベルを指定しませんが、`thinking: { "type": "disabled" }` は、`none` を公開している名前付きの推論モデルでは推論を無効にし、公開していないモデルでは 400 になります([詳細](/ja/api/messages/#reasoning)、[エラー文](/ja/errors/#reasoning-をオフにする))。それ以外の場合、推論の深さは effort で決まります。
- **WebSearch などのサーバーサイドツール。** Anthropic のサーバーサイドツール(ウェブ検索、ウェブ取得、コード実行)は Anthropic の API 内部で実行されるため、ai& 経由では利用できません。これらを含むリクエストはツール名を示す 400 で拒否されるため、Claude Code の `WebSearch` ツールは捏造された結果ではなくエラーを報告します。代わりに MCP のウェブ検索サーバーを利用してください。
- **スクリーンショット。** ツール結果内の画像(PNG に対する `Read` ツールなど)は、vision 対応モデルではモデルに渡され、テキストのみのモデルでは短いプレースホルダーに置き換えられます。
