👩‍🎨

【技術検証】「Geminiの方が賢い」説あるけど、あえて gpt-image-1.5 でバナー生成アプリを作った話

に公開

こんにちは、月ねこAI@nekoai_lab です。

最近、画像生成AIの進化が止まりませんね。Googleの Gemini (Imagen 3) は日本語の理解力が凄まじいですし、コストも安い。
それでも私は、2024年末にリリースされたOpenAIの gpt-image-1.5 を選び、自分専用のバナー生成ツール 「Tsukineko Banner Maker」 を開発しました。

なぜGeminiではなく、あえて「扱いづらい」と言われるOpenAIの新モデルを選んだのか?
そして、Noteで公開した「最強のプロンプト・テンプレート」を、なぜわざわざアプリ化して封じ込める必要があったのか?

この記事では、その「技術的な意思決定」と、APIだからこそ実現できた「制御不能なAIをハックする裏技」を全公開します。

@月ねこバナーメーカー

1. 開発の動機:「コピペ地獄」からの脱出

以前、私はNoteで日本語で意図を伝え、英語の固定ブロックで縛るというプロンプトの“勝ち型”を紹介しました。

この手法は再現性が高いのですが、致命的な弱点がありました。毎回、呪文のような英語の制約文をコピペして、変数だけ書き換えるのが面倒すぎるのです。

  • 人間がやること: 「余白は80px」「ロゴは入れない」「配色はこれ」…という管理。
  • 本来やりたいこと: 「春っぽいセールのバナー作って」の一言だけ。

「この“面倒な制約プロンプト”をアプリの裏側に全部隠蔽(カプセル化)してしまえば、UIでポチポチするだけで最強のバナーが作れるのでは?」
これが、アプリ開発の出発点でした。

2. なぜ Gemini ではなく gpt-image-1.5 なのか?

ここが最大の技術選定ポイントです。正直、日本語プロンプトの理解力だけで言えば Gemini (Imagen 3) の方が優秀だと感じることすらあります。

しかし、実務用バナーという用途に絞ったとき、以下の理由で gpt-image-1.5 の線も残しておきたかったのです。なによりChatGPTImagesならではの絵の柔らかさが好き。ただそれだけの理由で。

徹底比較:gpt-image-1.5 vs Gemini (Imagen 3)

特性 OpenAI (gpt-image-1.5) Google (Imagen 3) 私の結論
デザインの画作り Artistic & Stylish
欧米のデザインエージェンシーっぽい、抜け感のある構図が得意。
Clean & Perfect
非常に綺麗で破綻が少ない、優等生「広告バナー」としては少し硬くなりがち。
OpenAI の「デザイン力」が好き!
英語タイポグラフィ 最強 (Typography Master)
SALE 50% などの文字をデザインの一部として美しく配置する能力が圧倒的。
優秀
文字は正確に出るが、フォントの選び方やカーニング(文字詰め)のセンスはOpenAIがやや上。
バナーには OpenAI も組み込みたい。
日本語理解 △ 英語変換が必須
日本語のニュアンス(「ふんわり」「抜け感」)が伝わりにくい。
◎ ネイティブレベル
日本語の形容詞がそのまま通じる。
ここはアプリ側でカバーできる。
制御のしやすさ △ 暴れ馬
油断するとレイアウトが崩れる。強力な制約が必要。
○ 素直
指示に忠実。
暴れ馬を乗りこなすのがエンジニアの仕事!

つまり、センスとタイポグラフィは最高だが、言うことを聞かないOpenAIを、アプリ(プログラム)の力で無理やり制御するというアプローチを取りました。

3. アプリに詰め込んだ「制御ロジック」の全貌

このアプリの本質は、UIではなくプロンプトエンジニアリングのカプセル化です。
Noteで書いたノウハウを、以下のアーキテクチャで自動化しました。

4. gpt-image-1.5 をハックする3つの技術的工夫

アプリ化する過程で判明した、APIならではの挙動と、それを解決するハックを紹介します。

① AIの「色覚」をハックする(HEXコード問題)

Streamlitのカラーピッカーで #E94560 を選んでAPIに投げても、AIは「くすんだ赤」を出したりします。
AIは16進数より、ポエムのような色の名前が好きという特性を利用し、変換ロジックを実装しました。

prompt_builder.py
# 内部で持っている巨大な色辞書
COLOR_NAMES = {
    (233, 69, 96): "vibrant coral pink", # #E94560
    (0, 128, 128): "teal",
    # ...他100色
}

def hex_to_name(hex_code):
    # HEXコードを、AIが一番理解しやすい「英語の色名」に変換してプロンプトに埋め込む
    # これにより、ブランドカラーの再現率が劇的に向上!
    return closest_color_name

ユーザーはHEXで選び、AIには vibrant coral pink と伝わる。これがアプリの役割です。

② バリエーション生成は「ループ処理」が鉄則

「構図を変えて4枚作って」と頼むと、gpt-image-1.5 は気を利かせて1枚の画像の中に4つの構図を詰め込んだコラージュ画像を作ってきます。おせっかいです。

これを防ぐため、アプリ側でプロンプトを分割し、ループで回します。

app.py
variations = ["Close-up", "Wide angle", "Dutch angle"]
for var in variations:
    # 1枚ずつ、個別の制約付きプロンプトを発行
    prompt = build_prompt(base_req, specific_var=var)
    client.images.generate(prompt=prompt, n=1) # n=4は使わない!

コストは同じですが、クオリティは段違いです。

これやんないと、出来たはいいけどあれれとなるやつ ↓(例)

③ 参照画像は Vision API で「翻訳」する

gpt-image-1.5img2img (画像から画像生成) が苦手です(※編集APIを除く)。
そこで、GeminiやGPT-4oが得意な言語化を挟みます。

  1. ユーザーが参考画像をアップロード
  2. 裏で gpt-4o-mini (Vision) が起動
  3. 「この画像の画風、線の太さ、塗りのタッチを詳細に英語で描写して」と命令
  4. 出力されたテキストを、生成プロンプトの先頭に [STYLE REFERENCE] として注入

これにより、疑似的に「画風のコピー」を実現しています。

5. 開発中にハマった gpt-image-1.5 の罠

API移行組のために、エラーの解決策を置いておきます。

エラー内容 原因 対処法
Unknown parameter: response_format DALL-E 3の癖で b64_json を指定しがち。 指定不要。デフォルトでBase64が入っています。
403 Organization must be verified 新モデルからセキュリティ強化。 OpenAI管理画面でPersona認証(本人確認)が必須です。
日本語が豆腐化する プロンプトに日本語を混ぜすぎた。 テキスト描画指示は英語のVerbatimモード"TEXT")で行う。

6. まとめ:アプリ化して見えた景色

「プロンプトエンジニアリング」は重要ですが、それを毎回手入力するのはエンジニアの仕事ではありません。

  • Gemini は賢いアシスタント。会話で詰めるなら最強。
  • gpt-image-1.5 は気難しいアーティスト。でも専用の通訳(アプリ)を通せば、最高の仕事をする。

今回作った「Tsukineko Banner Maker」は、まさにその「通訳」です。
Noteで書いた英語の固定ブロックで縛るというノウハウをコード化したことで、私はようやく「デザインの試行錯誤」だけに集中できるようになりました。

プロンプトを頑張るのに疲れたら、「プロンプトを作るアプリ」を作ってみる。これ、おすすめです!


最後に

どんなのつくれるの?の参考までに
以下は「猫カフェ春のキャンペーンバナー(テキスト入れに最適化されたバナー)」です。
こんなのや、四季バナーなど、、ポチポチするだけで、色々作れます。難しい制約は裏にしまって。
参照画像はNanobananaPro級ではないですが、頑張ってます。

noteブログに書いたimagesのプロンプト一覧全部使えるようにしたらボリューミーに、、
公開はCloudRunの使用を予定。

リポジトリでコードを公開しています。
Streamlitの構成や、HEX変換ロジックなど、興味がありましたら見てください。


📚 参考文献(URLリスト)

  1. プロダクト・ソースコード(GitHub) https://github.com/nekoai-lab/tsukineko-banner-maker
  2. 開発の元となった着想(Note) https://note.com/nekoai_lab/n/ncd0d8852e2bb
  3. OpenAI 公式ドキュメント
     ・モデル仕様: https://platform.openai.com/docs/models/gpt-image-1.5
     ・プロンプトガイド: https://cookbook.openai.com/examples/multimodal/image-gen-1.5-prompting_guide
     ・料金表: https://platform.openai.com/docs/pricing

Discussion