nano-banana-builder
Google Geminiの画像生成APIを活用し、Next.jsで画像ジェネレーターやエディターなどのフルスタックWebアプリを構築する際に、ReactコンポーネントからAPIルート、本番環境へのデプロイまでを支援するSkill。
📜 元の英語説明(参考)
Build full-stack web applications powered by Google Gemini's Nano Banana & Nano Banana Pro image generation APIs. Use when creating Next.js image generators, editors, galleries, or any web app that integrates gemini-2.5-flash-image or gemini-3-pro-image-preview models. Covers React components, server actions, API routes, storage, rate limiting, and production deployment patterns.
🇯🇵 日本人クリエイター向け解説
Google Geminiの画像生成APIを活用し、Next.jsで画像ジェネレーターやエディターなどのフルスタックWebアプリを構築する際に、ReactコンポーネントからAPIルート、本番環境へのデプロイまでを支援するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o nano-banana-builder.zip https://jpskill.com/download/17761.zip && unzip -o nano-banana-builder.zip && rm nano-banana-builder.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/17761.zip -OutFile "$d\nano-banana-builder.zip"; Expand-Archive "$d\nano-banana-builder.zip" -DestinationPath $d -Force; ri "$d\nano-banana-builder.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
nano-banana-builder.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
nano-banana-builderフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 3
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Nano Banana Builder
GoogleのNano Banana画像生成APIを活用して、シンプルなテキストから画像生成ツールから、複数ターンの会話による洗練された反復型エディタまで、本番環境に対応したWebアプリケーションを構築します。
重要: 正確なモデル名
以下の正確なモデル文字列のみを使用してください。勝手に作成したり、推測したり、日付のサフィックスを追加したりしないでください。
| モデル文字列 (正確に使用) | エイリアス | ユースケース |
|---|---|---|
gemini-2.5-flash-image |
Nano Banana | 高速なイテレーション、ドラフト、大量処理 |
gemini-3-pro-image-preview |
Nano Banana Pro | 高品質な出力、テキストレンダリング、2K |
避けるべきよくある間違い:
- ❌
gemini-2.5-flash-preview-05-20— 間違い、日付のサフィックスはテキストモデル用です - ❌
gemini-2.5-pro-image— 間違い、2.5 Proは画像生成に対応していません - ❌
gemini-3-flash-image— 間違い、存在しません - ❌
gemini-pro-vision— 間違い、これは画像入力用であり、生成用ではありません
有効な画像生成モデルは gemini-2.5-flash-image と gemini-3-pro-image-preview のみです。
哲学: 会話型画像生成
Nano Bananaは単なる画像APIではありません。設計段階から会話型です。その核心的な洞察は、画像生成は一方通行のプロンプトではなく、対話として最も効果を発揮するということです。
AIアートディレクターと協働するようなものだと考えてください:
- 反復的な改善 → 1つのプロンプトで完璧を目指すのではなく、会話を通じて画像を構築します
- 文脈認識 → モデルは以前の生成や編集を「記憶」します
- 自然言語編集 → パラメータではなく、会話形式で変更を記述します
構築前に確認すること
- 主なユースケースは何ですか? テキストから画像生成? 画像編集? 複数画像の合成? スタイル転送?
- どのモデルがニーズに合っていますか? Nano Banana (速度/イテレーション) または Nano Banana Pro (品質/複雑なプロンプト)?
- ユーザーのジャーニーは? 単一の生成? 反復的な改善? ギャラリーの閲覧?
- 本番環境の制約は? レート制限? ストレージ? 画像あたりのコスト? ユーザー数?
コア原則
- 設定よりも会話: 複雑なパラメータUIではなく、Nano Bananaの反復編集を活用します
- モデルの選択が重要: 速度/イテレーションには
gemini-2.5-flash-image、品質/複雑さにはgemini-3-pro-image-previewを使用します - 状態は会話履歴として: 複数ターンの編集を可能にするために、生成をチャットメッセージとして追跡します
- レート制限の認識: 画像生成には厳格なクォータがあります。キューイングとキャッシュを実装します
- ストレージ戦略: 生成された画像は、インラインのbase64だけでなく、ストレージ (Vercel Blob/S3) に保存します
モデル選択フレームワーク
ユースケースに基づいて選択してください:
| ユースケース | モデル | 理由 |
|---|---|---|
| 高速なイテレーション、ドラフト | gemini-2.5-flash-image |
高速 (2-5秒)、画像あたりのコストが低い |
| 最終出力、品質 | gemini-3-pro-image-preview |
優れた品質、思考力、テキストレンダリング |
| テキストの多い画像 | gemini-3-pro-image-preview |
最高のタイポグラフィ、2K解像度 |
| 複数ターンの編集 | どちらでも | どちらも会話型編集をサポート |
| 大量処理 | gemini-2.5-flash-image |
低コスト、高速なスループット |
クイックスタート
基本的なServer Action
// app/actions/generate.ts
'use server'
import { google } from '@ai-sdk/google'
import { generateText } from 'ai'
export async function generateImage(prompt: string) {
const result = await generateText({
model: google('gemini-2.5-flash-image'),
prompt,
providerOptions: {
google: {
responseModalities: ['IMAGE'],
imageConfig: { aspectRatio: '16:9' }
}
}
})
return result.files[0] // { base64, uint8Array, mediaType }
}
Client Component with useChat
// app/components/ImageGenerator.tsx
'use client'
import { useChat } from '@ai-sdk/react'
export function ImageGenerator() {
const { append, messages, isLoading } = useChat({
api: '/api/generate'
})
return (
<div>
{messages.map(m => (
<div key={m.id}>
{m.parts?.map((part, i) =>
part.type === 'image' && (
<img key={i} src={part.url} alt="Generated" />
)
)}
</div>
))}
<button
disabled={isLoading}
onClick={() => append({
role: 'user',
content: 'A futuristic cityscape at dusk'
})}
>
Generate
</button>
</div>
)
}
高度な実装
以下を含む完全な実装については:
- モデル選択、ストレージ、エラー処理を備えたServer Actions
- ストリーミングレスポンスを備えたAPI Routes
- 反復編集とギャラリーを備えたClient Components
- 複数画像の合成やバッチ生成などの高度なパターン
references/advanced-patterns.mdを参照してください。
設定と運用
詳細な設定と運用上の懸念事項については:
- Provider Options (responseModalities, imageConfig, thinkingConfig)
- ストレージ戦略 (Vercel Blob, S3/R2の実装)
- レート制限 (Upstash Redisパターン、クォータ管理)
- コスト最適化戦略
references/configuration.mdを参照してください。
避けるべきアンチパターン
❌ モデル名を勝手に作成したり、日付のサフィックスを追加したりする:
間違いの理由: 画像生成モデルには特定の名前があります。-preview-05-20のような日付のサフィックスはテキストモデル専用です
改善策: gemini-2.5-flash-image または gemini-3-pro-image-preview を正確に使用してください。バリエーションは不要です
❌ Gemini 2.5 Proを画像に使用する:
間違いの理由: Gemini 2.5 Proは画像を直接生成しません
改善策: gemini-2.5-flash-image または gemini-3-pro-image-preview を使用してください
❌ base64のみをデータベースに保存する: 間違いの理由: Blobsデータベース、高価なストレージ、遅い検索 改善策: オブジェクトストレージ (Vercel Blob/S3) に保存し、URLのみを保存します
❌ レート制限の処理がない: 間違いの理由: 本番環境で429エラーが発生し、UXが低下します 改善策: ユーザーフレンドリーなエラーメッセージでレート制限を実装します
❌ 複数ターンのコンテキストを無視する: 間違いの理由: Nano Bananaの会話型編集の強みを無駄にします 改善策: (原文がここで切り詰められています)
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Nano Banana Builder
Build production-ready web applications powered by Google's Nano Banana image generation APIs—creating everything from simple text-to-image generators to sophisticated iterative editors with multi-turn conversation.
CRITICAL: Exact Model Names
Use ONLY these exact model strings. Do not invent, guess, or add date suffixes.
| Model String (use exactly) | Alias | Use Case |
|---|---|---|
gemini-2.5-flash-image |
Nano Banana | Fast iterations, drafts, high volume |
gemini-3-pro-image-preview |
Nano Banana Pro | Quality output, text rendering, 2K |
Common mistakes to avoid:
- ❌
gemini-2.5-flash-preview-05-20— wrong, date suffixes are for text models - ❌
gemini-2.5-pro-image— wrong, 2.5 Pro doesn't do image generation - ❌
gemini-3-flash-image— wrong, doesn't exist - ❌
gemini-pro-vision— wrong, that's for image input, not generation
The only valid image generation models are gemini-2.5-flash-image and gemini-3-pro-image-preview.
Philosophy: Conversational Image Generation
Nano Banana isn't just another image API—it's conversational by design. The core insight is that image generation works best as a dialogue, not a one-shot prompt.
Think of it as working with an AI art director:
- Iterative refinement → Build up images through conversation, not perfection in one prompt
- Context awareness → The model "remembers" previous generations and edits
- Natural language editing → Describe changes conversationally, not with parameters
Before Building, Ask
- What's the primary use case? Text-to-image generation? Image editing? Multi-image composition? Style transfer?
- Which model fits the need? Nano Banana (speed/iterations) or Nano Banana Pro (quality/complex prompts)?
- What's the user journey? Single generation? Iterative refinement? Gallery browsing?
- What are production constraints? Rate limits? Storage? Cost per image? User volume?
Core Principles
- Conversation over configuration: Leverage Nano Banana's iterative editing rather than complex parameter UIs
- Model selection matters: Use
gemini-2.5-flash-imagefor speed/iterations,gemini-3-pro-image-previewfor quality/complexity - State as conversation history: Track generations as chat messages to enable multi-turn editing
- Rate limit awareness: Image generation has strict quotas—implement queuing and caching
- Storage strategy: Store generated images (Vercel Blob/S3), not just inline base64
Model Selection Framework
Choose based on use case:
| Use Case | Model | Why |
|---|---|---|
| Rapid iterations, drafts | gemini-2.5-flash-image |
Fast (2-5s), lower cost per image |
| Final output, quality | gemini-3-pro-image-preview |
Superior quality, thinking, text rendering |
| Text-heavy images | gemini-3-pro-image-preview |
Best typography, 2K resolution |
| Multi-turn editing | Either | Both support conversational editing |
| High volume | gemini-2.5-flash-image |
Lower cost, faster throughput |
Quick Start
Basic Server Action
// app/actions/generate.ts
'use server'
import { google } from '@ai-sdk/google'
import { generateText } from 'ai'
export async function generateImage(prompt: string) {
const result = await generateText({
model: google('gemini-2.5-flash-image'),
prompt,
providerOptions: {
google: {
responseModalities: ['IMAGE'],
imageConfig: { aspectRatio: '16:9' }
}
}
})
return result.files[0] // { base64, uint8Array, mediaType }
}
Client Component with useChat
// app/components/ImageGenerator.tsx
'use client'
import { useChat } from '@ai-sdk/react'
export function ImageGenerator() {
const { append, messages, isLoading } = useChat({
api: '/api/generate'
})
return (
<div>
{messages.map(m => (
<div key={m.id}>
{m.parts?.map((part, i) =>
part.type === 'image' && (
<img key={i} src={part.url} alt="Generated" />
)
)}
</div>
))}
<button
disabled={isLoading}
onClick={() => append({
role: 'user',
content: 'A futuristic cityscape at dusk'
})}
>
Generate
</button>
</div>
)
}
Advanced Implementation
For complete implementations including:
- Server Actions with model selection, storage, and error handling
- API Routes with streaming responses
- Client Components with iterative editing and galleries
- Advanced Patterns like multi-image composition and batch generation
See references/advanced-patterns.md
Configuration & Operations
For detailed configuration and operational concerns:
- Provider Options (responseModalities, imageConfig, thinkingConfig)
- Storage Strategy (Vercel Blob, S3/R2 implementations)
- Rate Limiting (Upstash Redis patterns, quota management)
- Cost Optimization strategies
See references/configuration.md
Anti-Patterns to Avoid
❌ Inventing model names or adding date suffixes:
Why wrong: Image generation models have specific names; date suffixes like -preview-05-20 are for text models only
Better: Use exactly gemini-2.5-flash-image or gemini-3-pro-image-preview — no variations
❌ Using Gemini 2.5 Pro for images:
Why wrong: Gemini 2.5 Pro doesn't generate images directly
Better: Use gemini-2.5-flash-image or gemini-3-pro-image-preview
❌ Storing only base64 in database: Why wrong: Blobs database, expensive storage, slow retrieval Better: Store in object storage (Vercel Blob/S3), save URL only
❌ No rate limit handling: Why wrong: Will hit 429 errors in production, poor UX Better: Implement rate limiting with user-friendly error messages
❌ Ignoring multi-turn context: Why wrong: Wastes Nano Banana's conversational editing strength Better: Track chat history for iterative refinement
❌ Hardcoding API keys client-side: Why wrong: Exposes credentials, security risk Better: Use server actions / API routes with environment variables
❌ Using wrong aspect ratio: Why wrong: 21:9 on 1:1 request wastes tokens, unexpected crop Better: Match aspect ratio to intended use case
❌ No loading states: Why wrong: Image generation takes 5-30s, users think it's broken Better: Show progress indicators and estimated wait time
❌ Generating on every keystroke: Why wrong: Wastes quota, slow response Better: Debounce prompts, require explicit action
Variation Guidance
IMPORTANT: Every app should feel uniquely designed for its specific purpose.
Vary across dimensions:
- UI Style: Minimal, brutalist, playful, professional, dark, light
- Color Scheme: Warm, cool, monochrome, vibrant, muted
- Layout: Single page, multi-step wizard, sidebar, grid, list
- Interaction: Click-to-generate, drag-and-drop, real-time typing, batch
Avoid overused patterns:
- ❌ Default Tailwind purple gradients
- ❌ Generic "AI startup" aesthetic
- ❌ Same component libraries for every project
- ❌ Inter/Roboto fonts without thought
Context should drive design:
- Meme generator → Bold, fun, casual
- Product mockup tool → Clean, professional, grid-based
- Art exploration → Gallery-first, visual-heavy
- Brand asset creator → Polished, template-guided
Environment Setup
# .env.local
GEMINI_API_KEY=your_api_key_here
# For Vercel Blob storage
BLOB_READ_WRITE_TOKEN=your_vercel_token
# For S3 (optional)
S3_BUCKET=your-bucket
S3_ENDPOINT=https://your-endpoint.r2.cloudflarestorage.com
S3_ACCESS_KEY_ID=your_key
S3_SECRET_ACCESS_KEY=your_secret
# For Upstash rate limiting (optional)
UPSTASH_REDIS_REST_URL=your_url
UPSTASH_REDIS_REST_TOKEN=your_token
# Install dependencies
npm install @ai-sdk/google ai @ai-sdk/react @vercel/blob
# Or if using separate packages
npm install google-genai
Remember
Nano Banana enables conversational image generation that feels like working with a creative partner, not a tool.
The best apps:
- Leverage multi-turn editing for refinement
- Choose models intentionally (speed vs quality)
- Handle rate limits gracefully
- Store images efficiently
- Provide great loading states
- Feel uniquely designed for their purpose
You're building more than an image generator—you're creating a creative experience. Design it thoughtfully.
同梱ファイル
※ ZIPに含まれるファイル一覧。`SKILL.md` 本体に加え、参考資料・サンプル・スクリプトが入っている場合があります。
- 📄 SKILL.md (9,032 bytes)
- 📎 references/advanced-patterns.md (10,549 bytes)
- 📎 references/configuration.md (9,277 bytes)