AIでWordPressを自動更新していく方法 ― 「下書きまではAI、公開は人間」で回す仕組み

AIが下書きを書き、人間が公開ボタンを押すイメージ

このブログ、久しぶりに更新しています。
実はこの記事、AIが書いて、AIがWordPressに下書きとして入れたものです。私がやったのは、プレビューを見て「公開して」と言ったことだけ。

今回はその仕組みと、作ってみて分かった落とし穴をまとめます。

全体の流れ

やっていることはシンプルで、次の4ステップです。

  1. AIに「〇〇について記事を書いて」と頼む
  2. AIが原稿(Markdown)を書き、WordPressの REST API で下書きとして入稿する
  3. 人間がWordPressのプレビューで確認する
  4. OKなら「公開して」と一言。AIが公開に切り替える

使っているのは Claude Code(ターミナルで動くAIエージェント)と、WordPress標準の アプリケーションパスワード だけです。プラグインは入れていません。

一番大事にしたルール:公開ボタンは人間が押す

AIに全部任せることもできますが、あえて 「下書きまではAI、公開は人間の一言」 に線を引きました。

理由は3つです。

  • 公開は外向きの行為。一度出た記事は、消してもキャッシュや検索結果に残ります
  • AIはそれっぽく間違える。事実確認やトーンの最終判断は人間がやるべき
  • 権限を絞れる。AI用のユーザーは「編集者」権限にして、管理者権限は渡さない

これを「お約束」ではなく、ツール側の仕組みで守っています。

  • 入稿コマンドは下書きしか触れない。公開済みの記事を書き換えようとすると止まる
  • 公開コマンドは、AIが自分で入れた記事にしか効かない
  • 管理画面で人間が手直しした下書きは、AIが勝手に上書きしない(更新日時で検知)
作業 誰がやるか
記事を書く・下書きを入れる AI
プレビューで確認する 人間
公開する 人間の「公開して」の後に AI
公開済み記事の修正 人間(管理画面)

準備したこと

1. AI専用ユーザーを作る

管理画面で「編集者」権限のユーザーを作り、そのユーザーで アプリケーションパスワード を発行します。普段のログインパスワードとは別物で、いつでも個別に取り消せるのが利点です。

2. パスワードは暗号化して保管

発行したパスワードは、暗号化した保管庫(vault)に入れて、AIは実行時にだけ読み出します。設定ファイルやコードには書きません。

3. 原稿はMarkdownで書く

AIが書く原稿はこんな形です。

---
title: 記事のタイトル
slug: my-first-post
---

## 見出し

本文……

見出し・箇条書き・表・コードなど、よく使う書式はそのままHTMLに変換して入稿します。

実際に踏んだ落とし穴

作るより、ここで時間を使いました。同じ構成(WordPress + Cloudflare)の方の参考になれば。

落とし穴1:Cloudflareに機械アクセスとして弾かれる

Pythonの標準ライブラリでAPIを叩いたら、error code: 1010 で全部拒否されました。Cloudflareは、プログラム既定の User-Agent を「怪しいボット」とみなして弾くことがあります。独自の User-Agent を付けると通りました。

落とし穴2:ユーザー列挙対策が、自分の管理画面まで壊す

WordPressは /wp-json/wp/v2/users で投稿者名が外から見えてしまうので、Cloudflare側でこのURLを塞いでいました。

ところが、管理画面で「アプリケーションパスワードを追加」を押すと、中身が空っぽの赤いエラー枠が出るだけで何も起きない。原因は、このボタンが裏で同じ /wp/v2/users/… を呼んでいたことでした。エラー文が出ないので、気づくまでに時間がかかりました。

発行するときだけルールを一時停止し、発行が終わったらすぐ戻す、で解決しています。

落とし穴3:URLの塞ぎ方に抜け道がある

さらに調べると、WordPressは /?rest_route=/wp/v2/users という書き方でも同じAPIを受け付けます。パス(URLの /wp-json/… 部分)だけを見るルールだと、ここが素通りでした。クエリ文字列側も条件に入れて塞いでいます。

ユーザー列挙対策をCloudflareでやっている方は、?rest_route= の形でも塞がっているか、一度確認してみてください。

落とし穴4:通信が途中で切れたら「二重投稿」になりかける

サーバーが記事を保存した後に応答だけ切れると、AIは「失敗した」と思ってもう一度送ろうとします。そうすると同じ記事が2本できてしまう。

そこで、送り直す前に「同じ記事がもう入っていないか」を確かめるようにしました。入っていればそれを採用し、確認できなければ止まって人間に聞きます。

やってみての感想

  • 記事を書く手間より、「どこまでAIに任せるか」の線引きを決めるほうが大事でした
  • 線引きを「お願い」ではなく仕組み(権限・コマンドの制限)で守ると、安心して任せられます
  • 落とし穴の多くは、AIではなくセキュリティ設定との相性でした。守りを固めているサイトほど、自分のツールも弾かれます

今後はこの仕組みで、止まっていたこのブログを少しずつ動かしていく予定です。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です