「記事を書き終えた。あとは公開ボタンを押すだけ」
そう思って画面を見ると、まだ2時間分の作業が残っている。画像のWebP変換、内部リンクの選定、カテゴリ・タグの設定、過去記事のリフレッシュチェック。1記事のあとに必ず発生する「めんどう」は、書く時間と同じくらいの体力を奪っていきます。
この記事のペルソナは、Claude Codeで「めんどくさい」を自動化する7つの仕組みで自動化の入口を理解した個人ブロガーです。だが、WordPress運用そのもの(公開後の判断・周辺作業)まで丸ごと自動化したい人。
そこで、僕が手元で動かしている5つの実装を、コード骨格と落とし穴付きで一気に公開します。
5つすべてを動かすと、月15時間以上が浮きます。記事を書く時間そのものは減らない一方で、公開後の「めんどう」がほぼゼロに近づきます。
この記事で出てくる用語
クリックで開きます
- WP REST API: WordPressに外部から記事を投稿・編集するための公式インターフェース。プログラムからWordPressを操作する正規ルート
- Gutenbergブロック: WordPress標準のブロックエディタの記事保存形式。
<!-- wp:paragraph -->という形式のコメント付きHTMLで保存される - Pillow: Pythonの画像処理ライブラリ。リサイズ・WebP変換・トリミングを数行で書ける
- アプリケーションパスワード: WordPressがREST API用に発行する専用パスワード。通常のログインパスワードとは別管理
- Skills: Claude Codeで動く「業務マニュアルパッケージ」のこと。反復するタスクを1つの呪文で呼び出せる仕組み
ブログ公開後の「めんどう」を5つに分解する

ブログ運営で時間が消えるのは、「書く時間」より「書いたあとの時間」だと、僕は3年運営してから気づきました。
1記事を公開するために発生する周辺作業を分解すると、5つに集約されます。
- Markdown原稿をWordPress下書きに移す(30分)
- 画像をWebPに変換しサイズを揃える(15分)
- 既存記事から内部リンクを3〜5本選ぶ(30分)
- カテゴリ・タグを既存ラベルから選ぶ(10分)
- 公開3ヶ月以上経った過去記事のリフレッシュ判断(月3時間)
10記事公開すると、月にして15時間以上が消えています。これを「自動化できない判断作業」だと思って手作業で回している人が多いのですが、5つすべてに自動化の余地があります。
ここから紹介する実装は、すべて僕の手元で動いているものです。Pythonスクリプトで実装するもの、Claude Skillsで実装するもの、それぞれの最適解を「目的・コード骨格・落とし穴」の4点セットで公開します。
flowchart TB
A["WordPress運用5実装"]:::root
B["Pythonスクリプト<br/>①下書き投稿 ②WebP変換"]:::python
C["Claude Skills<br/>③内部リンク ④カテゴリ分類"]:::skills
D["Python+AI併用<br/>⑤過去記事リフレッシュ"]:::hybrid
E["月15時間UP<br/>公開後の作業がほぼゼロに"]:::goal
A --> B
A --> C
A --> D
B --> E
C --> E
D --> E
classDef root fill:#FAF3E7,stroke:#6B4423,stroke-width:2px,color:#6B4423
classDef python fill:#FFE4C4,stroke:#E87A3E,stroke-width:2px,color:#6B4423
classDef skills fill:#FFF4D4,stroke:#E87A3E,stroke-width:2px,color:#6B4423
classDef hybrid fill:#FFE4C4,stroke:#6B4423,stroke-width:2px,color:#6B4423
classDef goal fill:#FCD34D,stroke:#6B4423,stroke-width:3px,color:#6B4423実装①〜②|公開直前を消す(下書き投稿・WebP変換)
最初の2つは「書き終わった原稿を公開可能な状態に持っていく」直前の作業を消す実装です。Pythonスクリプトで実装します。
実装①: Markdownから下書き自動投稿
目的: ローカルのMarkdown原稿を1コマンドでWordPress下書き化する。手動で記事をコピペし、Gutenbergブロックに貼り直す作業をゼロにする。
実装方法: Pythonスクリプト+WP REST API。Markdown→Gutenbergブロックの変換を行い、認証情報をローカルの.envから読み込む。
コード骨格
# 実行コマンド例
# python wp-draft.py article/draft.md \
# --category "Claude Code" \
# --tag "CLAUDE.md" --tag "AI活用"
import os, requests, markdown
from dotenv import load_dotenv
load_dotenv()
WP_URL = os.getenv("WP_URL") # https://your-site.com
WP_USER = os.getenv("WP_USER") # ログインID
WP_PASS = os.getenv("WP_APP_PASS") # アプリケーションパスワード
def md_to_gutenberg(md_text):
# 段落・見出し・コード・テーブルをブロックコメント付きHTMLに変換
html = markdown.markdown(md_text, extensions=["tables", "fenced_code"])
# ここで <!-- wp:paragraph --> などを挿入
return wrap_with_block_comments(html)
def post_draft(title, content, category_id, tag_ids, slug):
api = f"{WP_URL}/wp-json/wp/v2/posts"
data = {
"title": title,
"content": content,
"status": "draft",
"categories": [category_id],
"tags": tag_ids,
"slug": slug,
}
return requests.post(api, json=data, auth=(WP_USER, WP_PASS))「これ、自分で書ける気がしない」と思った方へ。AIに任せましょう。
Pythonで「Markdownを読み込み、WP REST APIで下書き保存するスクリプト」を書いてください。
認証はアプリケーションパスワード方式、.envから読み込みます。
Markdown→Gutenbergブロック変換も含めてください。このプロンプトをClaudeに渡すと、骨格は10分で出てきます。微調整は手元で動かしながら詰めればOKです。
落とし穴: SWELL独自ブロック(ふきだし/FAQ/STEP)はWP REST API経由では挿入できません。これらのブロックを使いたい場合は、下書き保存後にブロックエディタで手動追加します。逆に、通常の段落・見出し・テーブル・コードブロックはすべて自動投稿で完結します。
認証情報は必ず.envに分離してください。詳しい情報管理の考え方はClaude Projectsで情報管理を一元化する方法で書きました。
実装②: 画像WebP一括変換
目的: 生成画像(jpg/png)をSWELL最適サイズ(1200×630)のWebPに自動変換する。1記事ごとに3〜5枚の画像があるため、手作業だと1記事15分かかる。
実装方法: Pythonスクリプト+Pillow。プリセット(thumbnail/article)でサイズと品質を切り替える。
コード骨格
# 実行コマンド例
# python convert-webp.py visuals/generated/ \
# --preset article --delete-original
from PIL import Image
from pathlib import Path
PRESETS = {
"thumbnail": {"size": (1200, 630), "quality": 80},
"article": {"size": (1200, 630), "quality": 80},
}
def convert(folder, preset_name, delete_original):
p = PRESETS[preset_name]
for img_path in Path(folder).glob("*.[jp][pn]g"):
img = Image.open(img_path)
# アスペクト比を保ちつつクロップ
img.thumbnail(p["size"])
out = img_path.with_suffix(".webp")
img.save(out, "WEBP", quality=p["quality"])
if delete_original:
img_path.unlink()落とし穴: 4:3で生成した画像を16:9プリセットで処理すると、上下が大きくクロップされます。生成時にアスペクト比を確認し、変換プリセットと一致させてください。一致しない場合は、--resize 1200x900のように個別指定します。
--delete-originalは便利ですが、最初は外して試運転してください。WebP変換が失敗したときに元ファイルが消えると復元できません。
実装③〜④|公開直後の判断を消す(内部リンク・カテゴリ)
次の2つは「記事を書いたあとの判断作業」を消す実装です。これらは判断を伴うため、PythonスクリプトよりClaude Skillsで実装するのが向いています。
実装③: 内部リンク自動挿入
目的: 新規記事に、既存記事から最適なリンク3〜5本を自然な文脈で挿入する。35記事から手作業で選ぶと30分かかるが、AIに任せれば5分で済む。
実装方法: Skills化(呼び出し型)。既存記事の「タイトル+スラッグ+主要テーマ」のリストをCLAUDE.mdに置き、Skillsから常時参照させる。
プロンプト骨格
# Skill: internal-link-suggester
## 目的
新規記事に対して、既存記事から3〜5本の内部リンクを提案する。
## 入力
- 新規記事の本文(draft.md)
- 既存記事一覧(`assets/article-list.md`から読み込む)
## 出力
各リンクについて以下を返す:
- リンク先記事のタイトルとスラッグ
- 新規記事のどのH2セクションに置くか
- 文脈に溶け込むアンカーテキスト案
## ルール
- 既存記事一覧にないものは絶対に提案しない
- 同じH2に2本以上は置かない
- アンカーは新規記事の文脈に自然に溶け込ませる
- 「無理に挿入する」と判断したら3本未満でよい落とし穴: AI任せで何も縛らないと「むりやり挿入」が出ます。「無理なら3本未満でよい」を必ず明示してください。これがないと、文脈に合わない記事まで詰め込んできます。
Skillsの作り方の基本はClaude Skillsで作業を半分にする自作ワークフロー7選で書きました。Skillsを1個作れる人は、これと同じ要領で実装③を作れます。
実装④: カテゴリ・タグ自動分類
目的: 新規記事に最適なカテゴリ1個・タグ5個を、既存ラベルから選定する。新規ラベルを増やすと管理が崩壊するため、必ず既存から選ぶ制約を入れる。
実装方法: Skills化+WP REST APIから既存ラベル取得。
プロンプト骨格
# Skill: category-tag-classifier
## 目的
新規記事に最適なカテゴリ1個・タグ5個を既存ラベルから選定する。
## 入力
- 新規記事の本文
- WordPressから取得した既存カテゴリ一覧
- WordPressから取得した既存タグ一覧
## 出力
- カテゴリID(1個)
- タグIDリスト(5個まで)
- 選定理由(1行ずつ)
## 制約
- 新規ラベルを提案しないこと(既存IDから選ぶ)
- カテゴリは記事の主題と最も近いもの1個
- タグは記事中の主要キーワード5個
- 1単語のタグは避ける(「AI」より「AI副業」)落とし穴: 「新規ラベルを勝手に増やさない」を最優先で書いてください。AIは賢いほど「より適切なラベル名」を提案したがります。それを許すと、3ヶ月後にタグが300個に膨れ上がってブログ全体の検索性が落ちます。
WP REST APIで既存ラベルを取得するエンドポイントは/wp-json/wp/v2/categoriesと/wp-json/wp/v2/tagsです。AIに「これらのエンドポイントから一覧を取得し、Skillsの入力にするPythonスクリプトを書いて」と頼めば、1分で実装が出てきます。

実装⑤|過去記事のリフレッシュ通知
最後の実装は、書いた記事を「書きっぱなし」にしないための仕組みです。これはPythonスクリプト+AIの併用がベストです。
目的: 公開90日以上経った記事をリストアップし、Search Consoleの順位下落・流入減と組み合わせて、リライト優先順位を提案する。
実装方法: Pythonスクリプトで全記事のメタ情報を取得→順位データと突き合わせ→Claudeに渡してリライト案。
コード骨格
# 実行コマンド例
# python wp-fetch.py --days 90 \
# --output review/refresh-candidates.md
import requests, datetime
from pathlib import Path
def fetch_old_posts(days):
api = f"{WP_URL}/wp-json/wp/v2/posts"
cutoff = datetime.datetime.now() - datetime.timedelta(days=days)
posts = []
page = 1
while True:
r = requests.get(api, params={"per_page": 100, "page": page})
if r.status_code != 200: break
for post in r.json():
published = datetime.datetime.fromisoformat(post["date"])
if published < cutoff:
posts.append({
"id": post["id"],
"title": post["title"]["rendered"],
"slug": post["slug"],
"published": post["date"][:10],
})
page += 1
return posts取得したリストをClaudeに渡して、リライト案を生成させます。
以下は公開90日以上経過した記事一覧です。
Search Consoleの順位データ(CSV添付)と組み合わせて、
リライト優先順位を上から5本選んでください。
各記事について以下を返してください:
- リライトの方向性(情報追加/構成改善/タイトル変更)
- 想定される効果(順位上昇/滞在時間UP/CTR改善)
- 必要な追加リサーチの観点
落とし穴: AIが提案したリライト案を「全部適用」しないでください。1本ずつ手動でレビューし、自分の判断軸(やる15/捨てる15で書いた30項目)に通します。AI任せで一斉リライトすると、自分の文体や立ち位置がぶれます。
WP連携をMCP経由にしたい場合は、Claude Code × MCP活用ガイドで紹介したGitHub MCP・Notion MCPの構造を参考にすると、自作のWordPress用MCPもイメージしやすくなります。
5実装の連結で「公開後の作業」が消える+まとめ

5つの実装を見ました。最後に「どれから始めるか」と「連結のコツ」を伝えます。
おすすめの導入順
5つを一気に作る必要はありません。1つずつ動かして、効果を確認してから次に進む方が確実です。
- 実装②(WebP変換)から始める — 一番作りやすく、効果が即実感できる
- 次に実装①(下書き投稿) — 30分の作業が1分に縮む手応え
- 実装④(カテゴリ・タグ)でSkillsデビュー — Pythonからの卒業ライン
- 実装③(内部リンク)でSkillsの本領発揮 — 35記事以上ある人ほど効く
- 実装⑤(過去記事リフレッシュ)は最後 — 公開記事が30本以上溜まってから
①②はPythonスクリプト、③④はSkills、⑤はその両方の併用、という棲み分けです。
5実装を動かすために必要なもの
ここまでの5実装を本気で運用するなら、Claude Pro(月$20)以上のプランが必要です。
無料プランだとSkillsの呼び出し回数や、過去記事リフレッシュ時のリライト案生成で送信回数の上限に当たり、止まります。月15時間が浮く前提で考えると、月$20は1時間あたり$1.3の自己投資です。SWELLテーマの開発元が「AIブロガー向けに最適化されたエコシステム」を整えてくれている今、テーマと有料Claudeの組み合わせが2026年時点の最短ルートです。
迷っているなら、まず1ヶ月だけProプランで試してください。1ヶ月使ってみて効果が薄ければ翌月から解約できます。残るのは、自分のWordPress運用に最適化された5つの自動化資産です。
まとめ
5つの実装を、目的・コード骨格・落とし穴の4点セットで公開しました。
- 実装①: Markdownから下書き自動投稿(Python)
- 実装②: 画像WebP一括変換(Python)
- 実装③: 内部リンク自動挿入(Skills)
- 実装④: カテゴリ・タグ自動分類(Skills)
- 実装⑤: 過去記事リフレッシュ通知(Python+AI)
すべてを動かすと、月15時間以上が浮きます。月10記事を量産しても、書いたあとの周辺作業がほぼゼロになる感覚です。今日は実装②(WebP変換)だけでいいので、明日のあなたが「もう手作業に戻れない」と感じる体験を作ってください。

🎟️お得な招待コード
Windows/Mac対応の超高速・高精度なAI音声入力ツール
Aqua Voice(1か月間無料でProプラン利用招待コード)
指示1つで計画・実行・成果物まで自律的に仕上げるAIエージェント
Manus(500クレジット獲得招待コード)
安定性・高速性・コスパに優れた国内シェアNo.1のレンタルサーバー
X Server(初回利用料金最大20%割引き)

