パイプラインに「意思」を持たせる — Antigravity キュー連携と画像生成の再設計

パイプラインに「意思」を持たせる

道具というのは、使うたびに同じ手順を踏まなければならないなら、それは道具ではなく儀式だ。

今日の作業の本質はそこにある。毎回「これをやってくれ」と指示を出し続けるのではなく、システムが次のタスクを自分で見つけて動く仕組みを作ること。


問題:エージェントは「聞かれないと動かない」

Antigravity(Gemini 2.0 Flash)は画像生成が得意だ。しかし今まで、記事ごとに「この記事の画像を作ってくれ」と毎回伝える必要があった。記事が増えれば増えるほど、その指示出しが積み上がる。

これはシステムの問題だ。エージェントの問題ではない。


解決:GitHub Issue をタスクキューにする

今日仕込んだ仕組みはシンプルだ。

# Claude が generate を実行すると
python3 scripts/article_pipeline.py generate --issue N

# 自動的に以下が起きる
1. Gemini がドラフトの <!-- image: TYPE | メモ --> を読んでプロンプトを英語に展開
2. raw/prompts.json にプロンプトを保存
3. GitHub Issue に status:needs-images ラベルを付与
4. Issue にコメントで次のアクションを明記

Antigravity はセッション開始時に一行叩くだけでいい。

gh issue list --repo Terralien-jp/sites --label "status:needs-images" --state open

ラベルがついた Issue が見つかれば、prompts.json を読んで画像生成 → imagespublish まで走る。publish が完了した瞬間、Issue は自動クローズされ status:published に変わる。次回セッションでは --state open で絞るので、処理済みのものは二度と出てこない。

多重実行の心配もない。 publish コマンドはスラグ重複チェックを持っているからだ。


Gemini によるプロンプト展開

もう一つ重要な改善がある。記事ドラフトに書く画像メモは日本語のラフなメモでいい。

<!-- image: featured | 夜の東京湾。タンカーが接岸。aikoが地図を見て青ざめている -->

これを Gemini(テキスト生成)が lore/characters/ のキャラ設定を読み込んだ上で、200語の英語プロンプトに展開する。

A cinematic wide-angle editorial shot of Tokyo Bay at night...
aiko, 4.5-head tall chibi with silver twin-tails in a miko outfit,
looks pale and worried while holding a detailed map...

以前は lore/characters/{name}.md(スタブ)を読んでいたため、キャラ設定が空で渡っていた。今日それを修正し、正本である lore/characters/{name}/index.md を優先して読むよう変更した。これで生成プロンプトにaikoの「銀ツインテ・巫女服」が正確に反映されるようになった。


Nano Banana 2(API画像生成)は棚上げ

gemini-3.1-flash-image-preview による画像生成 API は、コスト管理の観点から現時点では棚上げとした。テストで60円弱かかったこと、無料枠のクォータが実質ほぼないことが判明したためだ。

当面は以下の運用とする。

ステップ担当
プロンプト展開Gemini テキスト生成(無料枠で十分)
画像生成Antigravity(月額内)
変換・公開imagespublish コマンド

API画像生成を再有効化する場合は --enable-api-gen フラグを追加する設計にしてある。


副産物:wp_publisher の draft 問題

今日、Antigravity がデプロイした記事が status: draft のまま残っていることが判明した。wp_publisher.py --mode publish が内部的に draft として投稿していたケースがあったようだ。

WP REST API で直接 status: publish に切り替えて解消したが、根本原因は wp_publisher の publish モードの挙動にある。引き続き調査が必要だ。


今日の教訓

「毎回指示を出す必要があるシステムは、半分しか完成していない。」

GitHub Issue をキューにするアプローチは、Antigravity に限らず今後どのエージェントにも適用できる汎用パターンだ。Issue のラベルがステートマシンになる。needs-imagespublished という遷移が、そのままデプロイフローの可視化になる。

次は Journal 自体の自動生成も視野に入る。今日みたいな改善セッションが終わった後、Issue から自動的に Journal の下書きが生成される、という仕組みだ。

まだそこまで届いていない。でも仕組みの骨格は見えてきた。


ZashStudio 技術監修 2026-04-06