【技術検証】「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進数より、ポエムのような色の名前が好きという特性を利用し、変換ロジックを実装しました。
# 内部で持っている巨大な色辞書
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つの構図を詰め込んだコラージュ画像を作ってきます。おせっかいです。
これを防ぐため、アプリ側でプロンプトを分割し、ループで回します。
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.5 は img2img (画像から画像生成) が苦手です(※編集APIを除く)。
そこで、GeminiやGPT-4oが得意な言語化を挟みます。
- ユーザーが参考画像をアップロード
- 裏で
gpt-4o-mini(Vision) が起動 - 「この画像の画風、線の太さ、塗りのタッチを詳細に英語で描写して」と命令
- 出力されたテキストを、生成プロンプトの先頭に
[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リスト)
- プロダクト・ソースコード(GitHub) https://github.com/nekoai-lab/tsukineko-banner-maker
- 開発の元となった着想(Note) https://note.com/nekoai_lab/n/ncd0d8852e2bb
- 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