Claude CodeでNano Bananaを動かす設定
Claude CodeからNano Bananaを使うならGA版モデルIDと課金済みのAPIキーが必須です。旧preview IDは2026年6月25日に提供終了しました。
目次

2026年9月24日時点で、Claude CodeからNano Bananaを使う構成は「Claudeが指示を出して実行し、画像はGemini APIのNano Bananaが描く」という分担です。Claude自身はPNGやJPEGのような画像を出力できないので、Skill(Claudeが手元のスクリプトを実行する)かMCP(Claudeがツールを呼び出す)のどちらかでGemini APIにつなぎます。
動く構成にするための条件は3つです。
- モデルIDはGA版の
gemini-3.1-flash-image(Nano Banana 2)、gemini-3-pro-image(Nano Banana Pro)、gemini-3.1-flash-lite-image(Nano Banana 2 Lite)のどれかを指定する。-preview付きのIDはGemini APIで2026年6月25日に提供終了し、gemini-2.5-flash-imageも2026年10月2日に提供終了します。 - 課金を有効にしたGemini APIキーを使う。Nano Bananaの画像モデルには無料枠がありません。
- キーは環境変数で渡し、Claudeとの会話には貼らない。
2026年2〜4月ごろの手順で組んで、いまは画像が出ないという場合、最初に疑うのはモデルIDです。Google製のnanobanana拡張は、NANOBANANA_MODELを設定しないと提供終了済みのgemini-3.1-flash-image-previewを呼びに行きます。
SkillとMCPのどちらで組むか
どちらも最後にGemini APIを呼ぶ点は同じで、違うのは「Claudeが何を操作するか」です。

| Skill | MCP | |
|---|---|---|
| 仕組み | SKILL.mdの指示に従い、Claudeが同梱スクリプトをBashで実行する | Claude CodeがMCPサーバーを起動し、Claudeがgenerate_imageなどのツールを呼ぶ |
| 必要なもの | Pythonとgoogle-genai、スクリプト1本 | Node.jsとMCPサーバー(Google製nanobanana拡張など) |
| 置き場所 | ~/.claude/skills/<名前>/(個人)か.claude/skills/<名前>/(プロジェクト) | claude mcp addで登録、またはプロジェクトの.mcp.json |
| モデルの指定 | スクリプトの引数と既定値 | サーバー側の環境変数(nanobanana拡張ならNANOBANANA_MODEL) |
| 向いている場面 | 保存先やサイズを自分で決めたい、依存を増やしたくない | 複数枚のバリエーション、アイコン一式、図解など拡張の機能をそのまま使いたい |
新しく組むならSkillが手軽です。コードが短く、使うモデルIDを自分で固定でき、画像はファイルに直接保存されるので会話に画像データが流れ込みません。すでにGemini CLIやnanobanana拡張を使っていて、/iconや/storyのような機能が必要ならMCPのほうが早く済みます。
Claude Code以外の場所では
- ローカルのClaude Code(ターミナル、DesktopアプリのCodeタブなど)では、どちらの方式も使えます。
- Coworkとクラウドセッションは、手元の
~/.claude/skills/を読み込みません。Coworkで使うにはclaude.aiアカウントでそのSkillを有効にする必要があり、クラウドセッションはリポジトリの.claude/skills/にコミットされたSkillを読み込みます。Skillが読み込まれても、スクリプトを動かすにはその環境にGEMINI_API_KEYとGemini APIへの通信が必要です。 - claude.aiのチャットでは、Claudeが単独で画像ファイルを作ることはできません。SVGやコードで図を描く方法はClaudeは画像を生成できる?Claudeの視覚機能完全ガイド(2026年版)にまとめています。
2026年9月時点で使えるモデルID
Gemini API(Google AI Studioで発行したキー)で指定できるNano BananaのIDと状態です。料金は有料ティアの標準料金で、出力画像1枚あたりの米ドル換算です。
| 呼び名 | モデルID | 解像度 | 1枚の料金 | 状態 |
|---|---|---|---|---|
| Nano Banana 2 | gemini-3.1-flash-image | 512、1K、2K、4K | 1Kで$0.067、2Kで$0.101、4Kで$0.151 | 2026年5月28日公開、終了日の発表なし |
| Nano Banana Pro | gemini-3-pro-image | 1K、2K、4K | 1K・2Kで$0.134、4Kで$0.24 | 2026年5月28日公開、終了日の発表なし |
| Nano Banana 2 Lite | gemini-3.1-flash-lite-image | 1Kのみ | 1Kで$0.0336 | 提供中 |
| Nano Banana(初代) | gemini-2.5-flash-image | — | — | 2026年10月2日に提供終了 |
| 旧Nano Banana 2 | gemini-3.1-flash-image-preview | — | — | 2026年6月25日に提供終了済み |
| 旧Nano Banana Pro | gemini-3-pro-image-preview | — | — | 2026年6月25日に提供終了済み |
出典はGemini APIの画像生成ドキュメント、提供終了スケジュール、料金ページです。生成された画像にはすべてSynthIDの透かしが入ります。
普段使いの既定はNano Banana 2で足ります。Proは文字の多い図解やブランドの一貫性が求められる画像向け、2 Liteは下書きや大量生成向けですが、2 Liteは複数の参照画像や会話を重ねた編集には最適化されていません。用途ごとの選び方はNano Banana 2 Lite・2・Proの選び方:用途で分けるで詳しく比べています。
Vertex AI経由の場合は提供終了日が異なります。Vertex AIで使うときの設定はVertex AIでNano Bananaを動かす設定と料金を参照してください。
前は動いた構成で画像が出ない理由
2026年2〜4月ごろは、Nano Banana 2もProもpreview IDしかなく、各ツールの既定値や推奨値もpreview IDでした。そのころの設定をそのまま使っていると、提供終了したモデルを呼び続けることになります。代表的な構成ごとに、どのIDが使われ、どう直せばよいかをまとめます。

| 構成 | モデルを決める場所 | 何も設定しないと使われるID | 2026年9月24日時点の状態 | 直し方 |
|---|---|---|---|---|
| Google製nanobanana拡張(Gemini CLI経由、またはMCPとして直接登録) | 環境変数NANOBANANA_MODEL、未設定なら拡張の既定値 | gemini-3.1-flash-image-preview | 提供終了済みのIDなので生成できない | NANOBANANA_MODEL=gemini-3.1-flash-imageを設定 |
| cc-nano-banana(上の拡張をGemini CLI経由で呼ぶSkill) | 同上(実際に呼ぶのは拡張) | READMEにはgemini-2.5-flash-imageとあるが、拡張を呼ぶ仕組みなので拡張の既定値が使われる | READMEが勧めるgemini-3-pro-image-previewも提供終了済み | 同上。Proを使うならgemini-3-pro-image |
NANOBANANA_MODEL=gemini-2.5-flash-imageを設定済み | 設定した値 | — | 2026年10月1日までは動くが、10月2日に提供終了 | gemini-3.1-flash-lite-imageかgemini-3.1-flash-imageに変更 |
| 自作のスクリプトや自前MCP | コード内の文字列 | コードに書いたID | -preview付きなら生成できない | GA版のIDに書き換える |
| OpenRouter経由でキーを会話に貼る方式 | OpenRouter側のモデル名(例:google/gemini-3.1-flash-image) | — | OpenRouterでの提供状況に従う | キーを会話から外し、環境変数に移す |
nanobanana拡張の既定値は、2026年9月24日時点のmainブランチのソース(mcp-server/src/imageGenerator.ts)でgemini-3.1-flash-image-previewのままで、最後のコミットは2026年3月7日です。NANOBANANA_MODELにはどんな文字列でも入る作りなので、提供終了したIDを設定していても起動時には止まりません。未設定だと生成に失敗するというのは、この既定値と提供終了日から導いた結論で、そのとき返るエラー文はGoogleのドキュメントに記載がありません。
手元の設定に古いIDが残っていないかは、次のコマンドで探せます。
grep -rn "image-preview\|2.5-flash-image" \
~/.claude/skills .claude .mcp.json ~/.claude.json \
~/.zshrc ~/.bashrc 2>/dev/null
echo "NANOBANANA_MODEL=$NANOBANANA_MODEL"見つかったIDを上の表のGA版に置き換えれば、ほかの設定は変えずに済みます。モデルIDが正しいのにHTTP 200で画像だけが返らない場合は、安全フィルタや出力設定の問題なのでNano Banana APIで画像が生成されない原因と対処を確認してください。
Skillで組む手順
ここでは、GA版の3つのIDだけを受け付けるスクリプトをSkillに同梱します。Claudeは依頼内容からプロンプトと保存先を決め、スクリプトを実行するだけです。
1. Gemini APIキーを用意して環境変数に入れる
Google AI StudioでAPIキーを作り、そのプロジェクトで課金を有効にします。無料枠のままのキーでは画像モデルを呼べません。
キーはシェルの設定ファイルに書き、Claude Codeはそのシェルから起動します。
# ~/.zshrc などに追記して、新しいターミナルを開く
export GEMINI_API_KEY="取得したキー"Claudeに「このキーを保存して」と頼んで会話にキーを貼る方法もありますが、キーがセッションの記録に残ります。環境変数にしておけば、スクリプトは起動時にキーを読むだけで、会話にキーが出てきません。
2. ライブラリを入れる
pip install google-genai下のスクリプトはgoogle-genai 2.25.0とPython 3.12で書いています。
3. Skillのフォルダを作る
どのプロジェクトでも使うなら個人Skill、チームで共有するならプロジェクトSkillにします。
~/.claude/skills/nano-banana/ # 個人Skill(このマシンの全プロジェクト)
├── SKILL.md
└── scripts/
└── generate.py
.claude/skills/nano-banana/ # プロジェクトSkill(コミットして共有)フォルダ名がそのままコマンド名になるので、この例では/nano-bananaで直接呼べます。依頼の内容がdescriptionに合えば、Claudeが自分で読み込むこともあります。
SKILL.mdは次の内容です。
---
name: nano-banana
description: Nano Banana(Gemini API)で画像を生成・編集し、プロジェクト内に保存する。アイキャッチ、サムネイル、アイコン、スライド用の画像を作るとき、既存の画像を修正するときに使う。
argument-hint: "[作りたい画像の説明]"
---
# Nano Bananaで画像を作る
1. 依頼から具体的なプロンプトを組み立てる。被写体、構図、スタイル、画像内に入れる文字は正確な文言で書く。
2. 保存先を決める。指定がなければ images/ の下に内容が分かるファイル名を付ける。
3. 次のコマンドを実行する。
python3 ${CLAUDE_SKILL_DIR}/scripts/generate.py "<プロンプト>" --out <保存先.png> --aspect 16:9 --size 1K
- 既定のモデルは gemini-3.1-flash-image(Nano Banana 2)、サイズは 1K。
- 文字の多い図解やブランドの一貫性が要るときだけ --model gemini-3-pro-image を使う。
- 下書きを大量に作るときは --model gemini-3.1-flash-lite-image(1Kのみ)。
- 既存の画像を直すときは --input <元画像> を付ける(複数可)。
4. 生成は1回の依頼につき1枚。作り直す前に結果をユーザーに見せる。
5. 終了コード2は設定の問題(キー未設定かモデルIDの誤り)、1は画像が返らなかったことを示す。表示されたメッセージをそのままユーザーに伝える。${CLAUDE_SKILL_DIR}はClaude CodeがSKILL.mdのあるフォルダに置き換えるので、個人Skillでもプロジェクトでも同じ書き方で動きます。
4. スクリプトを置く
scripts/generate.pyは次のとおりです。
#!/usr/bin/env python3
"""Nano Banana(Gemini API)で画像を1枚生成・編集して保存する。
使い方:
python generate.py "prompt" --out images/hero.png [--model gemini-3.1-flash-image]
[--aspect 16:9] [--size 2K] [--input ref.png ...]
キーは環境変数 GEMINI_API_KEY から読む(コマンドラインには渡さない)。
"""
import argparse
import os
import pathlib
import sys
from google import genai
from google.genai import types
# 2026年9月時点のGA版ID。preview IDや gemini-2.5-flash-image は受け付けない
MODELS = {
"gemini-3.1-flash-lite-image", # Nano Banana 2 Lite(1Kのみ)
"gemini-3.1-flash-image", # Nano Banana 2(512/1K/2K/4K)
"gemini-3-pro-image", # Nano Banana Pro(1K/2K/4K)
}
def main() -> int:
p = argparse.ArgumentParser()
p.add_argument("prompt")
p.add_argument("--out", required=True)
p.add_argument("--model", default="gemini-3.1-flash-image")
p.add_argument("--aspect", default="1:1")
p.add_argument("--size", default="1K")
p.add_argument("--input", action="append", default=[])
a = p.parse_args()
if a.model not in MODELS:
print(f"Unknown or retired model id: {a.model}. Use one of {sorted(MODELS)}", file=sys.stderr)
return 2
if not os.environ.get("GEMINI_API_KEY"):
print("GEMINI_API_KEY is not set", file=sys.stderr)
return 2
# 参照画像(編集元)はプロンプトの後ろに並べる
contents = [a.prompt]
for path in a.input:
data = pathlib.Path(path).read_bytes()
mime = "image/png" if path.lower().endswith(".png") else "image/jpeg"
contents.append(types.Part.from_bytes(data=data, mime_type=mime))
# 任意:Gemini互換のゲートウェイを使う場合だけ GEMINI_BASE_URL を設定する
base_url = os.environ.get("GEMINI_BASE_URL")
client = genai.Client(http_options=types.HttpOptions(base_url=base_url)) if base_url else genai.Client()
resp = client.models.generate_content(
model=a.model,
contents=contents,
config=types.GenerateContentConfig(
response_modalities=["IMAGE"],
image_config=types.ImageConfig(aspect_ratio=a.aspect, image_size=a.size),
),
)
for cand in resp.candidates or []:
for part in (cand.content.parts if cand.content else []) or []:
if part.inline_data and part.inline_data.data:
out = pathlib.Path(a.out)
out.parent.mkdir(parents=True, exist_ok=True)
out.write_bytes(part.inline_data.data)
print(f"saved {out} ({len(part.inline_data.data)} bytes)")
return 0
# 200でも画像がない場合は、ブロック理由と終了理由を出して止める
fb = getattr(resp, "prompt_feedback", None)
reason = resp.candidates[0].finish_reason if resp.candidates else None
print(f"No image returned. blockReason={getattr(fb, 'block_reason', None)} finishReason={reason}", file=sys.stderr)
return 1
if __name__ == "__main__":
sys.exit(main())ポイントは4つです。モデルIDを許可リストで絞っているので、古いIDを渡すとAPIを呼ぶ前に終了コード2で止まります。キーはGEMINI_API_KEYからしか読みません。response_modalities=["IMAGE"]で画像だけを返させ、image_configで縦横比と解像度を指定します。画像が返らなかったときはblockReasonとfinishReasonを表示し、原因を追えるようにしています。
このスクリプトの動作確認はオフラインでできる範囲に限られます。キー未設定のときと提供終了済みのIDを渡したときに終了コード2で止まること、偽のキーを使うとGoogleのサーバーまでリクエストが届いてAPI_KEY_INVALIDが返ることは確かめていますが、有効なキーで実際に画像を生成したわけではありません。最初の1枚は1Kの設定で試し、保存された画像を開いて確認してください。
5. Claude Codeから使う
Claude Codeを起動して、普段どおりに頼みます。
/nano-banana 「Claude CodeとNano Bananaの連携」という記事のアイキャッチ。
16:9、明るい配色、文字は入れない。images/hero.png に保存して既存の画像を直すときは、元の画像のパスを伝えます。
images/hero.png の背景を夜景に変えて、images/hero-night.png に保存してClaudeはこれを--input images/hero.png --out images/hero-night.pngのような引数に変えて実行します。Bashの実行前には通常どおり許可を求められます。SKILL.mdのallowed-toolsでこのスクリプトを事前に許可すれば確認は省けますが、そのぶんClaudeが作り直すたびに課金されるので、慣れるまでは確認を残しておくほうが安全です。プロンプトの組み立て方はNano Banana プロンプトの作り方:実践ガイドと50個の検証用テンプレートが参考になります。
MCPで組む手順(Google製nanobanana拡張)
nanobanana拡張の中身は、@modelcontextprotocol/sdkで作られたMCPサーバーです。Gemini CLIを経由せず、Claude Codeに直接登録することもできます。Node.js 20以上が必要です。起動ファイルのmcp-server/dist/index.jsはリポジトリにコミットされていないため、クローンしただけでは動かず、リポジトリ直下でnpm installを実行してビルドします(postinstallで依存の導入とビルドが続けて走ります)。
git clone https://github.com/gemini-cli-extensions/nanobanana ~/tools/nanobanana
cd ~/tools/nanobanana
npm install # 依存の導入とビルド登録はプロジェクトの.mcp.jsonに書くのが分かりやすい方法です。.mcp.jsonでは${変数名}が環境変数に展開されるので、キーそのものはファイルに残りません。
{
"mcpServers": {
"nanobanana": {
"command": "node",
"args": ["/Users/you/tools/nanobanana/mcp-server/dist/index.js"],
"env": {
"NANOBANANA_MODEL": "gemini-3.1-flash-image",
"GEMINI_API_KEY": "${GEMINI_API_KEY}"
}
}
}
}argsのパスは自分の環境に合わせて書き換えます。チームで共有する場合は、パスも${NANOBANANA_DIR}/mcp-server/dist/index.jsのように環境変数にしておくと、各自の環境でそのまま動きます。コマンドで登録するなら、--scope projectを付けたclaude mcp add-jsonで同じ内容が.mcp.jsonに書き込まれます。
claude mcp add-json --scope project nanobanana \
'{"command":"node","args":["/Users/you/tools/nanobanana/mcp-server/dist/index.js"],"env":{"NANOBANANA_MODEL":"gemini-3.1-flash-image","GEMINI_API_KEY":"${GEMINI_API_KEY}"}}'登録後はclaude mcp listで状態を確認します。.mcp.jsonのサーバーは、最初にclaudeを対話モードで起動したときに承認するまで「Pending approval」のままです。Claude Codeの中では/mcpでも確認できます。
使うときに押さえておきたい点は3つです。
NANOBANANA_MODELは必ず設定する。 未設定だと、前の節のとおり提供終了済みのIDが使われます。- 保存先はサーバーの作業ディレクトリの下の
nanobanana-output/です。 Claude Codeから起動した場合は通常プロジェクトのフォルダが基準になるはずですが、ツールの返答に「Generated files」として保存先のパスが表示されるので、最初の1枚で確かめ、必要ならClaudeに移動を頼みます。 - キーの環境変数は5つの名前を順に探します。
NANOBANANA_API_KEY、NANOBANANA_GEMINI_API_KEY、NANOBANANA_GOOGLE_API_KEY、GEMINI_API_KEY、GOOGLE_API_KEYの順なので、別の用途でNANOBANANA_API_KEYを設定していると、そちらが優先されます。
このサーバーは画像をファイルに保存してパスだけを返すので、画像データがClaudeの会話に入りません。自前でMCPサーバーを作る場合、画像をBase64のまま返すと、Claude Codeの既定の出力上限25,000トークン(MAX_MCP_OUTPUT_TOKENSで変更可)にかかるおそれがあります。ファイルに保存してパスを返す作りにしておくのが無難です。MCPの登録やスコープの基本はClaude Codeで最初に入れるべきMCP 2026年版:ワークフロー別の初手でも扱っています。
1枚いくらかかるか
Gemini APIの画像モデルは、Nano Banana 2、Pro、2 Liteのいずれも無料枠が「Not available」で、使うには課金が必要です。有料ティアで送ったデータは、Googleの製品改善には使われないと料金ページに記載されています。
ブログ記事1本にアイキャッチ1枚と本文用2枚を作り、それぞれ納得するまでに3回ずつ生成すると、合計9枚です。出力画像の料金だけで計算すると次のようになります。
| モデルと解像度 | 1枚の料金 | 9枚(記事1本) | 180枚(月20本) |
|---|---|---|---|
| Nano Banana 2 Lite、1K | $0.0336 | $0.30 | $6.05 |
| Nano Banana 2、1K | $0.067 | $0.60 | $12.06 |
| Nano Banana 2、2K | $0.101 | $0.91 | $18.18 |
| Nano Banana Pro、1K・2K | $0.134 | $1.21 | $24.12 |
| Nano Banana Pro、4K | $0.24 | $2.16 | $43.20 |
計算は「1枚の料金×枚数」です。入力のプロンプトやClaudeへの指示の分は別ですが、画像出力と比べると小さく、Proに参照画像を1枚渡す場合の入力はおよそ$0.0011です。料金は変わることがあるので、使う前に料金ページで確認してください。無料で試せる範囲やほかの経路との比較はNano Banana API 料金:Lite、Nano Banana 2、Pro、無料枠、経路選択にまとめています。
キーとデータをどこに通すか
APIキーを含む文章をClaude Codeに貼り、Claudeにキーを.env系のファイルへ保存させる方法もあります。手軽ですが、キーがセッションの記録に残ります。上の手順のように、キーはシェルの環境変数か.mcp.jsonの${GEMINI_API_KEY}で渡し、キーを書いたファイルはコミットしないようにします。
MCP Marketなどの配布サイトには、第三者がホストするNano Banana用MCPやSkillもあります。ホスト型のMCPを使うと、プロンプト、参照画像、多くの場合はAPIキーも運営者のサーバーを通ります。便利さと引き換えにどこまで預けられるかを判断してから使ってください。
Googleの課金をすぐに用意できない場合は、Gemini互換のエンドポイントを持つゲートウェイをGEMINI_BASE_URLで指す方法もあります。たとえばlaozhang.aiは同じ3つのGA版モデルを提供しており、2026年9月24日時点の料金は1回あたり2 Liteが$0.025、Nano Banana 2が$0.055、Proが$0.09で、解像度による差はありません。上のスクリプトならGEMINI_BASE_URL=https://api.laozhang.aiを設定し、GEMINI_API_KEYにそのサービスのキーを入れるだけで切り替わります。Googleではない第三者のサービスなので、Googleの利用規約やSLAは適用されず、プロンプトと画像はそのサービスを通ります。最初は数枚だけ生成して、画像と請求額を確かめてから使ってください。
よくある質問
Claude Codeだけで画像を生成できますか
できません。Claude CodeはSVGやHTML、グラフを描くコードは書けますが、写真やイラストのような画像ファイルを自分で作ることはできません。Nano Bananaのような画像生成モデルを、SkillかMCPで呼び出す必要があります。
無料のAPIキーで使えますか
使えません。Gemini APIのNano Banana 2、Pro、2 Liteはいずれも無料枠が用意されておらず、課金を有効にしたキーが必要です。Nano Banana 2の1K画像なら1枚$0.067なので、10枚で$0.67ほどです。
Nano Banana 2とProのどちらを既定にすればよいですか
アイキャッチやサムネイルならNano Banana 2を既定にし、文字の多い図解や、ブランドの見た目を厳密に揃えたい画像のときだけProに切り替えるのが費用の面で合理的です。1Kで比べるとProは1枚$0.134で、Nano Banana 2の2倍です。
Skillを入れたのにClaudeが使ってくれません
SKILL.mdのdescriptionに、どんな依頼のときに使うかが書かれているかを確認します。確実に使わせたいときは/nano-bananaのようにコマンドで直接呼びます。Skillの置き場所や読み込みの仕組みはClaude Codeで最初に使うべきSkills 2026年版:ワークフロー別の公式スターターも参考になります。Claude Code自体の導入がまだならClaude Codeのインストール方法:全プラットフォーム対応セットアップガイド(2026年版)から始めてください。





