このサイトはアフィリエイトリンクを含んでいます
スポンサーリンク

Claude Code WordPress 連携とは?ネタから下書き投入まで自動化した話

Claude Code WordPress 連携で記事作りが自動化されていくイメージ 自動化
スポンサーリンク
スポンサーリンク

Claude Code WordPress 連携という言葉で検索してここに来た方は、たぶん「そんなことが本当にできるの?」と半信半疑なんじゃないでしょうか。ぼくも最初はそう思っていました。でも実際に手を動かしてみたら、ネタを渡すだけで、記事の下書きができて、画像の準備が進んで、商品のリンクまで入って、WordPressの下書きとして保存されるところまで、一続きで動くようになったんです。

今日はその中身を、実際に使っているコードを見せながら書きます。いちばん驚かれると思うのは、商品を探すところから、WordPressに商品カードとして置くところまでが自動でできている部分です。ここは正直、ぼく自身もでき上がったときに「これはすごいことをしてしまったな!」と思いました。

先にお断りしておきます。全部がボタン一つというわけではありません。今のところ自動でできているのは「下書きに入れる」ところまでで、実際に公開ボタンを押すのはぼく自身です。それでも、下書きに入るところまでなら、同じ考え方で自分のWordPressでも再現できるはずです。この記事を読み終えたときに、そう思ってもらえたら成功です。

Claude Code WordPress 連携で記事作りが自動化されていくイメージ
スポンサーリンク
スポンサーリンク
  1. Claude Code WordPress 連携とは?ぼくが自動化したのはここです
    1. ネタを渡すと、下書き・画像・商品リンク・WordPress下書きまで一続きで動きます
    2. 正直に書きます。全部を自動化したわけではありません
  2. いちばん驚かれたのはここです。商品検索から商品カード設置までが自動でできます
    1. 楽天の商品を検索する部分のコードです
    2. 実際に動かすと、こんな結果が返ってきます
    3. 見つけた商品を、WordPressの商品カードとして登録する部分のコードです
  3. Amazonは商品検索の窓口が使えないので、別のやり方にしています
    1. 商品ページのURLから商品番号を取り出す部分のコードです
    2. 形が正しくても、別の商品だった。実際にあった話です
  4. WordPressへ送る最後の一歩。危ないときは送らない仕組みにしてあります
    1. 実際にWordPressへ記事を送っている数行です
    2. 送っていいのは「下書き」だけ、にしてあります
    3. 送る前に、もう一度だけ確認する仕組みもあります
  5. 自分のブログで同じことをするには、何が要るか
    1. WordPress側に用意するもの
    2. 商品カードを自動登録したいなら、プラグインがもう一段要ります
    3. いきなり全部つなげず、まず読み取りだけの操作から試すのがおすすめです
    4. まずは「下書きを自動で作る」ところからでも十分です
  6. まとめ:Claude Code WordPress 連携で、下書きまでの作業が一続きになりました

Claude Code WordPress 連携とは?ぼくが自動化したのはここです

まず結論から書きます。ぼくが自動化したのは「ネタを記事にして、WordPressの下書きに入れる」までの一連の作業です。記事を書くところだけではなく、画像の準備、商品リンクの用意、WordPressへの投稿という、書いたあとの面倒な作業もまとめて含んでいます。

ネタを渡すと、下書き・画像・商品リンク・WordPress下書きまで一続きで動きます

やっていることを順番に並べると、こうなります。

① ネタ
② 記事の下書き
③ 画像
④ 商品リンク
⑤ WordPressの下書き

※ ⑤の先(公開ボタンを押すところ)だけは、今のところぼくが自分でやっています。

①のネタは、たとえば「今日こんなことがあった」という一言や、気になったニュースのURLです。そこから②の記事の下書きができ、③の画像が用意され、④の商品リンクが入り、⑤としてWordPressに下書きの状態で保存されます。ここまでが自動で動く範囲です。

ここで1つ、大事なことを先に書いておきます。この記事でこれから見せるコードは、ぼくが1行ずつ手で書いたものではありません。全部、Claude Codeに「こういう仕組みが欲しい」と頼んで書いてもらったコードです。つまり、この記事のコードをそのまま丸写しする必要はなくて、同じようにClaude Codeに頼めば、自分のブログ用の仕組みを書いてもらえます。Claude Code WordPress 連携というのは、要するに「Claude CodeにWordPress用のスクリプトを書かせて動かす」という、それだけの話なんです。

もう少しだけ足すと、そもそもClaude Codeというツール自体が何をできるのか気になる方は、以前にまとめた記事もあわせてどうぞ。

非エンジニアもClaude Codeで文書整理!できること入門
Claude Codeは非エンジニアの文書整理にも使えるAIです。ファイルの整理・リネーム・CSV集計など、プログラミングなしでできることを実体験つきで解説。始め方や安全の仕組み、ぼくの「AI社員がいる会社」の話もありますよ!

正直に書きます。全部を自動化したわけではありません

「一続きで動く」と書きましたが、人がまったく関わっていないわけではありません。記事の中身が事実として正しいかは、最後にぼくが自分の目で確認します。画像の生成にはコストがかかるので、毎回作るかどうかも自分で判断しています。そして何より、WordPressの下書きから実際に公開するボタンを押すのはぼくです。ここは自動化していません。うっかり間違った内容がそのまま世に出てしまうのが怖いからです。

ですので正確に言うと、自動化したのは「下書きが整うまで」です。ただ、ブログを書く作業の中でいちばん時間がかかっていたのは、実はこの「下書きが整うまで」の部分でした。ここが自動で進むようになっただけでも、体感はかなり変わりました。

この記事のコードは、全部Claude Codeに書いてもらったものです。その頼み方の考え方をまとめて学べる本はないかと探して見つけたのがこれでした。楽天ブックスで3,300円、レビューは1件で★4です。書名にある「思考法」は、まさにぼくがいちばんつまずいたところだなと思って見ています。ぼくもまだ未読ですので、読んだら改めて書きますね。

Amazonでも同じ本が買えます。実践Claude Code入門(Amazon)

さて、ここからが今回いちばん見せたかった部分です。

いちばん驚かれたのはここです。商品検索から商品カード設置までが自動でできます

この章がこの記事の山場です。ブログでアフィリエイトをやっている方なら分かると思うのですが、商品を探して、価格やレビューを確認して、リンクを作って、記事に貼ります。この一連の作業は地味に時間を取られます。ここが自動でできるようになったのが、今回いちばん大きな変化でした。

楽天の商品を検索する部分のコードです

まずは検索の部分です。実際に使っているコードから、要点だけを抜き出しました。

const API_ENDPOINT = "https://openapi.rakuten.co.jp/ichibams/api/IchibaItem/Search/20260701";

// ……(間を省略)……

const env = loadEnvFile(ENV_FILE) || {};
const appId = env.RAKUTEN_APPLICATION_ID || "";
const accessKey = env.RAKUTEN_ACCESS_KEY || "";
const affId = env.RAKUTEN_AFFILIATE_ID || "";

// ……(間を省略)……

function buildQuery(searchParams, appId, affId, maskCreds) {
  const q = new URLSearchParams();
  q.set("applicationId", maskCreds ? "****(RAKUTEN_APPLICATION_ID)" : appId);
  if (affId) q.set("affiliateId", maskCreds ? "****(RAKUTEN_AFFILIATE_ID)" : affId);
  for (const [k, v] of Object.entries(searchParams)) {
    if (v !== undefined && v !== null && v !== "") q.set(k, String(v));
  }
  return q;
}

この数行がやっているのは、次の3つです。1つめは、楽天市場商品検索APIの宛先(API_ENDPOINT)を決めていること。2つめは、検索に必要な鍵(アプリID・アクセスキー・アフィリエイトID)を、コードに直接書かずに環境変数から読み込んでいること。3つめは、確認用の表示をするときだけ、その鍵を****に置き換えて隠していることです。鍵の値そのものはこのコードのどこにも書かれていません。だからこのコードをそのまま見せても、値は一切出ません。

実際に動かすと、こんな結果が返ってきます

言葉で説明するより、実際に動かした結果を見てもらったほうが早いと思います。「Claude Code 入門 本」というキーワードで検索してみました。

[1] 実践Claude Code入門ー現場で活用するためのAIコーディングの思考法 [ 西見 公宏 ]
    itemCode: book:21793433
    価格: 3,300円 店舗: 楽天ブックス レビュー: 4.0(1件)
    affiliateUrl: https://hb.afl.rakuten.co.jp/……(間を省略。実際にはこの並びで長いアフィリエイトURLが1本返ってきます)

これは今日、この記事を書きながら実際に動かした結果です。読みやすく整えるとこうなります。商品名・価格・レビュー件数・アフィリエイトリンクが1回の呼び出しでまとめて返ってきます。この記事の下のほうで紹介している本のリンクも、実はこの検索結果から作りました。

見つけた商品を、WordPressの商品カードとして登録する部分のコードです

検索して終わりではありません。見つけた商品を、WordPressの商品カード(Rinkerというプラグインが使う仕組みです)として登録するところまで自動でつなげています。ここは標準のWordPressの仕組みだけでは足りなかったので、小さな独自の窓口をプラグインとして作りました。

// ……(クラス宣言など前後は省略)……

const REST_NAMESPACE  = 'myblog/v1';
const REST_ROUTE      = '/rinker-items';

public static function register_routes() {
    register_rest_route(
        self::REST_NAMESPACE,
        self::REST_ROUTE,
        array(
            array(
                'methods'             => WP_REST_Server::CREATABLE,
                'callback'            => array( __CLASS__, 'create_item' ),
                'permission_callback' => array( __CLASS__, 'permission_check' ),
            ),
        )
    );
}

// ……(間を省略)……

public static function permission_check() {
    if ( ! is_user_logged_in() ) {
        return new WP_Error(
            'acr_not_logged_in',
            '認証が必要です。アプリケーションパスワードによるBasic認証でアクセスしてください。',
            array( 'status' => 401 )
        );
    }
    if ( ! current_user_can( 'edit_posts' ) ) {
        return new WP_Error(
            'acr_forbidden',
            'このエンドポイントの利用には edit_posts 権限が必要です。',
            array( 'status' => 403 )
        );
    }
    return true;
}

※ 1行目の窓口の名前(myblog/v1)は、元のコードでは別の名前が入っていましたが、記事に出す都合で汎用の名前に置き換えました。自分のブログで作るときは、ここは好きな名前に変えてください。

このコードがやっているのは、大きく2つです。1つめは、register_rest_routeで「この窓口にPOSTが来たら、商品を登録する処理を呼ぶ」という道を1本作っていること。2つめは、permission_checkで「ログインしていて、かつ記事を編集する権限を持つ人だけ」に絞っていることです。ログインしていない相手には401(認証が必要)、権限が無い相手には403(権限不足)を返して、そこで止めます。この2段の確認があるおかげで、外から誰でも商品カードを勝手に登録できてしまう、という事態を防いでいます。

Amazonは商品検索の窓口が使えないので、別のやり方にしています

楽天は検索APIで商品を探せますが、Amazonは事情が違います。Amazonの商品検索API(PA-API)は、今のぼくのアカウントでは条件を満たせず使えない状態です。そこで、商品ページのURLから商品番号(ASIN)を取り出す方式にしています。

商品ページのURLから商品番号を取り出す部分のコードです

export const MARKERS = [
  "dp/product",
  "dp",
  "gp/product/glance",
  "gp/product",
  "gp/aw/d",
  "gp/offer-listing",
  "gp/customer-reviews",
  "exec/obidos/ASIN",
  "exec/obidos/tg/detail/-",
  "o/ASIN",
];
export const PATH_RE = new RegExp(`/(?:${MARKERS.join("|")})/([A-Za-z0-9]{10})(?![A-Za-z0-9])`, "i");

この数行がやっているのは、Amazonの商品ページのURLの中から、商品番号(10桁の英数字)を抜き出すことです。Amazonの商品ページのURLには何通りかの形があって、/dp/商品番号 のように短い形もあれば、/gp/product/商品番号 のような形もあります。MARKERSは、そのURLの形を実際に1つずつ開いて確かめたうえで並べた一覧です。この一覧のどれかに一致した直後の10桁を、商品番号として取り出します。

1つ、実際に確かめて分かったことを書いておきます。Amazonの商品ページのURLは、/dp/商品番号 の後ろに /ref=なんとか が付いているものと、付いていないものの両方が実在します。どちらの形でも同じように商品番号を取り出せるように作ってあります。

形が正しくても、別の商品だった。実際にあった話です

ここからが、この方式でいちばん怖いところです。商品番号は「Bで始まる10桁の英数字」という決まった形をしています。でも、形が正しいからといって、それが本当にその商品を指しているとは限りません。

実際に確かめたところ、B0000000AA という、形としては正しい商品番号がありました。ところが開いてみると、それは「One Spirit」という音楽アルバムのページでした。まったく別の商品です!もう1つ、B000000000 という形の正しい番号もありましたが、こちらは404、つまりページ自体が存在しませんでした。

URLから番号を取り出すだけの処理では、この2つを見分けられません。形さえ合っていれば、それらしいリンクを作れてしまいます。これはさすがに怖いと思ったので、番号を取り出したあとにもう一段、実際に商品ページを開き直して、商品名が記事で紹介したいものと一致しているかを確認する仕組みを別に用意しました。この記事の下のほうで紹介している本のAmazonリンクも、貼る前に全部この確認を通しています。

ここまでアフィリエイトリンクを作る話をしてきましたが、そもそも何をどう紹介すると読まれるのか、という側の本も1冊置いておきます。楽天ブックスで1,760円でした。今回のコードは「リンクを作る手間」を減らすものなので、その先の「何を紹介するか」はこういう本の領分だと思っています。

こちらもAmazonに同じ本があります。ゼロから学べる ブログ×サイト運営×集客の自動化(Amazon)

商品の探し方の話はここまでです。次は、できあがった記事をWordPressへ送る最後の一歩を見ていきます。

WordPressへ送る最後の一歩。危ないときは送らない仕組みにしてあります

ネタから記事ができて、画像も商品リンクも用意できたら、最後はWordPressに送る番です。ここで気をつけているのは「間違えても、事故らない形にする」ことです。

実際にWordPressへ記事を送っている数行です

ここまでは「送らないための仕組み」の話が続きましたが、肝心の「送る」部分そのものも見せます。WordPressには、記事の下書きを作るための窓口(/wp/v2/posts)が標準で用意されていて、そこにアプリケーションパスワードを添えてPOSTすると、下書きが1件できます。

// WAF対策: /wp-json/ 形式は403で遮断されるため、?rest_route= 形式を使う
const endpoint = `${baseUrl}/?rest_route=/wp/v2/posts`;

// ……(間を省略)……

const auth = Buffer.from(`${env.WP_USER}:${env.WP_APP_PASSWORD}`).toString("base64");

// ……(間を省略)……

res = await fetch(endpoint, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: `Basic ${auth}`,
  },
  body: JSON.stringify(requestBody),
});

この数行がやっているのは、次の3つです。1つめは、送り先のURLを組み立てていること。2つめは、WordPressのユーザー名とアプリケーションパスワードを、Basic認証という形式に変換していること(auth)。3つめは、そのURLへ実際にPOSTを送っていて、認証と、記事のタイトル・本文・statusなどをまとめたデータ(requestBody)を一緒に渡していることです。ここが動くと、WordPress側に下書きが1件できます。

1つ、実際につまずいた話を書いておきます。WordPressのREST APIは、本来なら /wp-json/wp/v2/posts というきれいな形のURLで呼べます。ところが、ぼくが契約しているレンタルサーバーでは、このきれいな形のURLを叩くと、サーバー側のファイアウォールに403でブロックされました。原因を確かめて、代わりに ?rest_route=/wp/v2/posts というクエリ形式に変えたら、同じ内容で通りました!上のコードの1行目のコメントは、そのときの記録です。同じようにレンタルサーバーを使っている方は、きれいな形のURLで403が返ってきたら、この形も試してみてください。

送っていいのは「下書き」だけ、にしてあります

const ALLOWED_STATUSES = ["draft", "pending"];

// ……(間を省略)……

if (!ALLOWED_STATUSES.includes(opts.status)) {
  die(`status「${opts.status}」は使えません。指定できるのは draft(下書き)と pending(レビュー待ち)だけです。`);
}

この数行は、「下書き」か「レビュー待ち」以外の状態でWordPressに送ろうとしたら、その場で止める仕組みです。つまりこのプログラムには、記事を公開する力そのものがありません。仮に指示を間違えても、いきなり記事が世に出ることはない、という作りにしてあります。

送る前に、もう一度だけ確認する仕組みもあります

// ……(この前後にも確認処理が続きます)……

const ph = findPlaceholders(content);
const ij = findIjibutsu(content);
if (ph.length > 0 || ij.length > 0) {
  console.error("本文に「公開してはいけない文字列」が残っているため、WordPress へは送りません。");
  process.exit(1);
}

これは、まだ画像のURLが決まっていない場所に置いていた仮の目印(たとえば「ここに画像が入ります」のような書きかけの印)が、本文に残ったままになっていないかを、送信する直前にもう一度だけ確認する仕組みです。書きかけの状態のまま誤って送ってしまう事故を、最後の最後で防ぐための2段目の確認です。実は、この記事の下書きも、公開できる形に整うまでの間はこの手の仮目印が本文に残っていて、その間はこの仕組みのおかげでWordPressには送れないようになっています。

自分のブログで同じことをするには、何が要るか

ここまで読んで、「自分のWordPressでも試してみたい」と思った方向けに、必要なものをまとめます。

まず、手元に用意するものは次の4つです。

  • Claude Code(この記事のコードは、全部これに書いてもらいました)
  • Node.js(Claude Codeが書いたスクリプトを、実際に動かす土台です)
  • WordPressの管理画面にログインできるアカウント
  • WordPressのアプリケーションパスワード(作り方はこのあとすぐ説明します)

最初の一歩の順番も、先にまとめておきます。①WordPressのアプリケーションパスワードを発行します。②「WordPressの下書きにPOSTするスクリプトを書いて。statusはdraft固定で」とClaude Codeに頼んで、この記事で見せたようなコードを書いてもらいます。③実際に動かして、WordPress側に下書きが1件できるのを確認します。ここまでできれば、この記事で見せた仕組みの土台は完成です。商品カードの自動登録などは、そのあとで少しずつ足していけます。

WordPress側に用意するもの

まず要るのは、WordPress側でAPI経由の操作を許可する準備です。WordPressには「アプリケーションパスワード」という仕組みがあって、これを使うと、いつものログインパスワードとは別の、API専用のパスワードを発行できます。この専用パスワードを使えば、プログラムからWordPressに安全に接続できます。作り方は、WordPressの公式ドキュメントにまとまっています。

WordPress公式ドキュメント「REST APIの認証」(※英語サイト・自動翻訳推奨)

商品カードを自動登録したいなら、プラグインがもう一段要ります

記事の下書きを送るところまでなら、標準のWordPressのAPIだけで足ります。ただ、商品カード(今回の場合はRinkerというプラグインの商品データ)を登録するところまでやりたい場合は、標準のAPIには用意されていない窓口なので、上で見せたような小さな独自のプラグインをもう1つ足す必要があります。ここは少しハードルが上がりますが、やっていることは「決まった形のデータを受け取って、正しい相手からのリクエストだけを通す」だけなので、思ったより単純です。

今回足したような独自のプラグインを、自分の手で組み立ててみたい方向けの本を1冊置いておきます。楽天Kobo電子書籍ストアで3,520円の電子書籍版です(同じ書名の紙の本は、楽天では中古しか見つかりませんでした)。ぼくはまだ読んでいませんが、プラグイン開発をひととおり学ぶならこのあたりだろうと思って選びました。

Kindle版はAmazonにもあります。WordPressプラグイン開発のバイブル(Amazon)

いきなり全部つなげず、まず読み取りだけの操作から試すのがおすすめです

ここまで見せたコードには、共通する作り方があります。それは「まず送信せずに確認できる状態を用意してから、実際に送る」という順番です。楽天の検索は読み取りだけなので、鍵さえ用意すればすぐに試せます。WordPressへの送信やRinkerの登録は、実際にデータが変わる操作なので、ぼくは必ず「これから何を送るか」を表示するだけの確認用の実行を先に済ませてから、本番の送信に進むようにしています。

いきなり全部をつなげようとすると、どこで何が起きているのか分からなくなって、結局は手を止めて確認する羽目になります。それなら最初から、1つずつ「試してみる→確認する→次に進む」という順番で組んだほうが、遠回りに見えて実は早いと思います。

まずは「下書きを自動で作る」ところからでも十分です

商品カードの自動登録は、正直いちばん手間がかかる部分です。いきなりそこを目指さなくても大丈夫です。まずはネタから記事の下書きを作るところだけを自動化しても、体感はだいぶ変わります。Claude Codeを使ったことがない方は、まず何ができるツールなのかを知るところから始めてみてください。記事の前半でリンクした、Claude Codeでできることをまとめた記事が参考になると思います。

Claude Codeを一段使いこなしたくなったら、スキルを使い分ける方法をまとめた記事や、/goalコマンドの使い方をまとめた記事もあわせてどうぞ。作業を頼むときの指示の出し方が、だいぶ変わってきます。

まとめ:Claude Code WordPress 連携で、下書きまでの作業が一続きになりました

長くなったので、要点をまとめます。

  • 自動化したのは「ネタを記事にして、WordPressの下書きに入れる」までの一連の作業です。公開ボタンを押すのは今もぼく自身です。
  • いちばん驚かれたのは、商品検索から商品カード設置までが自動でできている部分です。楽天の検索APIで商品を探し、独自のプラグインの窓口を通してWordPressに登録します。
  • Amazonは検索の窓口が使えないので、商品ページのURLから商品番号を取り出す方式にしています。形が正しくても別の商品だった、という実例もあったので、貼る前に商品ページを開き直して確認する仕組みを別に用意しています。
  • WordPressへの送信は「下書き」以外を送れない作りにしてあり、書きかけの目印が残っていたら送らない確認も付けています。間違えても事故らない形を先に決めておく、という考え方です。
  • 自分のブログで再現するなら、まずはWordPressのアプリケーションパスワードを用意するところから。商品カードの自動登録まで狙うなら、独自のプラグインがもう1つ要ります。

ブログ運営を自動化する話は、以前にも別の切り口で書いています。ノートの整理を自動化した話は、今回の記事とは違う部分の自動化なので、あわせて読むと「どこまでが自動でできるのか」の全体像がつかめると思います。

Claude Codeでブログ運営を自動化する3つの方法。実際に試してみました
claude code ブログ 自動化を3つとも実際に試しました。ドキュメント・知識/メモリー・ルールを定期チェックし、見つけても必ず確認してから反映する手順を、結果つきで紹介します。

もし途中でAI会社ごっこがうまくいかなかった話に興味があれば、こちらもどうぞ。今のやり方に落ち着くまでの、遠回りした話です。

AI会社を作って行き詰まり、作り直した話

この一連の仕組みを動かして、実際に記事を1本、ネタから下書き投入まで通しで動かせたのは2026年8月26日でした。まだ動かし始めたばかりなので、これからも直したい部分は出てくると思います。何か分かったら、また続報として書きますね。

自動化の作り方をもっと詳しく知りたい方は、Claude Codeを対話なしで動かす公式の仕組みも参考になります。

Claude Code公式ドキュメント「Run Claude Code programmatically」(※英語サイト・自動翻訳推奨)

商品検索から商品カード設置までが自動で進む様子のイメージ

コメント

タイトルとURLをコピーしました