AI運用記録

【悪夢】AI自動化がライブ記事を汚染!FANBOX記事本文に顔画像を誤爆した、僕の冷や汗復旧戦記

By Kosei
【悪夢】AI自動化がライブ記事を汚染!FANBOX記事本文に顔画像を誤爆した、僕の冷や汗復旧戦記

「うわ、終わった……」 深夜、PC画面に広がるライブ記事の異変に、僕は思わず声を上げていました。AIに任せて自動化を進めていたFANBOXのカバー画像差し替え作業。完璧だと思っていたその裏で、まさか、収益に直結する記事の本文に、まったく関係のない顔画像が誤挿入され、さらには予約ま...

「うわ、終わった……」

深夜、PC画面に広がるライブ記事の異変に、僕は思わず声を上げていました。AIに任せて自動化を進めていたFANBOXのカバー画像差し替え作業。完璧だと思っていたその裏で、まさか、収益に直結する記事の本文に、まったく関係のない顔画像が誤挿入され、さらには予約まで破損しているなんて……。

効率化の夢を描いて導入したAI自動化が、一瞬にして僕の心臓を凍りつかせました。これは、誰もが陥る可能性のある「AI自動化の落とし穴」かもしれません。

今回の検証テーマ

・AIによるクリエイターコンテンツ自動編集の安全性検証 ・ライブ投稿におけるAI自動化の脆さの露呈 ・万が一のデータ汚染時の具体的な復旧戦記

AI自動化の甘い罠に落ちた僕の、冷や汗が止まらない夜 🚨

僕は日頃から、クリエイターとしての活動を支えるさまざまな作業をAIで自動化しようと試みています。特にFANBOXのようなクリエイター支援プラットフォームは、定期的な更新が収益に直結するため、自動化の恩恵は大きい。

「もっと効率的に、もっと安全に」そう信じて、日々スクリプトと向き合っていました。今回のテーマも、そんな思いから始まったんです。

収益化コンテンツをAIに託す決断:FANBOXカバー画像の一括変更 💡

きっかけは、FANBOXの投稿一覧に並ぶカバー画像への違和感でした。これまでの自動投稿スクリプトでは、コンテンツの露出レベルに合わせて、カバー画像を「商品POP」的なものに差し替えるルールを適用していました。これはこれで理にかなっていたんですが、フォロワーさんから「予約一覧のサムネが統一感がなくて分かりにくい」という声も聞かれるように。

そこで、新しい方針として「全ティア、顔のカバー画像に統一する」という決断をしました。人間が手作業で1つ1つ変更するのは大変なので、ここももちろん、AI自動化の出番です。

顔の検出には、AIコンタクトシートを目視で確認して最適な秒数を指定する独自の方式を導入。かなり手間をかけて準備したつもりでした。

こせいメモ

効率化を目指すなら、既存のルールをAIに任せて変更するのは当然の選択だと思っていました。まさか、この「当然」が後々大きな落とし穴になるとは、この時は夢にも思っていませんでした。顔検出の自動化も試したけど、フィギュアの顔は意外と難しくて、最終的には人間の目とAIの力を組み合わせる方式になったな。

既存の予約投稿に対しても、この新しい顔カバーを適用したい。しかし、FANBOXの仕様上、**予約済みの記事は「下書きに戻すまで編集できない」**という壁にぶつかりました。そこで僕は、自動投稿スクリプトに「下書きに戻す→カバー画像を差し替える→再度予約する」という一連の処理を自動で行う --cover-only モードを実装したんです。

これで、完璧だと思いました。

⚠️ 時系列で辿る、AIがライブ記事を"破壊"した一部始終

そして、悪夢は訪れました。

時間出来事感情 / 気づき
深夜FANBOX既存投稿の編集を開始
--cover-only モードを使い、既存予約記事5件(商品POPカバー)に対して顔カバーへの差し替えを試みる。
これで統一感が生まれるはず!
数分後エラー発生の予兆
画面の挙動に違和感。カバー画像が期待通りに差し替わらない。何かがおかしい。
あれ?どういうことだ……?
確認信じられない光景が目に飛び込む
7月7日付けの記事を開くと、本来カバー画像が差し替わるはずが、記事本文の冒頭に、顔画像がドカンと誤挿入されている。そして、その記事の予約状態も「公開待ち」から「下書き」に戻ってしまっている……。
「うわ、終わった……」「おいおい嘘だろ…」冷や汗が止まらない。
原因究明セレクタのわずかなミスが判明
既存カバーがある場合、カバー用入力フィールドは一度「✕で削除」しないと出現しない仕様だった。
スクリプトが誤って、カバー画像用入力フィールドのセレクタではなく、本文画像挿入用の入力フィールドのセレクタにマッチしてしまい、本文に顔画像を誤挿入。同時に予約も破損した。
まさかこんな簡単なミスが、ここまで致命的な事態を招くとは……。
今回のやらかし

AIによる自動編集で、ライブ投稿の記事本文が顔画像で汚染された! しかも、予約も破損。収益に直結するコンテンツが危ない状況に。 セレクタのわずかなミスが、たった1つの記事だけでなく、もしかしたら連鎖的に他の記事も破壊する可能性があったと思うと、本当に恐ろしかったです。

実験ログ

・使用AI:Claude / Gemini ・作業時間:泥沼の数時間(感覚) ・発生エラー:FANBOX記事「本文汚染」、記事「予約破損」 ・精神ダメージ:★★★★★

Image 01 - 02 article01

ファイル名:02_article01.png

用途:セレクタミスによる誤挿入の概念図

Prompt: A minimalist and clean diagram showing a digital screen representing a "Live Blog Article". On the screen, there's a title and some text. An arrow points from a "Robot Hand" representing AI Automation, to an "Input Field A (for Cover Image)". However, a dotted line with an "X" mark leads to "Input Field B (for Article Body Image)" and shows a "Face Image" being inserted into the article body text, instead of the cover image area. A "Danger!" icon is visible near the article body. No text, no letters.

一歩間違えば大炎上...壊れた記事を救い出した、僕らの復旧戦記 ✅

何が起きたかを理解した瞬間、全身から血の気が引きました。これは僕一人の失敗では済まない。読者、そしてクリエイター活動そのものへの信頼に関わる問題です。一刻も早く復旧しなければ。

時間復旧アクション感情 / 気づき
深夜誤挿入画像の削除
手動でFANBOXの管理画面を開き、7月7日付けの記事本文に誤挿入された顔画像を、記事エディタの削除ボタンで取り除く。変更を保存。
心臓がバクバクしながら、とにかく慎重に、一つ一つの作業を進める。
数分後記事の再予約
自動投稿スクリプト--reserve-only モードを使い、7月7日付けの記事を再予約。これにより、ステータスが再び「予約投稿」に戻り、publishAt(公開日時)も元通りになったことを確認。
とりあえず一安心……。
最終確認本文のクリーン化を確認
7月7日記事の本文が完全にクリーンになり、元の状態に戻っていることを目視で確認。また、他の13件の予約投稿(7/10〜7/20)も無事に予約維持されていることを物理的に確認。
大炎上は免れた。ホッと胸をなでおろす。
緊急コード安全化セレクタの厳密化
カバー画像用入力フィールドのセレクタaccept="image/jpeg,image/png" と、完全に一致する文字列のみを対象とするように修正。これにより、本文画像挿入用の入力フィールドのセレクタのような曖昧な指定にマッチするのを防ぐ。
このミスは二度と繰り返さない。安全装置を強化するしかない。
モードの見直し自動投稿スクリプト--cover-only モードは、**既存カバーがある場合はカバー差し替えをスキップし、再予約のみを行う「安全動作」**に変更。既存カバーの正しい差し替え(「✕で削除」ステップ)は未実装と判断し、安易な実行を回避。既存ライブコンテンツへの変更は、慎重すぎるくらいでちょうどいい。
ユーザーへの判断提示既存予約カバー差し替えの中断
既存のライブ収益投稿に対するin-place編集は非常に脆く危険であると判断し、ユーザーに3つの選択肢を提示。
A: 既存5件は商品POPのまま、今後分のみ顔カバー適用(現状維持)
B: 5件を削除して顔カバーで作り直し
C: 「カバー✕削除」ステップを慎重に実装しin-place差し替え
最終的な判断は、人間が下すべきだ。機械任せにせず、リスクを共有する。
ユーザー最終選択A案「既存5件はPOPのまま、今後分のみ顔カバー適用」で確定
ライブ収益投稿のin-place編集リスクを回避するため、現状維持を選択。自動投稿スクリプトから実験的な --cover-only 機構は全撤去され、元のクリーンな状態へ戻された。
正しい判断だ。今回は大きな教訓を得た。
今回学び

ライブコンテンツの自動編集は、何重もの安全策が必要。特に収益に直結する場では。 ・セレクタは、可能な限り具体的に「完全一致」で指定する。ワイルドカードは危険。 ・既存データへの変更は、必ずテスト環境で慎重に行うか、作り直すオプションも検討する。 ・「ユーザーによる最終承認」は、自動化の最後の砦として非常に重要。 ・万が一の「復旧手順」を事前に想定しておくことが、精神的ダメージを軽減する。

Image 02 - 03 article02

ファイル名:03_article02.png

用途:トラブル復旧プロセスのフロー図

Prompt: A clear and concise flowchart depicting a recovery process. Start with a "Problem Detected (Article Body Polluted)" box. Then, "Manual Deletion of Misinserted Image" leads to "Save Changes". This is followed by "Re-reservation via Script (--reserve-only)". Next, "Verification (Clean Body, Reserved Status)". Finally, "Code Safety Enhancement (Strict Selector Enforcement)" and "User Decision (Stop In-place Editing)". Use simple arrows for flow. No text, no letters.

安易な自動化が引き起こす代償と、守るべき鉄則 📌

今回の件で、僕はAI自動化の「光」と「影」をまざまざと見せつけられました。効率化は魅力的ですが、その裏には常に、予期せぬトラブルのリスクが潜んでいます。特に、収益に直結するライブコンテンツの自動編集においては、その代償は計り知れません。

安易な自動化が引き起こす代償

  • 収益への直接的な影響: 記事の破損や予約の喪失は、クリエイターにとって大きな損失です。
  • 信頼の失墜: 読者や支援者からの信頼は、一度失うと取り戻すのが非常に困難になります。
  • 精神的コスト: 復旧作業にかかる時間だけでなく、精神的な疲弊は想像以上に大きいものでした。

守るべき鉄則

セレクタの厳密性を徹底する

ワイルドカード的なセレクタは便利に見えて、予期せぬ要素にマッチする可能性があります。input[accept*="image/jpeg"] のような曖昧な指定ではなく、input[accept="image/jpeg,image/png"] のように、可能な限り厳密で具体的なセレクタを指定することが命綱になります。

デリケートな操作には多重の安全装置を

特に「既存データの変更」や「公開を伴う操作」には、通常よりも多くの安全装置が必要です。テスト環境での入念な確認、人間の目による最終チェック、そしてスクリプト側での「危険な操作はしない」という設計思想が重要です。

段階的な導入とテストを繰り返す

いきなり大規模な自動化を導入するのではなく、ごく小さな範囲で試し、その挙動を徹底的に検証する。そして、問題がないことを確認しながら、徐々に適用範囲を広げていくのが鉄則です。

人間によるチェックポイントを設ける

「完全に自動化する」ことだけが正解ではありません。今回の事例のように、最終的な公開や重要なデータ変更の直前には、人間による最終承認や目視確認のステップを挟むべきです。AIはあくまで強力なツールであり、意思決定は人間が行うべきだと改めて痛感しました。

ロールバックと復旧計画を事前に用意する

「もし壊れたらどうするか?」この問いに対する明確な答えを、自動化を導入する前に用意しておくべきです。バックアップ体制、ロールバック手順、緊急停止スイッチなど、万が一の事態に備えることが、トラブル発生時のダメージを最小限に抑えます。

Image 03 - 04 article03

ファイル名:04_article03.png

用途:AI自動化のリスクと安全策のアイコンリスト

Prompt: A clean, digital infographic with five distinct icons. Each icon represents a key principle for safe AI automation. 1. A magnifying glass over code, symbolizing "Strict Selectors". 2. A shield with a padlock, symbolizing "Safety Devices for Delicate Operations". 3. A ladder or stepping stones, symbolizing "Phased Implementation and Testing". 4. A human eye looking at a checklist, symbolizing "Human Checkpoints". 5. An undo arrow or backup disk, symbolizing "Rollback and Recovery Plan". Use a minimalist and clean style with a limited color palette (e.g., blues, greens, greys). No text, no letters.

あなたのコードは大丈夫?AI任せにする前に確認すべき3つのこと 🧪

AI自動化は、現代のクリエイターにとって強力な武器です。しかし、その力を正しく使うためには、リスク管理が不可欠です。僕と同じような冷や汗をかかないために、あなたのコードをもう一度見直してみませんか?

1. セレクタは「完全一致」を徹底していますか?

あいまいなセレクタは、想定外の挙動を招く地雷になり得ます。

  • input[accept*="image/jpeg"] のようなワイルドカード指定は避けていますか?
  • input[accept="image/jpeg,image/png"] のように、厳密な属性値の完全一致でターゲットを指定していますか?

2. 「既存コンテンツへの編集」に特別な安全装置はありますか?

ライブコンテンツや重要なデータへの変更は、慎重中の慎重を期すべきです。

  • 自動編集の前に、必ずテスト環境で変更をプレビューするステップを挟んでいますか?
  • 既存の公開済みコンテンツを下書きに戻す際、その後の復旧プロセス(再予約など)まで考慮に入れていますか?
  • --dry-run オプションなど、実際に操作せず結果をシミュレーションできる機能は備わっていますか?

3. 「もし壊れたらどう復旧するか」まで考えていますか?

トラブルはいつか必ず起きます。その時、パニックにならずに対応できる準備ができていますか?

  • 自動化の対象となるデータのバックアップは定期的に取っていますか?
  • もし意図しない変更が加えられた場合、手動でロールバックする手順は明確ですか?
  • 緊急時に自動化を停止できる「人間が介入するスイッチ」はありますか?

今回のトラブルは、僕にとって大きな教訓となりました。AI自動化は僕たちの作業を助けてくれる素晴らしいツールですが、完全に「お任せ」にするのではなく、その力を理解し、適切に制御する責任は常に人間側にあると強く感じています。

今後の課題: 既存カバー画像のin-place差し替えは、今回撤去した「カバー✕削除」ステップの実装を含め、さらなる安全策の検討が必須です。また、ウェブサイトのDOM変更は常に起こりうるため、そうした予期せぬ変更への耐性をどう高めていくかも、継続的な実験テーマとなります。AIとの付き合い方は、まだまだ試行錯誤の連続ですね。

この記事のまとめ

・AI自動化は強力だが、ライブコンテンツの編集には細心の注意が必要。 ・セレクタのわずかなミスが、記事本文汚染や予約破損という大事故に繋がりかねない。 ・復旧は可能だが、時間と労力がかかり、精神的ダメージも大きい。 ・厳密なセレクタ、人間のチェックポイント、そして万が一の復旧計画が不可欠。 ・今後の課題: 既存カバーのin-place差し替えは、さらなる安全策の検討が必須。

あわせて読みたい

AI運用記録2026年7月6日

【やっちまった】Git履歴にGCP秘密鍵を大公開!僕が冷や汗で学んだセキュリティ修復の全記録

週末前の深夜、僕はいつも通りの開発作業に没頭していた。自動投稿システムの最終調整や、複数のプロジェクトの基盤整備に追われ、正直なところ集中力は限界に近かったと思う。そんなある時、ふと、胸騒ぎがしたんだ。 自分のプロジェクトのリポジトリを眺めていて、あるファイル名が目に飛び込んでき...

AI運用記録2026年5月30日

【仕様変更に負けない】スクレイピング価格結合バグの全データ一括修復と、Next.jsでGA4アクセスデータから人気ランキングを動的ビルドする泥臭い自動化の裏側

・ランキング記事の手動更新が面倒で放置してしまっている ・放置した記事のアクセス数が落ちて悩んでいる ・静的サイト(Next.js/SSG)でデータベースを使わずに自動更新ランキングを作りたい 読者の疑問・悩み: 「せっかく作ったランキング記事だけど、更新するのが面倒で放置してし...

AI運用記録2026年5月28日

【悲報】Pinterest自動投稿を夢見た個人ブロガー、無慈悲な『API拒否』で散る

「ブログ運営をAIと自動化でラクにしたい!」 そう思ってPinterest APIに突撃した結果、見事に弾かれました。 返ってきたのは、無慈悲な401エラーの画面。 “Trial access is not allowed” 「うわ、終わった…」 そう画面の前でリアルに声が出ました。 [...

AI運用記録2026年5月27日

【Docker Desktop不要】無料でDocker開発環境を作る方法。実際にハマったエラーも公開

Docker Desktopを使わなくても、開発環境は普通に作れます。 ぼくも最初は「Docker Desktopが有料になったなら、代替手段を探すしかないか」と思いました。 調べてみると、意外と必要なのはDocker Engineと少しの設定だけでした。 しかも、Docker Desktop...