【Python×WordPress】面倒なブログ更新作業を「スクリプト1つ」で自動化した話【開発効率化】

  • URLをコピーしました!

こんにちは、ゲーム開発者のれいあです。

ブログを書くこと自体は嫌いじゃないんです。
でも、「記事が完成した後の、WordPressへの移植作業」。あれだけはどうしても生産性を感じられませんでした。

  • Markdownで書いた原稿を、WordPressのエディタにコピペする
  • 適切な場所に画像をアップロードして挿入し直す
  • パーマリンク(URLスラッグ)を英語で設定する
  • カテゴリを選び、タグを一つひとつ入力する
  • 投稿日時を設定する…

これらは一つ一つはなんてことない作業ですが、積み重なると意外と時間が取られます。
「この単純作業をしている時間があれば、その間に別のツール開発が進められるのでは…?」

そう考えた私は、「Markdownで記事を書いたら、コマンド1発で画像挿入から投稿設定まで全自動で行うシステム」をPythonで構築しました。

実際、このシステムが動いている数分間、私は別のコードを書いたり、コーヒーを淹れたりできています。
今回は、そんな「自分専用・ブログ投稿自動化システム」の裏側を紹介します。


目次

開発環境とシステム構成

私のブログ環境は以下の通りです。

  • サーバー: Xserver(安定・高速で定番ですね)
  • CMS: WordPress
  • 画像管理: WordPress標準のメディアライブラリ

特別なデータベースや画像サーバー(S3など)は使わず、WordPress標準の機能を外部からPythonで操作する形をとっています。

自動化システムの全体像

Python Blog Automation Flow

  1. VSCode (Cursor) でMarkdown記事を書く。
  2. python deploy_article.py を実行する。
  3. 〜 完 〜

これだけで、以下の処理が全自動で行われます。

  • 画像処理: 記事内のローカルパスにある画像をWordPressへアップロードし、URLを置換。
  • サムネイル生成: 記事タイトルからアイキャッチ画像を自動生成し、登録。
  • メタデータ設定: パーマリンク、カテゴリ、タグ、投稿日時を自動設定。
  • 投稿: 下書き(または公開)状態で保存。

1. 「ただのコピペ」をスクリプトにやらせる

まずは「書く」フェーズの効率化です。
毎回「ファイルを作って日付を入れて…」という定型作業も、スクリプト化しました。

# scripts/create_draft.py (抜粋)
def create_draft(title):
    date_str = datetime.datetime.now().strftime("%Y-%m-%d")
    filename = f"{date_str}-{safe_title}.md"

    # フロントマター(設定領域)を自動生成
    content = f"""---
title: {title}
date: {date_str}
status: draft
---

# {title}
ここに本文を書く...
"""
    with open(filepath, "w") as f:
        f.write(content)

python scripts/create_draft.py "記事タイトル" と打つだけで、執筆用のMarkdownファイルが生成されます。
あとは中身を書くだけ。この「開始のハードル」を下げるのが継続のコツです。

2. WordPress REST APIで「完全再現」

一番の目的だった「WordPressへの移植作業」の自動化には、WordPress標準の REST API を使用しました。
Xserverなどのレンタルサーバーでも、設定で「REST API」を有効にする(またはアクセス制限を適切に設定する)ことで使用可能です。

import frontmatter
import markdown
import requests

def deploy_article(md_path):
    post = frontmatter.load(md_path)
    # Markdownを目的に合わせてHTMLに変換
    html_content = markdown.markdown(post.content)

    url = "https://leia-talks.com/wp-json/wp/v2/posts"
    # アプリケーションパスワードを使用(セキュリティ的におすすめ)
    auth = ("user_name", "app_password")

    data = {
        "title": post.metadata['title'],
        "content": html_content,
        "status": "draft",
        "slug": post.metadata['slug'], # パーマリンクも自動設定
        "categories": resolve_categories(post.metadata['category']), # カテゴリID解決
        "tags": resolve_tags(post.metadata['tags']) # タグID解決
    }

    requests.post(url, json=data, auth=auth)

※コードは簡略化しています。

このスクリプトの肝は、「カテゴリやタグのID解決」です。
人間がポチポチ選択していたカテゴリも、プログラムが「既存のカテゴリ名からIDを検索(なければ新規作成)」して自動で紐付けてくれます。
これで、管理画面を開く必要すらなくなりました。

3. 画像もメディアライブラリへ自動アップロード

記事中に画像を貼り付ける際も、以前はいちいちアップロードボタンを押していましたが、今はMarkdownにローカルの画像のパスを書くだけです。
スクリプトが「記事中の画像パスを検出し、API経由でWordPressにアップロードし、返ってきたURLに置換する」という処理を行っています。

これによって、記事の見た目をプレビューしながら書き進め、そのまま投稿できるようになりました。

どうやって勉強した?

ちなみに、私はPythonの専門家ではありません。
今回のスクリプトも、ChatGPTやCursorなどのAIツールに「こういうことがしたい」と相談しながら組み上げました。

「Pythonの文法を覚えてから…」と構えるよりも、「やりたいこと(自動化)」をAIとペアプログラミングしながら実現していく方が、結果的に学びも速いと感じています。
エラーが出てもAIと一緒にデバッグすればいいだけですからね。

今後の展望:AIによる「高品質な」完全自動化

現在は「執筆」は人間、「投稿」は自動化、という分担ですが、今後は「執筆」の部分もAIと協力して自動化したいと考えています。

ただし、よくある「量産型AI記事」を作るつもりはありません。
私の体験や思考(一次情報)を元にしつつ、構成や表現の肉付けをAIが担うような、「読んでいて面白く、かつ人間が書くよりも効率的な」新しい執筆フローを模索中です。

本来人間がやるべき「創造的な作業(ツール開発や体験)」にもっと時間を使うために、これからも面倒な作業はどんどん自動化していこうと思います。

よかったらシェアしてね!
  • URLをコピーしました!
目次