こんにちは😊
株式会社プロドウガの@YushiYamamotoです!
らくらくサイトの開発・運営を担当しながら、AI自動化専門のフルスタックエンジニアとしても活動しています❗️
個人でメディアを運営する上で、最も大きな壁は**「継続性」**です。特に、毎日のコンテンツ制作は、情熱だけでは乗り越えられない、あまりにも重いタスクです。
この記事では、私が運営する音声メディア『モーニングコーヒーと今日の話』を例に、**「繰り返される退屈な作業は、全て自動化されなければならない」という信念に基づき、n8n と各種AI APIを心臓部に据えた「コンテンツ自動化工場」**を、いかにして設計し、構築したか、その全技術スタックとアーキテクチャを公開します。
1. 解決すべき課題:「運営」という名の巨大な壁
私が立ち上げた音声メディアは、毎日、異なるテーマでコンテンツを配信しています。
1本のコンテンツを世に出すまでに、もし手作業でやるとしたら、以下のような膨大なタスクが発生します。
手作業地獄の全貌
- 脚本制作
- 音声収録・編集
- イラスト作成
- LINE配信用メッセージ作成
- note用記事作成
- X(Twitter)用投稿文作成
- Instagram用投稿文作成
- LinkedIn用投稿文作成
- 上記全ての予約投稿作業
- 全ての投稿URLのスプレッドシートへの記録
これを人力で毎日続けるのは不可能です。そこで、私はこれらの作業を95%自動化することを目標に、システム設計を開始しました。
2. システム全体のアーキテクチャ設計
この自動化工場は、大きく3つのコンポーネントで構成されています。
技術選定の理由
-
司令塔 (React on Lovable):
Lovable
の圧倒的な開発スピードを評価。Reactの知識があれば、自然言語の指示で高機能なUIを持つフロントエンドが数時間で完成します。 -
自動化工場 (n8n):
Zapier
等と比較し、セルフホスト可能で自由度が高い点を評価。多数のAPI連携を視覚的なノードで構築でき、複雑な分岐やループ処理も可能なため、今回の心臓部として採用。 - テキスト・プロンプト生成 (Gemini): 長いコンテキスト保持能力と、複雑な指示(ペルソナ設定、JSON形式出力など)への追従性が高いため、脚本の再構成や、AI Horde用の画像プロンプト生成という**「頭脳」**の役割を担います。
- 画像生成 (AI Horde): 完全無料で商用利用可能という持続可能性を最重視。コストゼロで毎日安定してイラストを生成できるため採用しました。
3. n8nワークフローの核心部:実装ハイライト
この工場がどう動いているか、主要なノード構成と実装のポイントを解説します。
a) Webhookトリガーとデータ整形
ワークフローは、Lovableで作成した司令塔からのPOST
リクエストをWebhookノードで受け取ります。
受け取ったdialogue_script
とschedule_time_iso
は、後続のノードが使いやすいように、Setノードで一度変数として整理しておくと便利です。
b) Geminiによるコンテンツ再構成とデータ整形
1回のGemini APIコールで、noteのタイトルから各SNS投稿文、さらには画像生成用のプロンプトまで、必要なテキスト素材を全てJSON形式で一括生成させます。
生成されたJSONを安全にパースするため、Functionノードで以下のような処理を入れています。
Function Node: processGeminiResponse.js
// Geminiからの応答を取得
const responseText = $json.body.text;
// JSON部分を抽出(マークダウンが含まれる場合があるため)
const jsonMatch = responseText.match(/```json\n([\s\S]*?)\n```/);
if (!jsonMatch || !jsonMatch[1]) {
throw new Error("Geminiからの応答に、有効なJSONが見つかりません。");
}
try {
const parsedData = JSON.parse(jsonMatch[1]);
// 後続ノードで使いやすいように、データを整形して返す
return {
noteTitle: parsedData.note_title,
twitterPost: parsedData.twitter_post_short,
linkedinPost: parsedData.linkedin_post,
instagramCaption: parsedData.instagram_caption,
imagePrompt: parsedData.image_prompt
};
} catch (error) {
throw new Error("GeminiからのJSON解析に失敗しました: " + error.message);
}
c) AI Hordeによる非同期画像生成
AI HordeのAPIは非同期のため、n8nでの実装には「リクエスト→待機→ステータス確認→結果取得」というループ処理が必要です。
このループは、n8nのIFノードと、前のノードに戻る設定を駆使して構築します。
d) エラーハンドリングとモニタリング
API連携は必ず失敗する可能性があります。そのため、各APIコールノードには**「Settings > Continue on Fail」設定を有効にし、エラー発生時にError Trigger**に処理を渡すように設計しています。これにより、どこかの工程で問題が起きても、私に即座にSlack通知が届く仕組みになっています。
4. 成果と運用後のリアルな学び
この自動化工場を導入した結果、以下の劇的な成果が得られました。
指標 | Before (手作業) | After (自動化) | 改善率 |
---|---|---|---|
週間制作・投稿時間 | 約3.5時間/週 | 約30分/週 | 約85%削減 |
精神的負担 | 「投稿しなきゃ…」という重圧 | 「何を話そうか」という楽しさ | 計測不能 |
継続性 | 不明(おそらく1ヶ月で挫折) | 無限に継続可能 | ∞ |
運用後のリアルな課題
- AI生成コンテンツの品質の揺らぎ: 同じプロンプトでも、日によってGeminiのテンションが微妙に違うことがあります。対策として、司令塔アプリの段階で人間(私)が生成結果をレビューし、微調整するフローを確立。「AIが8割作り、人間が2割で魂を入れる」のが現状の最適解です。
- AI Hordeの生成時間: 無料の分散型ネットワークなので、混雑時に画像生成が5分以上かかることも。対策として、n8nのループ処理のタイムアウトを長めに設定し、気長に待つ設計に。コストゼロの恩恵の方が大きいと割り切っています。
5. あなたもこの自動化を始められますか?
もし、この記事を読んで「自分のプロジェクトでもやってみたい!」と思っていただけたなら、ぜひ挑戦してみてください。
必要なスキルセット
- n8n(または類似の自動化ツール)の基本的な操作経験
- 各種APIのドキュメントを読み解く気概
- JavaScriptの基礎知識(n8nのFunctionノードで役立ちます)
もし反響があれば、このn8nワークフローの具体的な設定方法など、今後の記事でさらに深掘りしていきたいと思います。
最後に:この物語の「登場人物」になりませんか?
ここまで読んでいただき、ありがとうございました!
この記事で語った自動化の先に生まれるコンテンツが、音声メディア**『モーニングコーヒーと今日の話』**です。
技術の裏側にある、マスターとユキの温かい対話に、少しでも興味を持っていただけたら、ぜひ私たちのカフェの扉を開けてみてください。
あなたの朝の数分間が、ほんの少しだけ豊かになることを、お約束します。
毎朝8時、あなたの耳もとへ☕
LINEで、マスターとユキの「今日の話」が届きます。まずは、ここからどうぞ。

常連客たちの談話室へようこそ🗣️
リスナー同士が感想を語り合ったり、マスターへの質問を投げかけたりする、オープンチャットです。あなたも、この物語の登場人物の一人です。
▼常連客の談話室(LINEオープンチャット)はこちら
これまでの会話の記録ノート📝
過去の放送は、全てこちらのnoteでアーカイブしています。イラストと共に、テキストでもお楽しみください。
▼モーニングコーヒーと今日の話|公式note
そして、このプロジェクトの**開発の舞台裏(つまり、このQiitaの連載)**にも、ぜひまた遊びに来てくださいね。
皆さんの「いいね」やコメントが、開発の何よりのモチベーションになります!