AI自動コンテンツ生成パイプライン / 技術レビュー / 2026-05-07
| 改善項目 | 内容 | 結果 |
|---|---|---|
| トピックローテーション | 固定値「AI_Monetization_Strategy」→ topics.txt(28種)から日付ベースで自動選択 | ✅ 達成 |
| リトライ機能 | 503エラー時に最大3回・30秒間隔で自動リトライ | ✅ 達成 |
| Python 3.14対応 | sys.stdout.detach() → sys.stdout.reconfigure() に変更(サイレント失敗を解消) | ✅ 達成 |
| 変更履歴管理 | スクリプト変更の都度、変更ログを別途記録する運用を開始 | ✅ 達成 |
現在 build_prompt() 関数内にプロンプト文が直書きされている。これを prompt_template.txt として分離すると、Pythonを触らずにプロンプトを改善できる。
現在 Auto-GenerateAndPush.ps1 内にAPIキーがフォールバック値として直書きされている。Windowsの「システム環境変数」に GEMINI_API_KEY を登録し、スクリプトから削除することでセキュリティが向上する。
今回 __pycache__ フォルダが生成された。Gitに含める必要はないため .gitignore に追加推奨。
現在、3回リトライしても失敗した場合はログに記録されるのみ。タスクスケジューラ実行時は画面を見ていないため、失敗に気づけない。n8nやPowerShellのSend-MailMessageで通知を飛ばす仕組みがあると安心。
logsフォルダにRunLogが蓄積し続ける。30日以上前のファイルを自動削除するスクリプトをPS1に追加すると管理が楽になる。
症状:日本語トピック配列をPS1に直書きしたところ ParseException が発生
原因:PowerShell 5.1は日本語文字列を配列リテラルとして解釈する際にエンコーディング問題が発生しやすい
対処:トピック一覧を topics.txt として外部ファイル化し、Get-Content で読み込む構成に変更
再発防止:PS1スクリプトには日本語文字列を直書きしない。テキストデータは必ず外部ファイル参照とする
症状:python generate_ai_content.py を実行してもファイルが生成されず、ログも残らず、終了コードだけ0が返る
原因:Python 3.14で sys.stdout.detach() の挙動が変わり、モジュールレベルで stdout が無効化された。その後の logging.basicConfig がファイルへの書き込みに失敗し、すべての処理が静かに終了していた
対処:sys.stdout.detach() + codecs.getwriter() → sys.stdout.reconfigure(encoding='utf-8') に変更
再発防止:Pythonバージョンアップ時はstdout操作系の動作確認を必ず行う。2>&1 でstderrも捕捉したテストを自動化する
症状:C:\test_log.txt への書き込みで Permission denied
原因:Cドライブ直下は管理者権限が必要。テスト用パスとして不適切だった
対処:ログファイルのパスを C:\Workspace\_Shared_Scripts\logs\ 配下に統一
再発防止:ログ・一時ファイルは必ず C:\Workspace\ 配下を使用する
症状:深夜0時台にAPI呼び出しが 503 Service Unavailable で失敗
原因:Gemini APIの深夜時間帯の高負荷(一時的な混雑)
対処:リトライ機能(最大3回・30秒間隔)を実装。今回は2〜3回目で成功
再発防止:タスクスケジューラの実行時刻を08:00から変更する必要はないが、深夜の手動実行時は503が出やすいことを認識しておく
このシステムが達成する目的:毎日ゼロ作業で「AIつまみぐい」ブランドのコンテンツを自動生成し、GitHubにバックアップし、Obsidianで管理できる状態にすること。生成されたコンテンツはX(集客)→ note(信頼形成)→ Coconala(販売)の導線として機能する。
| コンポーネント | 役割 | ファイル場所 |
|---|---|---|
| タスクスケジューラ | 毎日08:00にPS1を自動起動するトリガー | Windowsシステム設定 |
| Auto-GenerateAndPush.ps1 | 全体の制御役。トピック選択→Python呼び出し→Git同期→ログ管理 | C:\Workspace\_Shared_Scripts\ |
| generate_ai_content.py | Gemini APIを呼び出してMarkdownを生成し00_Inboxに保存する | C:\Workspace\_Shared_Scripts\ |
| topics.txt | 28種のトピック一覧。日付ベースで毎日違うトピックが選ばれる | C:\Workspace\_Shared_Scripts\ |
| hancho-kb(ローカル) | Obsidianで管理するナレッジベース。生成記事の保管・整理の場所 | C:\Workspace\hancho-kb\ |
| hancho-kb(GitHub) | バージョン管理・バックアップ。コミット履歴で変更が追跡できる | github.com/fooueen/hancho-kb |
| logs/ | 毎回の実行結果を記録。エラー時のデバッグに使用 | C:\Workspace\_Shared_Scripts\logs\ |
| 日付 | ファイル | 変更内容 |
|---|---|---|
| 2026-05-03 | generate_ai_content.py | 初版作成(Gemini API・UTF-8設定) |
| 2026-05-03 | generate_ai_content.py | プロンプトをX用3行+note用2セクション構成に変更 |
| 2026-05-03 | generate_ai_content.py | X用プロンプトを「現場感のある文体」に強化 |
| 2026-05-03 | generate_ai_content.py | YAMLフロントマターのコードブロック出力を修正 |
| 2026-05-07 | Auto-GenerateAndPush.ps1 | トピック固定→topics.txt日付ベースローテーションに変更 |
| 2026-05-07 | generate_ai_content.py | 503エラー対応:最大3回・30秒間隔のリトライ機能を追加 |
| 2026-05-07 | generate_ai_content.py | Python 3.14対応:sys.stdout.detach()→reconfigure()に変更(サイレント失敗を解消) |
| 2026-05-07 | topics.txt | 新規作成:28種のトピック一覧(DX・副業・V-Consultant・自動化・マーケ系) |