
WordPressブログにAI記事を毎日自動投稿する全手順|Pythonコピペで動く実録パイプライン
当サイトはアフィリエイトプログラムを利用しており、紹介リンク経由での申込により報酬を得る場合があります。記事内で紹介するサービスには筆者が実際に使用しているものと、客観情報として比較掲載しているもの(未使用・PR表記あり)が含まれます。
結論:このサイト自体が「毎日動いている」実例です#
このページを読んでいるあなたがいま見ているjidoulab.comの記事は、ClaudeAPI・WordPress REST API・Xserverのcronジョブを組み合わせたパイプラインで自動生成・自動投稿されています。コードは約120行。Pythonを「少し触ったことがある」程度なら、この記事の手順をそのままコピーして1〜2時間で動かせます(あくまで著者の体感であり、環境や習熟度によって異なります)。
本記事でわかること
- Claude API(記事生成)→ WordPress REST API(自動投稿)→ Xserver cronジョブ(日次化)の3ステップ全手順
- コピペで動くPythonコード全文(最小構成・約120行)
- Pythonを書きたくない人向けのノーコード版選択肢(Yoom + ChatGPT)
- 詰まりやすいポイント:wp-json認証エラー・アプリパスワード発行手順
まず確認:コードを書かない「ノーコード版」も選べる#
「Pythonは触れるけど、できればコードを書きたくない」という人も多い。そういう場合はノーコード自動化ツール「Yoom」とChatGPT(またはClaude)を組み合わせる方法が現実的です。
| 方式 | 初期コスト(目安) | 月額費用(目安) | 向いている人 |
|---|---|---|---|
| Python自作(本記事) | 1〜2時間(著者体感) | APIコストのみ(1記事 5〜15円程度) | Pythonを少し触れる・カスタムしたい |
| Yoom + ChatGPT | 30分〜1時間 | Yoom月額 9,800円〜(税抜)+ APIコスト | コードを書きたくない・手早く始めたい |
| Zapier + Make + AI | 30分〜2時間 | プランによる(月額 2,000〜20,000円台) | 英語UIでも問題ない |
本記事ではコードを書くPython自作版を詳しく解説します。ノーコード版の比較はAI自動投稿のSaaS vs API費用比較でまとめています。
ノーコード版の注意点
Yoomなどのノーコードツールは操作は簡単ですが、月額固定費が発生します。記事本数が少ないうちはPython自作のほうが圧倒的に安い。毎月30本以上の安定運用を目指すならノーコードも選択肢に入ります。
全体の流れ:3ステップパイプライン#
手順
- ClaudeAPIで記事を生成する(Pythonスクリプト)
- WordPress REST APIで下書きとして投稿する(同スクリプト内)
- Xserverのcronジョブで毎日自動実行する(サーバー設定)
ステップ1:ClaudeAPIで記事テキストを生成する#
必要なもの#
- Anthropic APIキー(console.anthropic.comで発行)
- Python 3.9以上
anthropicライブラリ(pip install anthropic)
最小構成のコード(全文)#
以下が実際にjidoulab.comで動かしているコードをシンプルに抽出したものです。本番では追加のエラーハンドリングや品質チェック処理を入れていますが、まず動かすための最小版です。
# auto_post.py — AI記事自動投稿スクリプト(最小構成)
import os
import json
import requests
import anthropic
from datetime import datetime
# --- 設定 ---
CLAUDE_API_KEY = os.environ["ANTHROPIC_API_KEY"]
WP_URL = "https://yourdomain.com/wp-json/wp/v2/posts"
WP_USER = os.environ["WP_USER"] # WordPressのユーザー名
WP_APP_PASS = os.environ["WP_APP_PASSWORD"] # アプリパスワード(後述)
# 今日のキーワード(本番ではCSVやDBから読む)
KEYWORD = "WordPressブログ 更新頻度 SEO"
# --- 1. Claude APIで記事を生成 ---
def generate_article(keyword: str) -> dict:
client = anthropic.Anthropic(api_key=CLAUDE_API_KEY)
prompt = f"""
あなたはSEOに詳しいブログライターです。
キーワード「{keyword}」に関して、
・見出し(H2×3、H3×適宜)
・本文800字以上
・HTML形式(<h2>/<h3>/<p>タグのみ)
で記事を書いてください。タイトルも含めてください。
出力形式: JSON {{ "title": "...", "content": "..." }}
"""
message = client.messages.create(
model="claude-opus-4-5",
max_tokens=4096,
messages=[{"role": "user", "content": prompt}]
)
raw = message.content[0].text
# JSONブロックを抽出
start = raw.find("{")
end = raw.rfind("}") + 1
return json.loads(raw[start:end])
# --- 2. WordPress REST APIで投稿 ---
def post_to_wordpress(title: str, content: str, status: str = "draft") -> dict:
auth = (WP_USER, WP_APP_PASS)
payload = {
"title": title,
"content": content,
"status": status, # "draft" or "publish"
}
resp = requests.post(WP_URL, json=payload, auth=auth, timeout=30)
resp.raise_for_status()
return resp.json()
# --- メイン ---
if __name__ == "__main__":
print(f"[{datetime.now()}] 生成開始: {KEYWORD}")
article = generate_article(KEYWORD)
result = post_to_wordpress(article["title"], article["content"], status="draft")
print(f"[{datetime.now()}] 投稿完了: ID={result['id']} URL={result['link']}")
コードをそのままコピーする前に必ずやること
yourdomain.comを自分のWordPressのドメインに書き換える- 環境変数(
ANTHROPIC_API_KEY/WP_USER/WP_APP_PASSWORD)を設定する status="draft"のまま試し動作してから"publish"に変える(誤投稿防止)
ステップ2:WordPressのアプリパスワードを発行する#
ここが一番詰まるポイントです。WordPress REST APIへの投稿にはアプリパスワードが必要で、通常のログインパスワードとは別物です。
発行手順#
- WordPress管理画面(
/wp-admin)にログイン - 右上のユーザー名 → 「プロフィール」をクリック
- 下にスクロールして「アプリケーションパスワード」セクションを探す
- 「新しいアプリケーションパスワード名」に任意の名前(例:
auto-post)を入力 - 「新しいアプリケーションパスワードを追加」をクリック
- 表示される
xxxx xxxx xxxx xxxx xxxx xxxx形式のパスワードをコピー(この画面を閉じると二度と見えません)
コピーしたパスワードは環境変数 WP_APP_PASSWORD に設定します。スペースは含めたまま使えます。
アプリパスワードが表示されない場合
WordPressが「SSL(HTTPS)環境でない」か、プラグインがREST APIをブロックしている可能性があります。Disable REST API系プラグインが有効な場合は一時無効化してテストしてください。XserverはデフォルトでHTTPS有効なので通常は問題ありません。
動作確認(ターミナルで実行)#
curl -X POST https://yourdomain.com/wp-json/wp/v2/posts \
-u "your_username:xxxx xxxx xxxx xxxx xxxx xxxx" \
-H "Content-Type: application/json" \
-d '{"title":"テスト投稿","content":"本文テスト","status":"draft"}'
201 Created が返ればOK。401 Unauthorized が出る場合はユーザー名かアプリパスワードが間違っています。403 Forbidden の場合はREST APIがブロックされています。
ステップ3:Xserverのcronジョブで毎日自動実行する#
スクリプトが動いたら、次はサーバーに「毎朝6時に自動実行」を設定します。
Xserverのcron設定手順#
- Xserverのサーバーパネル(
https://www.xserver.ne.jp/login_server_panel.php)にログイン - 左メニューから「cron設定」→「cron設定追加」をクリック
- 以下のように入力する
| 項目 | 入力値 |
|---|---|
| 実行間隔 | 毎日 |
| 時 | 6 |
| 分 | 0 |
| コマンド | /usr/bin/python3 /home/アカウント名/auto_post.py |
- 「確認画面へ進む」→「追加する」で完了
Xserverでのファイルパスについて
Xserverのcronでは /home/アカウント名/ がホームディレクトリです。FTPやSSHでスクリプトをアップロードした際の配置先を確認してください。which python3 でPythonのパスを確認してから設定すると確実です。
環境変数の渡し方(Xserver cron)#
Xserverのcronはシェル環境変数を引き継がないため、スクリプト内か別の方法で渡す必要があります。最も安全な方法は .env ファイルを使うことです。
# スクリプトの先頭に追加
from dotenv import load_dotenv
load_dotenv("/home/アカウント名/.env")
.env ファイル(パーミッション600に設定):
ANTHROPIC_API_KEY=sk-ant-xxxxxxxx
WP_USER=your_username
WP_APP_PASSWORD=xxxx xxxx xxxx xxxx xxxx xxxx
pip install python-dotenv が必要です。Xserverでは pip3 install --user python-dotenv とすると自分のホームに入ります。
AI出力の品質チェックをどう組み込むか#
「AI記事をそのまま自動公開は怖い」——これは実際に私が最初に感じたことです。jidoulabでは以下のルールで運用しています。
運用で採用しているチェック体制
- 初期は必ず
status="draft"で投稿し、手動確認してから公開(自動公開は3か月慣れてから) - Claudeのプロンプトに「事実として確認できないことは書かない・数値には出典を書く」を明記
- 投稿後に管理画面の通知メールで毎朝確認(異常があればすぐ削除できる)
完全自動化で残るリスク
- AIが古い情報や誤情報を生成する可能性はゼロにならない
- キーワードが偏ると薄い記事が量産されSEO評価が下がる
- APIの料金が予期せず増加する可能性がある(上限設定を必ずコンソールで行う)
ClaudeとChatGPT、自動投稿用途ではどちらが費用対効果が高いか#
競合記事が触れていない視点として、API選定の実コスト比較を載せます。
| 項目 | Claude API(claude-3-haiku) | ChatGPT API(gpt-4o-mini) |
|---|---|---|
| 入力(100万トークンあたり・円) | 約37円 | 約22円 |
| 出力(100万トークンあたり・円) | 約188円 | 約90円 |
| 1記事あたり費用(目安) | 3〜10円 | 2〜6円 |
| 日本語精度(著者体感) | 高い・文章が自然 | 高い・やや直訳調 |
| レート制限(初期) | 中程度 | 中程度 |
※料金は2026年6月時点の公式料金表を基に算出。為替・プランにより変動します。著者体感であり保証しません。
コストだけ見るとChatGPTのgpt-4o-miniがやや安い。ただし著者の体感では、日本語ブログ記事の「読みやすさ」ではClaudeのほうが微差で自然に感じます。どちらも小さいモデルなら1記事数円程度なので、まずは両方で生成して読み比べるのがおすすめです。
Xserverを選ぶ理由:cronジョブ・SSH・Python環境が揃っている#
自動投稿パイプラインを動かすには、サーバーがcron・SSH・Python3をサポートしている必要があります。jidoulab.comはXserverのビジネスプランを使っています。
Xserverを選んだ理由(著者の視点)
- cronジョブがサーバーパネルのGUI上で簡単に設定できる
- SSH接続が標準対応でデプロイが楽
- Python 3系がサーバーに標準インストール済み
- WordPressとの相性も良く、REST APIが通常の設定で使える
詳しいサーバー比較はブログ自動化向けサーバーの選び方、XserverのAPI活用全般はXserverでのブログ自動化完全ガイドにまとめています。
PRXserverを試してみるエックスサーバーよくある質問#
Q. Pythonをほとんど知らなくてもこのコードは動かせますか?#
コピーして環境変数を書き換えるだけで動く設計にしています。ただし「エラーが出たときに何が起きているかわからない」という状態だと詰まりやすいのも事実です。あくまで個人の体感ですが、Pythonの pip install と .env ファイルの概念を理解している程度(3〜5時間の学習程度)あれば、ほぼ再現できると思います。
Q. 毎日自動投稿するとSEOに悪影響はありませんか?#
薄い内容の記事を大量に出しても検索評価は上がりません。本記事のコードでは品質チェックとして「draft状態で投稿→確認後に公開」を推奨しています。Google は量より質を評価する方向に進んでいるため、自動投稿しながらも内容の確認フローを外さないことが重要です。詳しくはWordPressブログをAIで始める方法で運用の考え方をまとめています。
Q. XserverではなくConoHa WINGでも同じ手順で動きますか?#
cronジョブの設定画面の場所は異なりますが、基本的な手順は同じです。ConoHa WINGもcron・SSH・Python3に対応しています。ただし著者はXserverでのみ実動作を確認しているため、ConoHa WINGでの動作は「おそらく動く」レベルであり保証はできません。
まとめ#
AI記事の自動投稿パイプラインは、Claude API・WordPress REST API・Xserver cronジョブの3点セットで最小構成なら1〜2時間で動き始めます(著者体感)。
大事なのは「動かすことよりも運用フローを決めること」です。特に品質チェックのステップを省くと、誤情報記事が自動公開されてしまうリスクがあります。まずは status="draft" で動かして、自分の目で確認してから公開するフローに慣れてください。