1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MarkdownファイルをそのままWordPressへ投稿できるCLI「wpctl」を作った

1
Posted at

概要

wpctlは、Markdown・テキスト・HTMLファイルをWordPress REST API経由で投稿・更新できる、Python製のCLIツール兼ライブラリです。

pip install wpctl

WordPress公式のCLIとしてWP-CLIがありますが、PHP製でサーバー側の管理全般(プラグイン管理やDB操作など)を対象にしています。wpctlはREST API経由でPythonから叩ける投稿専用ツールという位置付けで、CIやスクリプト、AIエージェントのワークフローに投稿処理を組み込みたい場合に向いています。

もう一つの特徴が、Markdown⇔HTMLの変換に対応している点です。WordPress本体は本文をHTMLで保持しますが、wpctlは投稿時にMarkdownをHTMLへ変換して送信し、post show --format mdでは逆にHTMLをMarkdownへ変換して取り出せます。書き込み・読み出しの両方をMarkdownのまま扱えます。

作った直接のきっかけも、この変換部分でした。WordPressへ投稿できるツールはいくつかありましたが、Markdown⇔HTML変換に対応したものが見当たらず、Markdown原稿をそのまま投稿・取得できる手段が欲しくて自作しています。

認証設定

投稿にはWordPressの「アプリケーションパスワード」を使った認証が必要です。環境変数、またはwpctl auth setで作成する設定ファイル(.wpctl_conf)のいずれかで管理できます。

# 対話形式で設定(値は自分のサイトの情報に置き換える)
wpctl auth set

# 設定状況の確認(値はマスクされて表示される)
wpctl auth status

優先順位は「環境変数 > プロジェクト設定 > ユーザー設定」です。wpctl auth setでプロジェクト設定ファイルを作成すると、.gitignore.wpctl_confが自動で追記されます。

使い方

投稿

wpctl post create --status publish --categories "1,2" --tags "tech,python" article.md

--status省略時はdraftになります。タイトル省略時はMarkdown内の最初の#見出しが使われます。

更新

wpctl post update --id 42 --tags "tech,python" article.md

一覧・詳細取得

wpctl post get --status draft
wpctl post show --format md 42

post show --format mdは、既存記事をMarkdownとして取り出せるので、リライトや記事の棚卸しにも使えます。

Pythonライブラリとしての利用

import wpctl

result = wpctl.create_post(
    content="# タイトル\n\n本文...",
    content_format="md",
    status="draft",
)

CLI呼び出しの代わりに、スクリプトやAIエージェントの処理内から直接投稿ロジックを呼び出せます。

開発について

wpctl自体も、基盤部分とディレクトリ構成は自分で設計・実装し、post createauth setといった個々の機能はAIエージェントへの指示ベースで実装しました。設計の骨格を自分で決めておくと、機能追加をAIに任せてもディレクトリ構成やコマンド設計がぶれにくい、という手応えがありました。

活用例: AIエージェントによる記事投稿フロー

筆者が関わっている社内プロジェクトでは、次の流れで技術ブログを運用しています。

  1. AIエージェントが記事のドラフト(構成・本文)を作成する
  2. 人間が内容を確認し、公開を承認する
  3. 承認後、AIエージェントがwpctl経由でWordPressへ投稿する

認証情報の発行・設定は事前に人間がwpctl auth setで行い、AIエージェント側には値を発行させません。投稿の実行(draft作成含む)も、必ず人間の承認を得てから行うようにしています。Markdown原稿とREST APIだけで投稿処理を組み込める点が、この「下書きは自動化し、公開判断は人間が行う」という運用と噛み合っています。

まとめ

  • pip install wpctlで導入可能
  • コマンドはpost create/update/get/showauth set/statusが中心
  • Markdown駆動の執筆環境やAIエージェントのワークフローに投稿処理を組み込みたい場合に向いている

不具合や要望があれば、GitHubのIssueからお送りください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?