ミロクAIで最初に記事投稿を自動化したのは、2026年5月のことです。PythonでWordPress REST APIを呼び出し、Markdownの原稿から下書き投稿する仕組みを作りました。その後2026年10月には、ChatGPTとWordPress MCPを使って直接記事を編集・公開する運用に変更しています。
この記事では、最初に採用したREST API方式のしくみを、認証情報を公開しないPythonの再現用サンプルで説明します。記事後半では、現在使っているMCP方式との違いも整理します。

WordPress REST APIで投稿できること
WordPressには、記事・固定ページ・メディアなどのデータをHTTPリクエストで操作するREST APIが用意されています。記事を作成する基本的なエンドポイントはPOST /wp-json/wp/v2/postsです。適切な認証情報と権限があれば、タイトル、本文、ステータスなどを送信できます。
ここで大事なのは、最初の投稿をpublishではなくdraftにすることです。誤った内容を一般公開するリスクを減らせます。
事前に必要なもの
- HTTPSで利用できるWordPressサイトと投稿権限のあるユーザー
- WordPressのユーザープロフィールから発行したアプリケーションパスワード
- Python 3、
requestsとpython-dotenv - 秘密情報を除外する
.gitignoreと.envファイル
通常のログインパスワードを原稿やプログラムへ直接貼り付ける方式は避けます。アプリケーションパスワードも機密情報であり、漏えいした場合は失効させる必要があります。
ステップ1:Pythonの仮想環境を作る
Macで作業していた当時、pipのコマンド名やHomebrew管理下のPythonへの直接インストールでつまずきました。そこでプロジェクトごとの仮想環境を作る方式を採用しました。
python3 -m venv .venv
.venv/bin/python -m pip install requests python-dotenv
コマンドはMacやLinuxを想定しています。Windowsでは仮想環境のPythonのパスが異なります。
ステップ2:.envに接続情報を設定する
実際のドメイン名や認証情報は記事に掲載しません。次の記述はダミーです。
WP_SITE_URL=https://example.com
WP_USERNAME=example_user
WP_APP_PASSWORD=replace_with_app_password
同時に.gitignoreへ.envを記述し、Gitへの誤登録を防ぎます。
.env
.venv/
ステップ3:下書き投稿のPythonサンプル
以下はWordPressの標準REST APIの基本的な動作を説明するための再現用コード例です。2026年5月に使った実際のwp_post.pyファイルをそのまま転載したものではありません。また、この説明用コードについて当サイトの本番環境への実行テストは行っていません。
import os
import requests
from dotenv import load_dotenv
load_dotenv()
site = os.getenv("WP_SITE_URL", "").rstrip("/")
user = os.getenv("WP_USERNAME")
password = os.getenv("WP_APP_PASSWORD")
if not site or not user or not password:
raise RuntimeError("WordPressの接続設定が不足しています")
api_url = f"{site}/wp-json/wp/v2/posts"
payload = {
"title": "API投稿テスト",
"content": "<p>これはテスト用の下書きです。</p>",
"status": "draft",
}
response = requests.post(
api_url,
json=payload,
auth=(user, password),
timeout=30,
)
response.raise_for_status()
post = response.json()
print("下書きID:", post["id"])
この例では記事本文を直接指定しており、MarkdownからHTMLへの変換処理は含まれていません。実際にMarkdownのファイルから投稿するには、ファイルの読み込みや変換を追加する必要があります。
エラーになったときに切り分けること
401 Unauthorized
認証情報が受け付けられていない可能性があります。ユーザー名、アプリケーションパスワード、HTTPS、セキュリティ設定などを確認します。
403 Forbidden
認証できても操作権限が足りない、セキュリティ対策がリクエストを拒否している、といった可能性があります。権限とサイト側のアクセス制御を確認します。
404 Not Found
サイトURLやREST APIのパスが間違っていないかを確認します。WordPressがサブディレクトリに設置されている場合は特に注意が必要です。
429 Too Many Requests
リクエストが制限されている可能性があります。2026年10月のMCP運用でも、テーマ変更の確認中にHTTP 429を経験しました。原因が確定しない場合、保護機構を無効化して続行するのではなく、時間を置く・アクセスログを確認する・代替手段を検討するといった対応が必要です。
REST APIとMCPは何が違う?
| 項目 | Python+REST API | ChatGPT+MCP |
|---|---|---|
| 操作の入口 | 自作スクリプト | ChatGPTの会話と接続ツール |
| 事前準備 | Python環境、認証情報、コード | MCPサーバー・接続と権限設定 |
| 反復処理 | 定型バッチに向く | 対話しながら個別作業を進めやすい |
| 記事の公開 | コードで明示して実行 | 接続が許可する公開機能を利用 |
| 注意点 | 秘密情報と例外処理 | 接続先誤認・権限・操作結果の検証 |
両者は排他的ではありませんが、現在のミロクAIではChatGPT+WordPress MCPへ運用を一本化しています。以前のスクリプトを今後必須のものとして扱う予定はありません。
現在の運用で守っていること
AIが記事の下書きを作っても、実際の作業ログに基づいているかを確認してから公開します。公開後にはWordPressから記事ID・URL・公開状態を再取得し、成功したことを検証します。
関連する実践記録は、ChatGPT+MCPへの移行記録、.envを使った認証情報管理、WordPress記事HTMLの監査をご覧ください。
2026年5月の投稿自動化経験をもとに、2026年10月時点の運用と再現用コード例を追記しました。


コメント