※ この記事にはアフィリエイトリンクが含まれています。リンク経由で購入しても読者の皆さんに追加費用は発生しません。収益は本サイトの運営費に充てています。
WordPress REST APIを使えば、記事の投稿・更新をコマンド1つで自動化できます。僕はConoHa WINGで実際にこの仕組みを構築して、下書きHTMLからアフィリエイトリンク挿入→WordPress投稿までを全自動で回しています。
認証の設定とWAFの調整さえ押さえれば、あとはコピペで動きます。この記事では、認証の設定から実装、WAFの設定まで、実際に動くコード付きでまとめました。
こんな方に読んでほしい
- ブログ記事の投稿作業を効率化したいエンジニア
- AI生成した下書きをWordPressにそのまま投稿したい人
- WordPress REST APIの認証設定を最短で済ませたい人
- ConoHa WINGでREST APIを使いたい人(WAF設定の手順も紹介)
WordPress REST APIとは?何ができるのか
WordPress REST APIは、WordPressの管理画面を経由せずに、HTTPリクエストで記事の作成・更新・削除ができるインターフェースです。WordPress 4.7以降に標準搭載されており、追加プラグインは不要です。
REST APIでできること
- 記事の作成(POST /wp-json/wp/v2/posts)
- 記事の更新(PUT /wp-json/wp/v2/posts/{id})
- カテゴリ・タグの管理
- メディア(画像)のアップロード
- ユーザー・コメントの管理
つまり、管理画面でできることのほぼすべてをプログラムから制御できます。僕の場合、Markdownで書いた下書きをHTMLに変換し、アフィリエイトリンクを自動挿入してからREST APIで投稿しています。僕が使っているConoHa VPSでも、XServer VPSでも、WordPressが動いている環境ならどこでもこの仕組みは使えます。
REST APIの認証方式
WordPress REST APIの認証で先に知っておきたいのが「アプリケーションパスワード」の存在です。
管理画面のログインパスワードとは別物です。ここだけ押さえておけば、認証まわりで迷うことはありません。
| 認証方式 | 用途 | 設定場所 |
|---|---|---|
| 管理画面パスワード | wp-admin へのログイン | ユーザー設定 |
| アプリケーションパスワード | REST API 認証 | ユーザー → プロフィール → 下部 |
事前準備:認証の設定手順
Step 1:アプリケーションパスワードを発行する
- WordPress管理画面にログイン
- 「ユーザー」→「プロフィール」を開く
- ページ下部の「アプリケーションパスワード」セクションを探す
- アプリケーション名(例:
blog-automation)を入力 - 「新しいアプリケーションパスワードを追加」をクリック
- 表示されたパスワードを必ずコピーして保存(二度と表示されません)
Step 2:.envファイルに認証情報を設定する
# .env
WORDPRESS_URL=https://your-domain.com
WORDPRESS_USERNAME=your_username
// ... (4 lines)
アプリケーションパスワードにはスペースが含まれますが、そのまま使用できます。
TypeScriptで投稿スクリプトを実装する
最小限の投稿コード
まずは動くことを確認するために、最小限のコードを書きます。
import "dotenv/config";
interface WPPostInput {
// ... (52 lines)
Basic認証のヘッダーを手動で組み立てています。Base64エンコードの形式は username:application_password です。
接続テスト:カテゴリ一覧を取得する
投稿の前に、まずGETリクエストで接続を確認しましょう。
async function getCategories() {
const url = `${process.env.WORDPRESS_URL}/wp-json/wp/v2/ca
const res = await fetch(url, {
// ... (14 lines)
これが通れば認証はOKです。GETは通るのにPOSTが通らない場合は、次のWAFセクションを確認してください。
ConoHa WINGのWAF設定(1分で完了)
ConoHa WINGを使っている場合、REST APIでの投稿時に403 Forbiddenが返ることがあります。原因と対処法がはっきりしているので、事前に設定しておけばスムーズです。
症状
- GETリクエスト(カテゴリ取得等)は正常に動作する
- POSTリクエスト(記事投稿)で 403 Forbidden が返る
- 同じエンドポイントなのに、新規作成は通って更新がブロックされるケースもある
原因:SiteGuard Lite(サーバー側WAF)
ConoHa WINGには2つのセキュリティレイヤーがあります。
| レイヤー | 設定場所 | ブロック主体 |
|---|---|---|
| WordPress側 | SiteGuardプラグイン | wp-admin へのアクセス制御 |
| サーバー側 | ConoHa管理画面(SiteGuard Lite) | REST API のPOST/PUTリクエスト |
ポイントは、WordPress側のプラグイン(SiteGuard)ではなく、ConoHa管理画面のWAF設定を操作することです。ここさえ分かっていれば一瞬で解決します。
対処法
- ConoHa管理画面にログイン
- 「サイト管理」→「サイトセキュリティ」→「WAF」を開く
- ブロックログに REST API へのリクエストが記録されているか確認
- 該当ログの「除外」ボタンをクリック
注意点として、WAFを完全に無効化するのではなく、ブロックされた特定のリクエストだけを除外します。セキュリティは維持しつつ、REST APIだけ通す設定です。
補足:記事内容によってWAFの反応が変わる
記事本文にHTMLタグやコードが含まれると、WAFが反応する場合があります。その場合もブロックログから「除外」ボタンを押すだけで対応できます。最初の数回だけ確認すれば、以降は同じパターンで通るようになります。
パイプラインの全体像:下書きから投稿まで
僕が実際に使っているフロー
1. 下書きHTML作成(Claude Codeで生成)
└→ drafts/articles/xxx.html
// ... (14 lines)
実行コマンド
# 下書きとして投稿
npx tsx src/pipeline.ts drafts/articles/xxx.html
// ... (5 lines)
コマンド1つで、リンク挿入から投稿まで完了します。管理画面を開く必要はありません。
先に知っておくとスムーズなポイント3つ
1. Node.js fetchにはタイムアウトを設定しておく
環境によってはNode.jsのfetchで接続に時間がかかることがあります。以下のようにAbortControllerで30秒のタイムアウトを設定しておけば安心です。
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 3000
// ... (8 lines)
2. アプリケーションパスワードのスペース
発行されるパスワードには4文字ごとにスペースが入ります。.envファイルにはスペース込みでそのまま記載してください。クォートで囲む必要はありません。
3. アイキャッチ画像はWP管理画面から設定が確実
画像のアップロード(POST /wp-json/wp/v2/media)はmultipart/form-dataを使うため、WAFの設定によっては追加の除外が必要です。記事本文の投稿は問題なく動くので、アイキャッチ画像だけはWP管理画面から設定するのが手軽です。僕もConoHa VPSの環境ではその運用にしています。
自動投稿の注意事項
セキュリティ面
- アプリケーションパスワードは
.envに保存し、.gitignoreで除外する - GitHubに認証情報をプッシュしない
- WAFの除外設定は最小限にする(全無効化しない)
運用面
- 投稿前に必ず下書き状態で確認する(
--publishなしで実行) - スケジュール投稿を使う場合は
status: "future"とdateパラメータを指定 - 大量投稿はスパム判定リスクがあるので、1日2-3記事を上限にする
まとめ
WordPress REST APIによる自動投稿は、認証設定とWAFの設定だけ済ませればすぐに動きます。僕の場合、記事1本あたりの投稿作業が5分から30秒になりました。
初回の設定は15〜30分ほどで終わります。一度仕組みを作ってしまえば、あとは記事を書くことだけに集中できます。WordPressが動くレンタルサーバーなら何でも使えますが、僕はConoHa WINGを使っています。速度とコスパのバランスが良く、REST APIも問題なく動いています。
- 関連記事:アフィリリンク自動取得をPlaywrightで実現|全コード公開
- 関連記事:n8nセルフホスト構築|Docker+SSL対応の全手順
- 関連記事:n8n向けVPS8社比較|料金・口コミ・法人向けも網羅
公式ドキュメント:
この記事で紹介したVPSを試してみる
n8nやDocker環境を動かすなら、VPSが必要です。僕が実際に使っている・検証したサービスを紹介します。
- ConoHa VPS(僕のメイン環境)
— ConoHa VPSの料金プランを確認する - XServer VPS(n8nアプリイメージ対応)
— XServer VPSの料金プランを確認する - シンVPS(メモリ単価最安)
— シンVPSの料金プランを確認する


コメント