# Claude Codeで画像生成する方法：SVG描画と画像APIの選び方

> Claude Code自体は画像を出力しません。図解や文字入りカバーはコードで描画し、写真やイラストはスクリプトかMCPサーバーから画像モデルを呼びます。

- URL: https://blog.laozhang.ai/ja/posts/claude-code-image-generation
- Published: 2026-10-02
- Updated: 2026-10-02
- Author: LaoZhang AI Team (https://blog.laozhang.ai/ja/about)
- Category: Claude Code
- Tags: Claude Code, 画像生成, Skills, MCP, GPT Image 2.5, Gemini API, SVG

---
Claude Codeで画像を作る経路は2つしかありません。Claudeが書いて実行するコードで描画するか、スクリプトやMCPサーバーを通して外部の画像モデルを呼ぶかです。Claude自身はどのモデル、どのプランでも画像を出力しません。Anthropicのヘルプセンターは「Claudeは画像生成ツールのように写真やイラストを生成しない」と説明し、APIドキュメントもClaudeを画像を理解するだけのモデルと位置づけています（[Can Claude produce images?](https://support.claude.com/en/articles/9002504-can-claude-produce-images)、[Vision](https://platform.claude.com/docs/en/build-with-claude/vision)）。

つまり、ターミナルで「ヒーロー画像を作って」と頼んだときにピクセルを作るのは、Claudeが実行したプログラムか、別の会社の画像モデルです。どちらを使うかは、欲しい画像の種類でほぼ決まります。

- 図解、グラフ、アイコン、文字入りのカバー画像は、ClaudeにSVGやHTMLを書かせてPNGに変換します。APIキーも追加料金も要りません。
- 写真やイラストは画像モデルが必要です。APIを呼ぶスクリプトをスキルにまとめるか、画像モデルを提供するMCPサーバーを追加します。

以下の料金、モデルID、Claude Codeの挙動は2026年10月2日時点の各社公式ドキュメントに基づきます。チャットアプリのClaudeで画像を作れるかどうかは別の話なので、そちらは[Claudeは画像を生成できる？Claudeの視覚機能完全ガイド（2026年版）](https://blog.laozhang.ai/ja/posts/can-claude-generate-images)を参照してください。

## 経路の選び方：画像の種類と使える課金で決める

最初に見るのは画像の種類、次に有料APIを有効にできるかどうか、最後に個人で使うのかリポジトリでチームに配るのかです。

| 状況 | 向いている経路 | 画像を作るもの | 追加の費用 |
| --- | --- | --- | --- |
| 図解、グラフ、文字入りカバー | SVGを書かせてPNGやWebPに変換 | Claudeが書いたコード | なし |
| 写真、イラスト。OpenAIのAPIを使える | スクリプトをスキルにする | `gpt-image-2.5-flare`など | トークン課金 |
| 写真、イラスト。Gemini APIの課金を有効にできる | スクリプトをスキルにする | `gemini-3.1-flash-lite-image`など | 最安の`gemini-3.1-flash-lite-image`が1Kで1枚$0.0336 |
| 課金を有効にせず少量だけ試したい | Hugging FaceのMCPサーバー、またはCloudflare Workers AI | FLUXなどのオープンモデル | 1日あたりの枠の範囲内 |
| 多数のモデルを切り替えて試したい | fal.aiやReplicateのMCPサーバー | 各プラットフォームのモデル | 実行したモデルの料金 |

![画像の種類と使える課金から、SVGのコード描画、スクリプトのスキル、MCPサーバーのどれを選ぶかを示す分岐図](https://blog.laozhang.ai/posts/ja/claude-code-image-generation/img/route-picker.webp)

スクリプトとMCPサーバーの違いは、主にファイルの保存先と共有のしやすさに出ます。スクリプトは`--out`で指定した場所、たとえばプロジェクトの`assets/`に直接書き出します。`.claude/skills/`に置けばリポジトリと一緒にチームへ配れて、キーは各自の環境変数に残ります。MCPサーバーは追加コマンド1行で済む反面、返ってきた画像はプロジェクトの外に保存され、キーの保存方法もサーバーごとに違います。

## 図解と文字入りカバー：SVGを書かせてPNGに変換する

図解や文字が主役の画像は、画像モデルを呼ばないほうが確実です。SVGは座標と文字列でできているので、文字が崩れず、寸法が正確で、「この箱を左に40px」といった修正がそのまま差分になります。

このブログの記事画像はこの方法で作られています。Claude Codeの中でClaudeがSVGを書き、`rsvg-convert`が指定サイズのPNGにレンダリングし、`cwebp`がWebPに変換します。カバーは2400×1350、本文画像は2000×1125で、2026年10月2日に公開した別の記事では18枚のWebPがそれぞれ136KB〜192KBに収まりました。前日の小さな計測では、911バイトの手書きSVGが135ミリ秒で1600×600のPNGになっています。1台のマシンでの記録ですが、待ち時間も費用もほぼゼロという規模感はつかめます。

Claude Codeへの頼み方は具体的なほど結果が安定します。

```text
docs/architecture.svg を作ってください。2000×1125、背景は白。
左から「ブラウザ」「API」「DB」の3つの箱を矢印でつなぎ、日本語のラベルを入れてください。
書けたら rsvg-convert で PNG にして、その PNG を自分で読んで文字のはみ出しを確認してください。
```

変換は次の2行です。`rsvg-convert`はlibrsvg、`cwebp`はWebPのコマンドラインツールに含まれます。

```bash
rsvg-convert -w 2000 -h 1125 docs/architecture.svg -o docs/architecture.png
cwebp -q 85 docs/architecture.png -o docs/architecture.webp
```

Anthropicが公開している`anthropics/skills`リポジトリの画像系スキルも同じ考え方です。`canvas-design`、`algorithmic-art`、`slack-gif-creator`はいずれもコードで描画し、画像モデルは呼びません。

限界ははっきりしています。この経路では新しい写真やイラストは作れません。人物、質感のある背景、手描き風の挿絵が必要になったら、次の経路に切り替えてください。

## 写真とイラスト：generate.pyで画像APIを呼ぶ

写真やイラストは、画像APIを1回呼んでファイルに保存する小さなスクリプトを用意し、Claude Codeにそれを実行させます。下の`generate.py`はPythonの標準ライブラリだけで動き、OpenAIの`/v1/images/generations`にPOSTして、返ってきたbase64をデコードして保存します。

```python
#!/usr/bin/env python3
"""Generate one image with the OpenAI Images API and save it to disk.

Standard library only. Reads the key from OPENAI_API_KEY; never prints it.
"""
import argparse
import base64
import json
import os
import pathlib
import sys
import urllib.error
import urllib.request

MODELS = ("gpt-image-2.5-flare", "gpt-image-2.5-sunburst")


def main() -> int:
    parser = argparse.ArgumentParser()
    parser.add_argument("--prompt", required=True)
    parser.add_argument("--out", required=True, help="output file, e.g. assets/hero.png")
    parser.add_argument("--model", default="gpt-image-2.5-flare", choices=MODELS)
    parser.add_argument("--size", default="1536x1024")
    parser.add_argument("--quality", default="low")
    args = parser.parse_args()

    key = os.environ.get("OPENAI_API_KEY")
    if not key:
        print("OPENAI_API_KEY is not set. Export it in the shell before starting claude.", file=sys.stderr)
        return 2

    out = pathlib.Path(args.out)
    if out.exists():
        print(f"{out} already exists. Choose another --out so nothing is overwritten.", file=sys.stderr)
        return 2

    base = os.environ.get("OPENAI_BASE_URL", "https://api.openai.com/v1").rstrip("/")
    body = json.dumps({
        "model": args.model,
        "prompt": args.prompt,
        "size": args.size,
        "quality": args.quality,
    }).encode()
    request = urllib.request.Request(
        f"{base}/images/generations",
        data=body,
        headers={"Authorization": f"Bearer {key}", "Content-Type": "application/json"},
    )
    try:
        with urllib.request.urlopen(request, timeout=300) as response:
            payload = json.load(response)
    except urllib.error.HTTPError as error:
        print(f"HTTP {error.code}: {error.read().decode(errors='replace')[:600]}", file=sys.stderr)
        return 1
    except urllib.error.URLError as error:
        print(f"Request failed: {error.reason}", file=sys.stderr)
        return 1

    out.parent.mkdir(parents=True, exist_ok=True)
    out.write_bytes(base64.b64decode(payload["data"][0]["b64_json"]))
    print(json.dumps({"saved": str(out), "bytes": out.stat().st_size, "usage": payload.get("usage")}))
    return 0


if __name__ == "__main__":
    sys.exit(main())
```

このスクリプトで2026年10月2日に確かめられているのは、拒否される経路だけです。実際のキーで画像を生成した記録はありません。

| 条件 | 結果 |
| --- | --- |
| `OPENAI_API_KEY`が未設定 | メッセージを出して終了コード2。通信は発生しない |
| 偽のキー | リクエストはapi.openai.comに届き、HTTP 401 `invalid_api_key`。終了コード1、ファイルは作られない |
| 許可リストにないモデル、例`--model dall-e-3` | argparseが`invalid choice`で止める |
| `--out`が既存ファイル | 終了コード2。上書きも通信もしない |

成功時の`usage`の形、1枚あたりの費用、既定値の`1536x1024`と`low`が手元のアカウントで通るか、所要時間は未確認です。既定値はOpenAIの[画像生成ガイド](https://developers.openai.com/api/docs/guides/image-generation)に載っている値に合わせてあります。同ガイドによると、推奨サイズは`1024x1024`、`1536x1024`、`1024x1536`、品質は`low`から`max`までと`auto`で、複雑なプロンプトは2分ほどかかることがあります。タイムアウトを300秒にしているのはそのためです。

モデルは2つです。`gpt-image-2.5-flare`は速度重視の普段使い、`gpt-image-2.5-sunburst`は編集の精度が必要なとき向けです。スクリプトがモデルを許可リストで絞っているのは、Claudeが気を利かせて古いモデル名や存在しないIDを渡すのを防ぐためです。

OpenAI側には利用条件が1つあります。GPT Imageモデルを使う前に[API Organization Verification](https://help.openai.com/en/articles/10910291-api-organization-verification)が求められる場合があり、対応国の政府発行の身分証が必要で、1人が認証できる組織は1つだけです。キーが正しいのにGPT Imageモデルだけ使えない場合は、まずここを確認してください。

Gemini APIのNano Bananaで同じことをする場合は、エンドポイントと応答の形が違うので別のスクリプトになります。スキルのフォルダ構成からスクリプトまでは[Claude CodeでNano Bananaを動かす設定](https://blog.laozhang.ai/ja/posts/nano-banana-claude-code)にまとまっています。

## generate.pyをスキルにして/imageで呼び出す

スクリプトをスキルにすると、「画像を作って」と頼むだけでClaudeが正しい引数で実行するようになります。プロジェクト用なら`.claude/skills/image/`、個人用なら`~/.claude/skills/image/`に次の2ファイルを置きます。

```text
.claude/skills/image/
├── SKILL.md
└── scripts/
    └── generate.py
```

```markdown
---
name: image
description: 写真やイラストなどのラスター画像をOpenAIの画像APIで生成してファイルに保存する。ユーザーが写真・イラスト・ヒーロー画像の生成を頼んだときに使う。図解やグラフには使わない。
allowed-tools: Bash(python3 ${CLAUDE_SKILL_DIR}/scripts/generate.py *)
---

次のコマンドで画像を1枚生成する。

python3 ${CLAUDE_SKILL_DIR}/scripts/generate.py --prompt "英語のプロンプト" --out assets/NAME.png

- 既定は gpt-image-2.5-flare、1536x1024、quality low。変更はユーザーが指示したときだけ。
- 1回の依頼で実行するのは1回。再生成する前にユーザーに確認する。
- 終了後、出力されたJSONの saved と usage をそのまま報告する。
```

`description`は、Claudeがこのスキルを使うかどうかを判断する材料です。「図解には使わない」と書いておくと、SVGで済む依頼に有料APIを使う事故が減ります。手動で呼ぶなら`/image`と入力します。

`allowed-tools`の書き方は、公式ドキュメントの例`Bash(${CLAUDE_SKILL_DIR}/scripts/render.sh *)`を`python3`での実行に合わせたものです。`${CLAUDE_SKILL_DIR}`はスキル本文と`allowed-tools`のBashルールの両方で展開されるので、本文のコマンドとルールが一致し、確認なしで実行されます（[Skills](https://code.claude.com/docs/en/skills)）。

スキルの追加や編集は、実行中のセッションにそのまま反映されます。例外は、セッション開始時に最上位の`skills`ディレクトリ自体が存在しなかった場合で、そのときは`/reload-skills`を実行します。なお、個人用スキルはCoworkやクラウドのセッションには届きません。ほかにどんなスキルを入れておくと便利かは[Claude Codeで最初に使うべきSkills 2026年版：ワークフロー別の公式スターター](https://blog.laozhang.ai/ja/posts/claude-code-best-skills)が参考になります。

## MCPサーバーで画像モデルをつなぐ：Hugging Face・fal.ai・Replicate

スクリプトを書かずに試したいなら、画像モデルを提供するMCPサーバーを追加します。次のコマンドは各社の公式ドキュメントに載っている形のままで、どれも1行です。

Hugging Faceは公式MCPサーバーのREADMEにClaude Code用の手順があります。zshでは`?`が展開されないよう、URLを引用符で囲んでください。

```bash
claude mcp add hf-mcp-server -t http "https://huggingface.co/mcp?login"
```

追加後に`claude`を起動して認証を済ませます。画像生成は、huggingface.co/settings/mcpで追加したSpaces経由で動きます。Hugging Faceの例にはFLUXやQwenの画像Spacesが挙がっています（[hf-mcp-server](https://github.com/huggingface/hf-mcp-server)）。

fal.aiはホスト型のMCPサーバーです。サーバー自体は無料で、支払うのは実行したモデルの料金だけです（[fal MCP](https://docs.fal.ai/model-apis/mcp)）。

```bash
claude mcp add --transport http fal-ai https://mcp.fal.ai/mcp --header "Authorization: Bearer YOUR_FAL_KEY"
```

Replicateも公式のホスト型MCPサーバーを用意しています（[Replicate MCP](https://replicate.com/docs/reference/mcp)）。

```bash
claude mcp add replicate https://mcp.replicate.com/sse --transport sse --scope user
```

追加後に`/mcp`で認証します。`claude mcp list`で接続状態を確認できます。

使う前に知っておきたい点が3つあります。

1つ目はファイルの保存先です。MCPツールがPNG、JPEG、GIF、WebPを返すと、Claudeは画像をその場で見られ、Claude Codeは元のバイト列を`~/.claude/projects/`以下にあるセッションの`tool-results`ディレクトリに保存してパスをClaudeに渡します。これにはClaude Code v2.1.283以降が必要です（[MCP](https://code.claude.com/docs/en/mcp)）。保存先はプロジェクトの外なので、「そのファイルを`public/images/`にコピーして」と続けて頼む必要があります。各サーバーが画像そのものを返すのかURLを返すのかは、サーバーごとの仕様で決まります。

2つ目は出力の上限です。MCPツールの出力は既定で25,000トークンまでで、10,000トークンを超えると警告が出ます。画像を返すツールもこの上限の対象で、足りないときの手段は環境変数`MAX_MCP_OUTPUT_TOKENS`を上げることだけです。

3つ目はキーと接続方式です。falのコマンドはキーを設定ファイルに平文で書き込みます。`claude mcp add --env KEY=value`も同じく値をそのまま保存します。リポジトリで共有する`.mcp.json`では`${VAR}`の形で環境変数を参照できるので、共有する場合はそちらを使ってください。Replicateのコマンドが使うSSEは、Claude Codeのドキュメントでは非推奨とされている方式です。

claude.aiのコネクタ一覧にもAdobe、Canva、Hugging Faceといった画像関連のコネクタがありますが、どれもパートナー製で、Anthropic自身が提供する画像モデルのコネクタやスキルはありません。また、コネクタがClaude Codeに現れるのはclaude.aiアカウントでログインしているときだけで、`ANTHROPIC_API_KEY`でログインしている場合は使えません。

## 1枚いくらか：Geminiは$0.0336から、OpenAIはトークン課金

費用の数え方は経路ごとに違います。1枚単位で読めるのはGemini、トークンで読むのがOpenAI、1日の枠で考えるのがCloudflareとHugging Faceです。

| 経路 | 課金の単位 | 2026年10月2日時点の料金 | 無料で使える範囲 |
| --- | --- | --- | --- |
| SVGをコードで描画 | なし | 追加料金なし | ローカル処理のため枠の概念なし |
| Gemini `gemini-3.1-flash-lite-image` | 1枚 | 1Kで$0.0336 | なし。課金の有効化が必須 |
| Gemini `gemini-3.1-flash-image` | 1枚 | 0.5Kで$0.045、1Kで$0.067、2Kで$0.101、4Kで$0.151 | なし |
| Gemini `gemini-3-pro-image` | 1枚 | 1K・2Kで$0.134、4Kで$0.24 | なし |
| OpenAI `gpt-image-2.5-flare` / `sunburst` | トークン | 画像出力100万トークン$30、画像入力$8、テキスト入力$5 | なし |
| Cloudflare Workers AI `flux-1-schnell` | Neurons | 1,000 Neuronsあたり$0.011 | 1日10,000 Neurons |
| Hugging Face ZeroGPU | GPU時間 | PROで1日40分 | 無料アカウントで1日5分、未ログインで2分 |

![経路ごとの課金単位の比較と、Cloudflare Workers AIの無料枠が1日およそ173枚になる計算の流れ](https://blog.laozhang.ai/posts/ja/claude-code-image-generation/img/billing-units.webp)

Geminiの3モデルはいずれも無料枠が「Not available」で、課金を有効にしたキーが必要です。バッチ処理はおおむね半額、出力にはすべてSynthIDの透かしが入ります（[Gemini APIの料金](https://ai.google.dev/gemini-api/docs/pricing)）。100枚の挿絵を`gemini-3.1-flash-image`の1Kで作るなら、100×$0.067で$6.70です。

OpenAIには公式の「1枚いくら」がありません。2つの2.5モデルは同じトークン単価で、1枚に何トークンかかるかはサイズと品質で変わります（[OpenAIの料金](https://developers.openai.com/api/docs/pricing)）。`generate.py`がレスポンスの`usage`をそのまま出力するのは、実際の消費をその場で読めるようにするためです。出力トークン数に$30÷1,000,000を掛ければ、その1枚の画像出力分の金額になります。サイズと品質ごとの目安は[GPT Image 2.5 Sunburstの料金：公式単価と1回$0.03のAPIを比較](https://blog.laozhang.ai/ja/posts/gpt-image-2-5-api-pricing)で整理されています。Tier 1のレート制限は1分あたり5枚です。

Cloudflareの枠は計算で見積もれます。`@cf/black-forest-labs/flux-1-schnell`は512×512のタイル1枚につき4.80 Neurons、1ステップにつき9.60 Neuronsで、ステップ数は既定4、最大8です。1024×1024をタイル4枚と数えると、4ステップでは4×4.80＋4×9.60＝57.6 Neurons。10,000÷57.6で、1日およそ173枚が無料枠に収まる計算です。これは料金表からの見積もりで、同じアカウントがほかの用途でNeuronsを使っていない場合に限ります。枠は毎日00:00 UTCにリセットされ、超えるとリクエストは失敗します。枠を超えて使うにはWorkers Paidが必要です（[Workers AIの料金](https://developers.cloudflare.com/workers-ai/platform/pricing/)）。公式の呼び出しは次の形で、返ってくるのはbase64のJPEGです。

```bash
curl https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/run/@cf/black-forest-labs/flux-1-schnell \
  -X POST \
  -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  -d '{ "prompt": "cyberpunk cat" }'
```

Hugging FaceのZeroGPUは枚数ではなくGPU時間の枠で、最初に使ってから24時間後にリセットされます（[ZeroGPU](https://huggingface.co/docs/hub/spaces-zerogpu)）。「無料で画像生成」と紹介される方法の実体は、こうした1日あたりの小さな枠です。試作には足りますが、数百枚を回す用途には向きません。

1回あたりの固定料金で予算を組みたい場合や、OpenAIの組織認証やGemini APIの課金設定が難しい場合には、第三者のAPIサービスという選択肢もあります。[laozhang.ai](https://docs.laozhang.ai/en/api-capabilities/gpt-image-2-5)はこのブログの運営元のサービスで、OpenAIの画像API互換のエンドポイントで`gpt-image-2.5-flare-vip`と`gpt-image-2.5-sunburst-vip`を1回$0.03（2026年9月12日時点の同社公開料金）で提供しています。OpenAIやGoogleではないので、両社の利用規約、データの取り扱い、SLAは適用されません。`generate.py`で使うには、`MODELS`に`-vip`付きのIDを追加し、`OPENAI_BASE_URL`を`https://api2.laozhang.ai/v1`に設定する変更が必要で、この組み合わせでの生成は未確認です。

## APIキーの置き場所と、自動承認が有料呼び出しになる条件

キーはシェルの環境変数に置き、プロンプトには貼りません。Claude Codeは起動時にシェルの環境変数を読むので、`export OPENAI_API_KEY=...`を済ませてから`claude`を起動します。キーを替えたら再起動が必要です。設定ファイルの`env`キーでセッションごとに渡す方法もあります（[Settings](https://code.claude.com/docs/en/settings)）。プロンプトに貼ったキーは会話の履歴に残るので、避けたほうが安全です。

キーを`.env`に置いている場合は、Claudeが読めないようにしておきます。公式ドキュメントも、キーを含むファイルには`permissions.deny`を勧めています。

```json
{
  "permissions": {
    "deny": ["Read(./.env)"]
  }
}
```

次に、確認なしで実行される範囲です。ここは2段階あります。

スキルの`allowed-tools`が効くのは、そのスキルを呼び出したターンだけです。次のメッセージを送ると解除され、再びスキルを呼ぶとそのターンだけ有効になります。つまり「画像を作って」と頼むたびに1回分の許可が出る形で、頼んでいないのに走り続けることはありません。

一方、Bashの確認画面で「Yes, and don't ask again」を選ぶと、`.claude/settings.local.json`にallowルールが書き込まれます。自分で`permissions.allow`に`Bash(python3 .claude/skills/image/scripts/generate.py *)`のようなルールを書いた場合も同じで、以後はセッション全体で確認なしに実行されます。これは、Claudeが「もう少し良くできる」と判断して再生成するたびに、誰も見ていないところで課金が発生するということです。長いタスクを任せて席を離れるなら、allowルールには入れず、スキルの本文に「1回の依頼で実行は1回」と書いておくほうが安全です。なお、Bashの引数を制約するルールは壊れやすいと公式ドキュメントが注意しています（[Permissions](https://code.claude.com/docs/en/permissions)）。

チームのリポジトリを開くときは、逆の立場の注意も必要です。プロジェクトスキルの`allowed-tools`は、ワークスペースを信頼したかどうかに関係なく適用されます。他人のリポジトリでClaude Codeを動かす前に、`.claude/skills/`の`allowed-tools`に何が書かれているかを確認してください。

## 生成した画像をClaudeに読ませて直すときの注意点

Claude Codeは生成したファイルを自分で見られるので、「作る、見る、直す」を1つのセッションで回せます。ReadツールはPNGやJPGを画像として返し、Claudeは構図や文字のはみ出しを確認できます。手元の画像を見せたいときは、ドラッグ＆ドロップ、Ctrl+V（WindowsとWSLではAlt+V）での貼り付け、ファイルパスの指定が使えます（[Tools reference](https://code.claude.com/docs/en/tools-reference)）。

ただし、Claudeが見ているのは元のファイルそのものではありません。大きな画像は縮小・再圧縮され、v2.1.196以降は縮小後も500KBを超える画像が低画質のJPEGに再エンコードされます。細かい文字や境界のにじみを確認させたいときは、公式ドキュメントが勧めるとおり、該当部分を切り出した画像を読ませてください。

この確認はSVGの経路で特に効きます。直すのは座標や文字サイズなので、何度やり直しても費用がかかりません。画像モデルの経路では、やり直しのたびに1回分の料金がかかるので、再生成の前に確認を挟む運用が向いています。

## エラーと行き詰まり：症状ごとに経路を変えるタイミング

よく出る症状と、次に取る行動をまとめます。

| 症状 | 原因 | 対応 |
| --- | --- | --- |
| `OPENAI_API_KEY is not set` | `claude`の起動後にexportした、または別のシェルで設定した | exportしてからClaude Codeを再起動 |
| HTTP 401 `invalid_api_key` | キーの誤り | キーを確認。`OPENAI_BASE_URL`を変えている場合は、そのサービスのキーか確認 |
| キーは正しいのにGPT Imageモデルが使えない | 組織認証が未完了の可能性 | OpenAIの組織設定で認証。できない場合はGeminiかオープンモデルの経路へ |
| `gemini-2.5-flash-image`や旧preview IDでエラー | 提供終了。`gemini-2.5-flash-image`は2026年10月2日に終了 | `gemini-3.1-flash-image`などGA版のIDに変更 |
| Geminiのキーで画像モデルだけ使えない | 画像モデルに無料枠がない | 課金を有効にする |
| Cloudflareのリクエストが突然失敗する | 1日10,000 Neuronsの枠を超過 | 00:00 UTCのリセットを待つか、Workers Paidへ |
| MCPで生成したはずの画像がプロジェクトにない | 保存先が`~/.claude/projects/`以下の`tool-results` | Claudeにコピーを頼む。v2.1.283未満なら更新 |
| MCPツールの出力で上限の警告が出る | 警告は10,000トークン超、上限は既定25,000トークン | `MAX_MCP_OUTPUT_TOKENS`を上げる |

Geminiの提供終了日は[Deprecations](https://ai.google.dev/gemini-api/docs/deprecations)に載っています。旧preview IDは2026年6月25日、Imagen 4のIDは8月17日に終了しているので、古い手順をコピーするとここで止まります。

経路を変える目安は単純です。文字や寸法の正確さで困ったらコード描画へ、写実性で困ったら画像モデルへ、無料枠の上限に当たったら課金のあるAPIへ、費用が読めなくなったら1枚単位か1回単位の料金がある経路へ移ります。

## Claude Codeの画像生成でよくある質問

### Claude Codeで画像を生成できますか？

Claude Code自体は生成できませんが、Claude Codeから画像を作ることはできます。Claudeのモデルは画像を出力しないので、図解や文字入り画像はClaudeが書いたSVGやHTMLをPNGに変換し、写真やイラストはスクリプトかMCPサーバーを通じてOpenAI、Google、Hugging Faceなどの画像モデルに作らせます。

### Claude Codeの画像生成は無料でできますか？

SVGをコードで描画する経路は追加料金なしで使えます。画像モデルを使う経路で課金なしに使えるのは、Hugging Face ZeroGPUの1日5分（無料アカウント）とCloudflare Workers AIの1日10,000 Neuronsという枠の範囲だけです。Gemini APIの画像モデルには無料枠がなく、OpenAIはトークン課金です。

### Codex CLIで画像生成はできますか？

Codex CLIとChatGPTの契約を組み合わせて画像を作らせる方法が紹介されていることがありますが、その可否や条件は、ここで挙げたAnthropic、OpenAI、Googleの公式ドキュメントからは読み取れません。OpenAIの画像モデルを公式に呼ぶ方法として文書化されているのは、APIキーを使う`/v1/images/generations`と`/v1/images/edits`です。

### 生成した画像はどこに保存されますか？

スクリプトの経路では`--out`で指定したパスです。MCPサーバーの経路では、Claude Code v2.1.283以降で`~/.claude/projects/`以下のセッションの`tool-results`ディレクトリに元のファイルが保存されます。プロジェクトで使うには、Claudeにコピーを頼んでください。

### スキルとMCPサーバーはどちらを使うべきですか？

保存先を決めたい、リポジトリでチームに配りたい、キーを設定ファイルに残したくない場合はスキルです。スクリプトを書かずに複数のモデルを試したい場合はMCPサーバーが早く、気に入ったモデルが決まった段階でスクリプトに移すと、費用と保存先を管理しやすくなります。
