日本人メジャーリーガーの前日成績を、毎日1枚のアート画像+短いキャプションにしてXへ自動投稿する——そんな制作事例を作った。ポイントは、これを「投稿づくり」ではなく毎日壊れない編集システムづくりとして設計したこと。速報で勝負せず"並ぶと育つ図鑑"を狙い、①日付検証で誤情報を防ぐ ②その日の主役を自動で選ぶ ③キャラクターシート参照で絵柄を安定させる、の3つを仕組みにした。本稿では、毎日回り続ける"工場"をどう作ったかを、設計判断ごと開示する。

01つくったのは速報ではなく、"並ぶと育つ図鑑"
狙ったのは、単なるスポーツ速報ではない。速さで勝負すれば、既存メディアやbotに勝てない。数字を一番早く並べる戦いは、最初から負けが見えている。かといって、毎日長文の解説を書くのは——熱量がある日はいいが、必ずどこかで止まる。続かないものを設計の中心に据えてはいけない。そこで定めたコンセプトは、「前日ハイライトを、1枚のアートインフォグラフィックとして残す」こと。
ニュース画像ではなく、シリーズものの図鑑に近い。1日単体で勝負するのではなく、並べたときに世界観が育っていく投稿にしたかった。毎日見てもらうより、積み重ねが資産になる設計だ。1枚画像+2〜4行のキャプション、という最小単位に絞ったのも、続けるための判断だった。
02最初の壁は、「昨日」が信用できないこと
いきなりの落とし穴は日付だった。日本時間の朝に作業すると、MLBの試合はまだ終わっていないことがある。「昨日の結果」と言っても、それが日本時間の昨日なのか、現地日付なのか、全試合が Final なのかで意味が変わる。ここを曖昧にすると、即座に事故る。
そこで最初に作った概念が latest verified MLB date——「いま、投稿に使ってよいと確認できた現地日付」を毎回決める仕組みだ[1]。
- MLB StatsAPI の
scheduleを見る - 対象の日本人選手が関係する試合を拾う
- それらが全て
Finalかを確認する feed/liveから成績を取り、必要ならボックススコアと突き合わせる- 未終了・中断・不一致があれば
Hold(投稿しない)
これで「昨日のつもりが一昨日だった」「終わっていない試合を確定扱いした」という事故を構造的に消した。候補日を新しい方から検証し、使える日付だけを返す——この地味な一本が、企画の土台になった。
毎日投稿で日付を間違えるのは、思っている以上に致命的だ。1日ずれた成績で1枚絵を作れば、間違いがそのまま画像として残り、拡散される。テキストの訂正より、誤った画像のほうが取り返しがつかない。だから「速さ」より先に「正しさを確認できる仕組み」を置いた。検証に通らない日は、無理に出さず Hold する——出さない判断を、システムができるようにしたのが大きい。
03データは「書く」ためでなく、「判断する」ために取る
次に作ったのは、対象選手の成績を抜くスクリプトだ。schedule から gamePk を拾い、各試合の feed/live で打撃・投球成績を抽出する。だが本当に大事だったのは、データを全部保存することではない。「今日の主役を誰にするか」を決められる形にすることだった。
主役選定は、毎回の気分で揺れないようにルールへ落とした。
- 決定打や勝敗への影響が大きい
- 本塁打・複数打点・好投など絵にしやすい
- 先発投手の好投
- 複数安打・四球・無失点リリーフなどの補助トピック
スポーツ投稿では、数字の大きさだけで主役は決まらない。1枚絵にしたときに「見える」数字かが効く。7回無失点10Kは絵になる。1安打3四球は文脈としては面白いが、主役絵にはしにくい。本塁打や好投のように一目で凄さが伝わる数字と、説明して初めて効く数字は、ビジュアルでの扱いが違う。この判断を人の気分でやると日によってブレるから、優先順位で固定した。
裏を返せば、データ取得は「主役を決めるための材料集め」に最適化されている。全部のスタッツを溜め込むのではなく、選定に効く指標を、選定できる粒度で持つ。出力(投稿)から逆算して、入力(データ)の形を決める——これも仕組み化の肝だった。
04短いキャプションほど、裏で文脈を作る
何日か作って分かったのは、当日成績だけ並べると淡白になることだった。「4打数2安打」「0.1回無失点」「3打数0安打」——事実は正しいが、読む理由が弱い。
そこで、指定日から直近10日ほどを見て、選手ごとの最近の出場傾向・今季成績・連続無安打・登板間隔・チーム勝敗をキャプション前に整理する処理を足した。最終的にキャプションは2〜4行に収める。だがその短い文の裏には、「今日は実出場が少ない日」「直近で無安打が続く」「登録のみの投手は次の出番待ち」といった編集判断が入っている。
短く見えるものほど、裏で文脈を作らないと薄くなる。毎日投稿で一番学んだことのひとつだ。
05画像の難所は、「同じ人物に見せ続ける」こと
画像は GPT Image 2 で作ることにした[2]。最初はプロンプトに特徴を書けば十分だと思っていた。だが毎日のシリーズでは、それだと崩れる。具体的には、こういう崩れ方が日替わりで起きる。
- 同じ選手なのに、日によって顔が違う/体格が違う/装備が違う
- 右打者が左打者っぽくなる(打席の左右が入れ替わる)
- 投手のグラブ手が逆になる
シリーズものは「1枚として良い」だけでは足りない。昨日の絵と地続きに見えることが命だ。1枚の完成度より、何十枚並べたときの同一人物性のほうが、図鑑としての価値を決める。
特に打席の左右が厄介だった。「左打ち」「右打ち」と単語で書くだけでは、生成側が平気で崩す。そこで二段構えにした。
- キャラクターシート運用:選手ごとに
spec.mdと完成PNGを持ち、生成時に参照画像として添付する。文章プロンプトだけに頼らない。 - 左右は単語でなくフォームを分解:左打者なら「本人の左手が上・右手が下・右足が前足・左足が軸足」。右打者ならその逆。ここまで書いて、ようやく崩れにくくなった。
面白い発見だった。AI画像生成では「概念」より「身体の構造」を指定したほうが安定することがある。
06生成も仕組み化し、"成功の再現条件"を残す
画像生成も手作業では回らない。そこで参照画像つき生成をスクリプト化した。--refs で指定した選手の最新キャラクターシートPNGを自動で探し(v1 / v2 … と増えても最大番号を優先)、参照画像として生成リクエストに渡す。
そして肝は、生成後に「どのプロンプトと、どの参照画像で作ったか」を manifest.json に残すことだ。画像生成は、成功したときほど再現条件を忘れやすい。だから、うまくいった日の裏側を必ず記録する。
画像比率は 1024×1024 の正方形に固定した。16:9や縦長も候補に見えるが、Xで毎日使うなら表示の安定が大事だ。正方形なら主役・数字・補助選手・下部コピーの位置を毎回揃えられ、見切れも少なく、並べたときの統一感も出る。比率の自由度を捨てたことで、逆に作る速度と品質が上がった。
これは制約の効用そのものだ。毎回ゼロから「どんな構図にしよう」と考えるのをやめ、固定フォーマットの中で中身だけを差し替える。デザインの自由度を意図的に削ると、判断の数が減り、ブレが減り、結果として速く・安定して出せる。シリーズものは「自由」より「型」が効く。
07本質は、編集判断を毎日再利用できる形に分解する
この仕組みがやっているのは、単にAIに投稿文や画像を作らせることではない。実際には工程を細かく分けている——データ取得 → 日付検証 → 主役選定 → 直近文脈の生成 → 構図案の比較 → キャプション作成 → キャラクターシート参照 → 画像生成 → manifest保存 → 記録 → 投稿後のふりかえり。
そして役割を割り振る。AIが得意なところはAIに渡す。事故りやすいところはルールとスクリプトで縛る。「AIで自動化する」というより、人間の編集判断を、毎日再利用できる形に分解する感覚に近い。これはCAGがクライアントワークでやっていることと同じだ——司令塔が判断の枠を設計し、つくり手が実装で固める。
AIに丸投げしても、AIだけに任せきっても、毎日は回らない。どこをAIに開き、どこを仕組みで閉じるか——その線引きこそが設計だ。生成(書く・描く)はAIが速い。だが「昨日が正しいか」「主役は誰か」「これは出していいか」という判断と検証は、ルールとスクリプトで固定したほうが毎日壊れない。この配分が、継続できる自動化と、すぐ止まる自動化を分ける。
08苦労は派手な生成でなく、地味な例外処理だった
華やかに見えるのは画像生成だ。だが本当に時間を使ったのは地味なところ——日付がズレる、試合が終わっていない、登録のみで出場がない、主役級の活躍がない日がある、画像の左右が崩れる、顔が似ない、小ネタが目立ちすぎる、キャプションが速報っぽくなる。この一つひとつを、気合いで直すのではなく仕様に戻した。
- 未検証なら画像生成しない
- 人物を描くならキャラクターシートを読む
- 投稿前に構図案を複数出して比べる
- 承認前に画像を生成しない
- 1投稿1仮説で「学び」と「次の改善」を残す
不思議なことに、こうした小さな制約が増えるほど、毎日の作業はむしろ楽になった。継続企画に必要なのは"すごい一発"ではない。昨日の自分の判断を、今日の自分が再利用できること。失敗の理由を、次のプロンプトや仕様に戻せること。データ・文章・画像・保存先・改善ログが一本の流れになっていること。最初は投稿を作っていた。途中から、投稿を作るための小さな工場を作っていた。そして今は、その工場自体が一つのコンテンツになり始めている。
毎日その都度の手作業 vs 仕組み化(CAG)。同じ「毎日投稿」でも、続けられるかどうかは作り方で決まる。
| 観点 | その都度の手作業 | 仕組み化(電脳技巧集団) |
|---|---|---|
| 「昨日」の正確さ | 人の記憶・タイムゾーン頼り→事故る | latest verified date(全Final確認・不一致はHold) |
| 主役選定 | 毎回の気分で揺れる | 「絵になる数字」優先のルールで固定 |
| キャプション | 当日成績だけ→淡白 | 直近10日の文脈を圧縮して2〜4行に |
| 画像の一貫性 | 日替わりで顔・左右が崩れる | キャラシ参照+身体構造指定+1:1固定 |
| 再現性 | 成功条件を忘れる | manifestにプロンプト×参照を保存 |
| 継続性 | 気合い依存→いつか止まる | 編集判断を再利用できる"工場"として回る |
※ 本記事は自社運用の自動投稿システムの記録。スクリプト名・工程は実装に基づく。選手個人の肖像・実名は本記事では一般化している。
出典・脚注
- 試合日程・成績は MLB StatsAPI(
schedule/feed/live等)を参照。日付確定は対象試合が全てFinalであることを確認してから行う。statsapi.mlb.com - 画像生成は OpenAI の GPT Image(gpt-image-2)。参照画像は Files API(
purpose=vision)でアップロードし、生成リクエストに添付。platform.openai.com/docs/guides/images - 本事例は電脳技巧集団(AI職人ギルド)が自社運用する日本人メジャーリーガー速報ポストの制作記録。工程・スクリプト構成は実装に基づく目安。生成アートは実在選手の肖像を描かず、内容は一般化している。









