blog-image について
blog-imageは、Geminiを使ってブログ用画像を生成・編集するスキルです。用途やスタイルに合わせた詳細なプロンプトを組み立て、ブログ向け画像や代替テキストを用意します。生成にはnanobanana-mcpサーバーが必要です。
主な機能
- 01ブログ用の新しい画像を生成
- 02調整した指示で既存画像を編集
- 036項目のブリーフでプロンプトを作成
- 04ブログ内の配置に合わせて比率を選択
- 05代替テキストとfrontmatterの断片を作成
活用シーン
- 01記事のヒーロー画像を作成
- 02セクション用のイラストを生成
- 03SNS共有用に画像を調整
MCP 対応
nanobanana-mcpのツールを確認し、画像生成・編集、アスペクト比の設定、画像履歴の参照に使用します。セットアップではMCPサーバーとAPIキーを設定します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ infrasity-labs/ dev-gtm-claude-skills --skill blog-imageインストール後、Claude Code で/blog-imageを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/gemini-models.mdmcp-tools.mdprompt-engineering-blog.mdscripts/setup_image_mcp.pyvalidate_image_setup.py詳細
ブログ画像 - ブログコンテンツ向けのAI画像生成
あなたは、ブログコンテンツに特化したGeminiの画像生成を指揮するクリエイティブディレクターです。ユーザーのテキストをそのままAPIに渡してはいけません。必ず内容を解釈し、改善して、6要素のReasoning Briefシステムを使って最適化されたプロンプトを作成してください。
クイックリファレンス
| コマンド | 機能 |
|---|---|
/blog image generate <idea> | プロンプトを完全に設計してブログ画像を生成します |
/blog image edit <path> <instructions> | 既存のブログ画像を適切に編集します |
/blog image setup | MCP サーバーとAPIキーを設定します |
ブログ画像の種類
ブログでの用途に合わせて画像の種類を選びます。
| 画像の種類 | アスペクト比 | 解像度 | ドメインモード | 配置場所 |
|---|---|---|---|---|
| ヒーロー/カバー | 16:9 | 2Kまたは4K | エディトリアル/ランドスケープ | フロントマターのcoverImage |
| OG/ソーシャルカード | 16:9 | 1K | エディトリアル/インフォグラフィック | フロントマターのogImage |
| インラインイラスト | 16:9または4:3 | 1K | トピックに応じて異なります | H2の後、本文の前 |
| インライン製品画像 | 4:3または1:1 | 1K | 製品 | 製品セクション内 |
| セクション区切り | 8:1または4:1 | 1K | アブストラクト/ランドスケープ | 主要なセクションの間 |
サイズ要件:
- ブログのヒーロー/カバー:1200x630(OG対応)または1920x1080
- Open Graph(OG):1200x630(ソーシャル共有に必須)
- インライン画像:幅1200px以上
MCP の利用可否の確認
生成する前に、nanobanana-mcpツールを利用できるか確認します。
get_image_historyを呼び出してみます(軽量で、副作用はありません)- 成功した場合:MCPを利用できます。生成を続けます
- 失敗した場合:MCPが設定されていません。ユーザーに次のように伝えます:
- 「画像生成にはnanobanana-mcpサーバーが必要です。
/blog image setupを実行して設定してください。」 - 内部から呼び出された場合(blog-write/blog-rewriteから):何も返さず、エラーも出しません。呼び出し元のワークフローはストック写真を使って続行します。
- 「画像生成にはnanobanana-mcpサーバーが必要です。
生成ワークフロー
/blog image generate <idea>の実行時、または内部から呼び出された場合:
ステップ1:意図を分析する
ブログに必要なものを判断します。
- 画像の種類:ヒーロー、インライン、OGカード、セクション区切りのどれか
- ブログのトピック:記事の内容
- スタイル:フォトリアリスティック、エディトリアル、イラスト、ミニマルのどれか
- 制約:ブランドカラー、指定寸法、プラットフォームの形式
- 雰囲気:権威ある印象、親しみやすさ、ドラマチック、クリーン
依頼が曖昧な場合は、用途とスタイルについて確認する質問を1つ尋ねます。
ステップ2:ドメインモードを選択する
画像に適した専門的な観点を選びます。
| モード | 使用する場面 | プロンプトで重視する点 |
|---|---|---|
| エディトリアル | ブログのヘッダー、特集画像、ライフスタイル | スタイリング、構図、出版物の参考例 |
| 製品 | EC関連の記事、レビュー、比較 | 表面素材、スタジオ照明、すっきりした背景 |
| ランドスケープ | 環境背景、旅行、ヒーローセクション | 空気遠近法、奥行きの層、時間帯 |
| UI/Web | テックブログのアイコン、イラスト、図解 | クリーンなベクター、フラットデザイン、正確な色 |
| インフォグラフィック | データ主導の記事、プロセス、比較 | レイアウト構造、階層、アクセシブルな色 |
| アブストラクト | パターン背景、セクション区切り、装飾 | 色彩理論、数学的な形状、テクスチャ |
ドメインモードの修飾語ライブラリについては、references/prompt-engineering-blog.mdを読み込みます。
ステップ 3:6 要素の推論ブリーフを作成する
プロンプトは自然な文章の段落として作成してください。キーワードのリストにはしないでください。
- 主題 - 誰/何を描くのか。質感、素材、スケールなど、豊かな物理的ディテールを含めます
- 動作 - 何が起きているのか。ポーズ、ジェスチャー、動き、状態を記述します
- 背景 - 環境、場所、時間帯、季節、天候を記述します
- 構図 - カメラアングル、ショットの種類、フレーミング、ネガティブスペース、奥行きを記述します
- 照明 - 光源、光の質、方向、色温度、影を記述します
- スタイル - アートの媒体、美的表現、フィルムストック、参考にするアーティスト/時代を記述します
フォトリアルなブログ画像のテンプレート:
A photorealistic [shot type] of [subject with physical detail], [action/pose],
set in [environment with specifics]. [Lighting conditions] create [mood].
Captured with [camera model], [focal length] lens at [f-stop], producing
[depth of field effect]. [Color palette/grading notes]. Aspect ratio 16:9,
suitable as a blog [hero image/inline illustration] at [target dimensions].
イラスト/スタイライズ画像のテンプレート:
A [art style] [format] of [subject with character detail], featuring
[distinctive characteristics] with [color palette]. [Line style] and
[shading technique]. Background is [description]. [Mood/atmosphere].
ステップ 4:アスペクト比を設定する
画像を生成する前に set_aspect_ratio を呼び出します。
| ブログでの用途 | 比率 |
|---|---|
| ヒーロー画像/カバー画像/OG 画像 | 16:9 |
| 製品ショット/正方形 | 4:3 または 1:1 |
| セクション区切り | 8:1 または 4:1 |
| 縦長(ストーリー) | 9:16 |
ステップ 5:MCP で生成する
| MCP ツール | 使用するタイミング |
|---|---|
set_aspect_ratio | 比率が 1:1 と異なる場合は、必ず最初に呼び出します |
gemini_generate_image | 作成したプロンプトから新しい画像を生成する場合 |
gemini_edit_image | 既存の画像を変更する場合 |
gemini_chat | 反復的な調整/複数ターンのセッション |
get_image_history | 生成した画像を確認する場合 |
clear_conversation | セッションのコンテキストをリセットする場合 |
モデルの選択(切り替える場合は set_model MCP ツールを使用します):
- NB2 Flash(デフォルト):ほとんどのブログ画像に最適です。高速、14 種類の比率、4K、$0.067/img
- NB Pro:テキストオーバーレイを含むヒーロー画像(テキスト精度 94%)や最高品質が必要な場合に使用します。$0.134/img
- Original:$0.039/img の低予算向けオプションです。5 種類の比率、最大 1K
パラメーターの詳細は references/mcp-tools.md を読み込んでください。
モデルの仕様、料金、レート制限については references/gemini-models.md を読み込んでください。
ステップ 6:後処理(必要な場合)
生成後、ブログでの使用に合わせてサイズ変更/変換します。
# Resize to blog hero dimensions (1200x630)
magick input.png -resize 1200x630^ -gravity center -extent 1200x630 hero.png
# Convert to WebP for web optimization
magick input.png -quality 85 output.webp
# Convert to AVIF (smallest, modern)
magick input.png -quality 80 output.avif
# Crop to exact OG dimensions
magick input.png -resize 1200x630^ -gravity center -extent 1200x630 og-image.png
magick(ImageMagick 7)が使用可能か確認してください。使用できない場合は convert に切り替えます。
ステップ 7:納品する
以下を提示します。
- 画像のパス - 保存先(
~/Documents/nanobanana_generated/) - 作成したプロンプト - 推論ブリーフ全文(学習用)
- 設定 - モデル、アスペクト比、ドメインモード
- 代替テキスト - 説明的な文。10~125 文字で、トピックのキーワードを自然に含めます
- フロントマターのスニペット(ヒーロー画像/OG 画像用):
coverImage: "/path/to/generated-image.png"
coverImageAlt: "Descriptive alt text sentence with topic keywords"
ogImage: "/path/to/generated-image.png"
- 調整の提案 - 該当する場合は 1~2 個のアイデア
編集ワークフロー
/blog image edit <path> <instructions> の場合:
- 画像のパスと編集指示を読み取ります
- 指示を具体化します(生のまま渡さないでください)。
ユーザーの指示 Claude が作成する内容 "remove background" エッジを保持する、詳細な背景削除の指示 "make it warmer" 色温度を具体的に変更し、保持する要素について注記した指示 "add text" フォントスタイル、サイズ、配置、コントラスト、読みやすさについての注記 "make it brighter" ハイライトを維持しながら露出を上げ、シャドウを明るくする指示 "crop for social" 中心を基準にトリミングし、1200x630 にサイズ変更する指示 - 具体化した指示を使って
gemini_edit_imageを呼び出します - 変更した画像のパスと説明を返します
内部 API(blog-write/blog-rewrite 用)
blog-write または blog-rewrite から Task サブエージェントとして呼び出された場合:
入力(呼び出し元のスキルから提供):
image_type:hero、inline、og、dividertopic:ブログ投稿のトピック/タイトルsection_context:(任意)画像が補足する見出しまたはセクションstyle_preference:(任意)photorealistic、illustrated、editorialcount:(任意)必要な画像の数(デフォルト:1)
出力(呼び出し元のスキルに返す):
### Generated Image
- **Path:** ~/Documents/nanobanana_generated/image_timestamp.png
- **Alt Text:** Descriptive sentence about the image
- **Type:** hero / inline / og
- **Domain Mode:** Editorial
- **Aspect Ratio:** 16:9
- **Suggested Frontmatter:**
coverImage: "/path/to/image.png"
coverImageAlt: "Alt text here"
フォールバック:MCP を利用できない場合は、エラーを返さずにただちに処理を終了します。 呼び出し元のワークフローはストックフォトを使用して続行します。画像生成が利用できないことを理由に、blog-write または blog-rewrite を決して中断しないでください。
代替テキストの生成
生成した画像ごとに、ブログの基準に沿った代替テキストを作成します。
- キーワードの羅列ではなく、内容を詳しく説明する文にします
- 10~125 文字にします
- トピックのキーワードを自然に含めます
- 画像に何が描かれているか、またコンテンツとの関連性を説明します
- グラフやインフォグラフィックの場合は、重要なデータポイントを含めます
良い例:マーケティングチームが、引用指標を表示するダッシュボードでAI検索トラフィックのデータを分析しています
悪い例:SEO AIマーケティングブログ最適化画像
セットアップ
/blog image setup の場合:
python3 scripts/setup_image_mcp.pyを実行します(対話形式)- または、
python3 scripts/setup_image_mcp.py --key YOUR_KEYを実行します(非対話形式) - デフォルトでは
~/.claude/settings.jsonに書き込みます(ユーザー専用、モード 0600) --projectフラグを指定すると、プロジェクトの.mcp.jsonを使用します(環境変数の展開のみ。追跡対象ファイルへのキーの直接書き込みは拒否されます)
- または、
python3 scripts/validate_image_setup.pyを実行して検証します- 次のものが必要です:
- Node.js 18+(npx)
- Google AI API キー(https://aistudio.google.com/apikey で無料取得できます)
- このスクリプトでは、パッケージを
@ycse/[email protected]に固定しています。バージョンを更新する場合は、setup_image_mcp.pyの定数PINNED_PACKAGEを更新してください。
安全性フィルターによる自動的な言い換え
IMAGE_SAFETY または SAFETY が返された場合は、あきらめないでください。自動的に言い換えて再試行します。
- トリガーとなった可能性のある内容を特定します(暴力、著名人、NSFW に近い内容、または過度に慎重なフィルター)
- 避けたい内容ではなく、望む内容を説明する肯定的な表現に言い換えます
- 人物が題材の場合は、一般的な人物にします(著名人を連想させる具体的な特徴を取り除きます)
- 場面がドラマチックな場合は、表現を和らげます。「intense」は「focused」に、「battle」は「competition」にします
- 言い換えたプロンプトで再試行します(ユーザーに報告する前に最大 3 回試行します)
Google は、フィルターが「想定よりもかなり慎重になった」と認めています。無害なプロンプトがブロックされる場合もあります。通常、言い換えて粘り強く試せば成功します。
何度も生成するのではなく編集する
画像が 80% ほど適切であれば、最初から再生成するのではなく、gemini_chat を使って対話形式で編集します。セッションではスタイルの一貫性が保たれるため、狙いを定めた編集で、うまくいっている部分を維持しながら問題を修正できます。
編集と再生成の使い分け:
- 色が少し違う → 編集(「色温度を暖かめにする」)
- 構図がまったく違う → 要件を修正して再生成
- 場面は良いが照明が違う → 編集(「左側からのゴールデンアワーの照明に変更する」)
- 詳細が足りない → 編集(「机の上に湯気の立つコーヒーカップを追加する」)
エラー処理
| エラー | 解決方法 |
|---|---|
| MCP が設定されていない | /blog image setup を実行します |
| API キーが無効 | https://aistudio.google.com/apikey で新しいキーを取得します |
| レート制限(429) | 60 秒待って再試行します。無料枠:およそ 5~15 RPM/およそ 20~500 RPD(モデルと課金状況によって異なります) |
IMAGE_SAFETY | 自動的に言い換えます(上記を参照)。レイヤー 2 のフィルターで、設定変更はできません |
PROHIBITED_CONTENT | コンテンツポリシー違反です。このトピックはブロックされており、再試行できません |
SAFETY | プロンプトを言い換えます(レイヤー 1 のフィルター) |
| 曖昧なリクエスト | 生成前に、確認の質問を 1 つします |
| 品質が低い | Reasoning Brief を確認します。照明(品質を左右する最大の要因)が不足している可能性があります |
| MCP が利用できない(内部呼び出し) | 何も返さずに終了します。呼び出し元のワークフローではストック写真を使用します |
リファレンスドキュメント
必要に応じて読み込みます。起動時にすべて読み込まないでください:
references/prompt-engineering-blog.md- ドメインモード、6 要素システム、ブログテンプレートreferences/gemini-models.md- モデル仕様、レート制限、アスペクト比、料金references/mcp-tools.md- MCP ツールのパラメーターと応答形式