プログラムを書くことに慣れていても、絵の意図をAIに伝えることには全く慣れていなかった。バイブコーディングでアプリを作り、その素材として画像生成AIを使い始めたとき、うまくいかない理由がしばらくわからなかった。

試行錯誤の中で気づいたのは、「プロンプトが下手」という話ではなく、「生成の前にやるべきことをやっていなかった」ということだ。SE的な思考でたどり着いた結論を記録しておく。

根本的な問題

プロンプトは仕様書だ。仕様が曖昧なら結果も曖昧になる。

SEの仕事は仕様を言語化することに近い。要件を整理して、条件を明記して、「こう動くべきだ」を文章にする。その訓練は積んでいるつもりだった。だからプロンプトもうまく書けるはずだと思っていた。

実際は違った。プログラムの仕様と画像のプロンプトは、必要とされる言語化の種類が根本的に異なる。「ふんわりした雰囲気で」「かっこいい感じで」——SEなら提案段階で突き返すような要件定義だが、自分が画像に持っているイメージはそのレベルのことしか言えなかった。

なぜか。明確なビジョンがないからだ。コードは「動く・動かない」で判定できる。絵は「なんか違う」しか言えない。その「違う」を的確に言語化する力——どこが違うのか、何がそう感じさせるのか——は、絵を描き続けてきた人には自然に身についている能力だ。コードしか書いてこなかった自分にはなかった。

失敗の記録

微妙なニュアンスが、伝わらない。

生成を試みるたびに、ズレが出た。「もう少し暗めに」という指示が、想定の倍暗い出力になる。「右の要素を少し左に」が、全体の構図を変えてくる。「同じ雰囲気で別バージョン」が、全く別物を出してくる。

微修正が効かない理由は、AIが「絶対的な差分」ではなく「相対的な解釈」で動いているからだ。人間なら「ちょっとだけ」の意味がわかるが、AIには「ちょっと」の絶対的な基準がない。結果として、軽い修正指示が大きな変化を生む。コードのdiffとは違う世界の話だ。

また、生成AIは「前の状態」を参照しているわけではない。毎回ゼロから生成しているため、「さっきのに近い感じで少し直して」が意図通りに動かないことが多い。「修正」ではなく「再生成」が起きている。この違いを最初に理解していなかった。

力技

出るまで回す、という戦略。

失敗が続いたので、方向を変えた。「ピンポイントで狙う」のをやめて、「大量に生成して当たりを選ぶ」に切り替えた。同じプロンプトで何十枚も出して、使えそうなものだけ採用する。パチスロ的な発想だが、これは実際に機能した。

コストは高い。トークンが溶ける。ただ、微修正に何度も失敗するより効率的な場合がある。狙い撃ちより面でカバーした方が早いことがある——それはゲームのRNG攻略でも同じ考え方だ。

// Tips

コンテキスト汚染:突然おかしくなる理由

ガチャ戦法を続けていると、あるタイミングで突然、意図と全く関係ない画像が出てくることがある。「なぜかシュールなものが出てきた」「雰囲気が完全に別物になった」という状態だ。

これはAIのコンテキスト(会話履歴)が汚染される現象だ。生成AIは会話の全履歴を参照して次の出力を決める。試行が積み重なるにつれ、コンテキスト内に「修正指示」「失敗した生成の補足説明」「追加条件」が大量に蓄積する。この積み重なりが元のコンセプトを数の上で圧倒し、モデルが何を生成すべきかの判断がブレていく。

一度この状態になると、同じセッション内では元に戻らない。「元に戻して」という指示も、汚染されたコンテキストの上に乗るからだ。解決策は新しいセッションを開いてやり直すだけ。その際、うまくいっていた段階のプロンプトを手元に控えておくと、再出発が早い。

試行錯誤

画像を渡してみた。手直ししてみた。

言葉だけでは伝わらないなら参考画像を渡す、という方法を試した。大まかなスケッチや雰囲気の近い画像と合わせてプロンプトを提供する。これは一定の効果があった。ただし問題が出た。

AIは渡された画像を、想定より忠実に参照する。「あくまでも参考」のつもりで粗い図を渡すと、その粗さごと反映されてくる。構図が雑なら出力も雑になる。「こんな感じ」と意図していた部分ではなく、「この形のまま」として処理される感覚があった。

出力を自分で手直しして再度渡す方法も試した。AIが出してきた画像を一部加工して「これに近い感じで」と渡す。これはうまくいくこともあったが、自分での手直しに時間がかかりすぎた。「AIを使って効率化する」のに「自分が一番手間をかけている」という逆転が起きた。

結論

生成の前に、言語化する。

最終的にたどり着いたのは、順序の入れ替えだった。画像を生成する前に、AIと対話してコンセプトを先に言語化する。

具体的な手順はこうだ。まず、生成AIに「どんな画像にしたいか」を対話形式で整理してもらう。「どんな雰囲気が好きか」「何を強調したいか」「何は入れたくないか」を問答形式で引き出してもらう。この時点では画像を生成しない。コンセプトの言語化だけに集中する。

整理されたコンセプトをもとに、今度は「このコンセプトを画像生成AIに伝えるための最適なプロンプトを作って」と頼む。AIはこちらの意図を理解した上でプロンプトを生成してくれるため、自分で書くより精度が高い。そのプロンプトを画像生成AIに渡す。「イメージの言語化」にAIを使い、「画像生成」に別のAIを使う二段構えだ。

試行回数が大幅に減った。ガチャを回す前に「何を引きたいか」を整理する——当たり前の話だが、やっていなかった。

まとめると

SEにとって画像生成は「仕様が固まる前に実装を始める」作業だった。プロンプトは仕様書であり、仕様が曖昧なら結果も曖昧になる。先にAIとの対話でイメージを言語化してから生成に入る——本来の順序に戻したら、試行錯誤の回数が大幅に減った。