WordPress×AI×n8nで記事を自動生成する仕組みを作った話【実録】

実際にやってみた話をします。

ぼくはフリーランスのPMとして働いているんですが、クライアントワークをやりながら自分のブログも更新するのって、正直かなりきついです。記事を書こうと思ってPCを開くと、もう深夜1時になってたりして。

で、結論から言うと、WordPressの記事をAIで半自動生成する仕組みを作ってみたら、かなりいい感じになりました。今回はそのフローを4ステップで解説してみます。

タケPM
ライター紹介

タケPM

SIerからフリーランスPMへ転身。リモートワーク・転職・副業のリアルな話を体験ベースで発信しています。

本記事の要約
・WordPress×n8n×AIの組み合わせで、記事の下書きをほぼ自動化できます
・Googleスプレッドシートにネタを入力するだけで、あとは全部自動で動きます
・プロンプト設計とJSON出力の工夫が品質に直結します
・実際にハマったところも正直に書きます

まず全体像を説明します

使っているツールはこの3つです。

使用ツール(3つだけです)
n8n:自動化ワークフローのエンジン。セルフホスト版を使っています
Claude API(Anthropic):記事本文を生成してもらうAI
Google スプレッドシート+WordPress REST API:ネタ管理と自動投稿

フローはざっくりこうです。スプレッドシートに「テーマ」「対策キーワード」「担当ライター名」を入力する。n8nがそれを読み取って、AIに記事を作ってもらって、WordPressに下書き投稿する。ぼくがやる作業は最初のスプレッドシート入力だけです。あとは全部自動で動きます。

ステップ1:Googleスプレッドシートでネタを管理する

スプレッドシートは2枚使っています。「記事ネタ」シートと「ライター情報」シートです。これ、意外と大事で、最初から分けておかないと後でカオスになります。

記事ネタシートの列

記事ネタシートの列構成
テーマ/対策キーワード/担当ライター名/カテゴリ/ステータス(未処理・処理済み)/処理日時

n8nは「ステータス=未処理」の行だけ取得して、処理が終わったら「処理済み」に自動で書き換えます。これをやっておかないと同じ記事が何本も投稿されるので注意です。ぼくは最初それをやらかしました。

ライター情報シートの列

ここが著者プロフィールボックスの自動挿入と直結する、わりと重要な部分です。

ライター情報シートの列構成
Author Name/Author Photo(画像URL)/Author Introduction for post(目次前に出る短いプロフィール)/About the Author for post(記事末尾の詳しいプロフィール)/Author Bio Confidential(AIへのペルソナ指示。非公開)

「Author Bio Confidential」はAIへの指示にだけ使う内部情報で、公開はしません。ライターの実体験・口癖・文体の癖なんかを書いておくと、AIが一人称視点で書いてくれる精度が上がる気がします。

ステップ2:n8nでワークフローを組む

n8nのワークフローはフェーズで分けて考えると整理しやすいです。

データ取得フェーズ

Google Sheetsノードで「未処理」行を1件取得して、ライター情報シートから対応するライターのデータを引っ張ります。この2つをデータ結合ノードでマージしておくと、以降のノードで`$json[‘フィールド名’]`で参照できます。

ここ注意です
データをマージした後は`$(‘ノード名’).item.json`ではなく`$json[‘フィールド名’]`を使ってください。マージ後にノード名で参照しようとすると値が空になることがあります。ぼくはここで1時間くらい詰まりました。

AI記事生成フェーズ

Claudeノードにプロンプトを渡して記事を生成してもらいます。出力形式はJSON指定です。title・description・slug・category・contentの各フィールドをJSONで返してもらうことで、後工程の自動投稿が楽になります。

JSON解析フェーズ

正直、ここが一番ハマりました。AIが生成するJSONの中で、コンテンツ内にダブルクォートが含まれるとJSONが壊れてパース失敗します。対策は2段階でやっています。

JSON解析エラーの対策(2段階)
①AIプロンプトで「contentフィールド内ではダブルクォートを絶対に使わない」と明示的に指示する
②n8n側でも正規表現による手動フィールド抽出のフォールバックを実装しておく

プロンプトだけでは完全には防げないです。AIは指示を守らないことがあります。なので両方やっておくのがいいと思います。

WordPress投稿フェーズ

WordPress REST APIで記事を下書き投稿します。「完全自動公開」ではなく「下書き」にして、人間が最終確認してから公開する運用にしています。AIの出力には誤情報が混じることもあるので、そこは割り切っています。

ステップ3:AIプロンプト設計で差がつく3つのポイント

ポイント1:出力形式をGutenbergブロックで指定する

WordPressがブロックエディタを使っているなら、AIに最初からGutenberg形式で出力させるのがいいと思います。<!– wp:paragraph –>や<!– wp:heading {“level”:2} –>といったブロックコメントごと生成させると、WordPress貼り付け後すぐに崩れのない表示になります。

ポイント2:独自CSSクラスの装飾ルールを細かく書く

テーマ独自のスタイルや追加CSSのクラスをプロンプトに組み込みます。たとえば「見出しh2には〇〇というclassを付ける」「強調は〇〇というclassを使う」「〇〇タグは使わない」といったルールをプロンプトに書いておくと、AIはわりと忠実に従ってくれます。これ、意外と大事で、ここをサボると毎回手直しが発生します。

ポイント3:ライターのペルソナを渡す

スプレッドシートの「Author Bio Confidential」をプロンプトに差し込みます。ペルソナ情報が詳しいほど、AIの文章がそのライターらしくなる気がします。

ステップ4:著者プロフィールボックスを記事に自動挿入する

読者がライターを信頼するうえで著者情報は大切だと思います。毎回手動でHTMLを貼るのは面倒なので、これも自動化しています。

プロフィールボックスは2種類用意しました。

2種類の著者ボックス
①「ライター紹介」:目次の直前に入るコンパクト版。写真・名前・一言プロフィールのみ。
②「この記事を書いた人」:記事末尾のフル版。写真・名前・詳細プロフィール・記事一覧リンク。

スプレッドシートの「Author Photo」「Author Introduction for post」「About the Author for post」をHTMLに差し込むだけです。HTMLの属性値はシングルクォートで書いておくと、JSON文字列内でのエスケープ問題が起きないのでおすすめです。

運用してわかったこと(正直に書きます)

実際にハマった問題まとめ
・AIがJSON内でダブルクォートを使いパースが失敗する→プロンプトで禁止+フォールバック実装
・ショートコードの開きタグ直後に改行が入って変な空白ができる→プロンプトで改行禁止を明示する
・スプレッドシートの空行を拾って空記事が投稿される→ステータス列チェックを厳格化する
・n8nのノード間でデータ参照が切れる→データ結合後は`$json`で参照する

特にJSONパースエラーは最初の1ヶ月でかなり頻発しました。正直、AIは指示を完璧には守ってくれないので、「プロンプトで防ぐ」と「ワークフロー側で吸収する」の2段構えが必要だと思います。

まとめ:WordPress AI 自動化、個人でも十分できます

最初の構築には時間がかかりましたが、動いてしまえばネタ入力から下書き完成まで3〜5分くらいになりました。ちょっとテンション上がりました。

ただ、AIが書いた記事をそのまま公開するのはぼくはやっていません。自動化はあくまで「下書きを高速で作る道具」として使うのが現実的だと思っています。最終チェックと加筆は人間がやる、というスタンスです。

文章を書くのが得意じゃないぼくでも、こういう仕組みを作ることでなんとかブログを続けられています。同じように悩んでいる人の参考になれば嬉しいです。

この記事で紹介したツール
・n8n(セルフホスト版):https://n8n.io
・Claude API:https://www.anthropic.com
・WordPress REST API:WordPressに標準搭載
この記事を書いた人 タケPM

タケPM

38歳・フリーランスPM。大手SIer10年→Webベンチャー転職→独立という経緯で、現在は完全在宅でリモートワーク中。n8nやAI活用による業務効率化に取り組んでおり、この記事で紹介したWordPress自動化も実際に自分のブログで運用中。「わかりやすさ」にこだわって書いています。

タケPMの記事をもっと読む →