Contents
Revive Old Postsの無料版が使えなくなった
WordPressで過去記事を定期的にSNSに再投稿するために「Revive Old Posts」を使っていましたが、無料版では以下の制限があります。
- X(Twitter)への投稿:不可
- Facebookページへの投稿:不可(API仕様変更により)
- LinkedInへの投稿:不可
- 有料版(Pro)は月額$9〜
そこでClaude Codeを使って自分で作ってしまうことにしました。今回はその全過程を会話ログとともに公開します。
Claude Codeとは?
Claude CodeはAnthropicが提供するターミナルベースのAIエージェントです。WSL(Windows Subsystem for Linux)上で動作し、ファイルの直接読み書きや複数ステップの作業を自律的に実行できます。
通常のclaude.aiチャットとの違いは「ファイルを直接読み書きして保存まで完結させてくれる」点です。単発の作業ならチャットで十分ですが、繰り返し発生する定型作業はClaude Codeが本領発揮です。
Step 1:X APIアカウントの取得
まずXに投稿するためのAPIアカウントをdeveloper.twitter.comで申請しました。申請時の用途説明はこんな感じでOKです。
I want to automatically repost old articles from my WordPress blog to share past content with my X followers. The bot will post once or twice a week with article title and URL.
APIキー4つ(API Key・API Key Secret・Access Token・Access Token Secret)を取得しましたが、テスト投稿でエラーが発生しました。
✗ Your enrolled account does not have any credits to fulfill this request. (HTTP 402)
X APIは2023年以降に無料枠が大幅に縮小されており、個人の自動投稿には現状厳しい状況です。アカウントがpay-per-use(従量課金)になっているためクレジットが必要な状態で、Freeプランへの切り替えも現時点では難しい状況でした。Xへの投稿は今後の課題として保留にしました。
Step 2:Claude CodeでDIO Blog Reposterを開発
WSL(Ubuntu)でClaude Codeを起動してプラグインの開発を依頼しました。
cd ~/wp-plugin && claude
Claude Codeへの指示はこのように送りました。
WordPressプラグインを作成してください。
・WordPressの過去投稿をランダムで選別してX(Twitter)に自動投稿する
・WP-Cronで1日3回自動実行(デフォルト9時・13時・21時)
・管理画面から投稿時間・投稿回数・除外カテゴリ・APIキーを設定できる
・同じ記事が連続して投稿されないように管理
・投稿履歴を管理画面で確認できる
・nonce処理でセキュリティ対策
プラグイン名:DIO Blog Reposter
約5〜10分でプラグインが完成しました。5ファイル構成で自動生成されました。
dio-blog-reposter/
├── dio-blog-reposter.php # メイン(有効化・無効化・Cron登録)
├── includes/
│ ├── class-history.php # 履歴DB管理
│ ├── class-twitter-api.php # Twitter API v2 + OAuth 1.0a
│ └── class-scheduler.php # 投稿ロジック
└── admin/
└── class-admin.php # 管理画面UIWordPressのwp-content/plugins/にアップロードして有効化すると、管理画面に設定画面が表示されました。
Step 3:Facebook APIのセットアップ(一番苦労した)
ここが今回最も時間がかかった部分です。約2時間ハマりました。
アプリの作成と権限設定
developers.facebook.comでアプリを作成します。ユースケースは「ページのすべてを管理」を選択します。その後、以下の権限を追加します。
pages_show_list:管理しているページの一覧を取得pages_read_engagement:ページの情報を読み取りpages_manage_posts:ページへの投稿を作成・削除
ページアクセストークンの取得(ハマりポイント)
グラフAPIエクスプローラーでme/accountsを叩いてもページ一覧が空で返ってきました。
{ "data": [ ] }これはFacebookページがビジネスポートフォリオ管理下にある場合に発生します。解決策はページIDを直接指定する方法でした。
【ページID】?fields=id,name,access_token&access_token=【現在のアクセストークン】
これでページのアクセストークンが取得できます。さらにこのトークンを長期トークン(約60日)に変換します。
oauth/access_token?grant_type=fb_exchange_token&client_id=【アプリID】&client_secret=【アプリシークレット】&fb_exchange_token=【取得したトークン】
取得した長期トークンをWordPressプラグインの設定に入力してテスト投稿:
✓ 「記録しておきたい記憶vol.07_01」を Facebook に投稿しました。
Step 4:LinkedIn APIのセットアップ
所要時間は約1時間。Facebook APIよりはスムーズでしたが、2つのハマりポイントがありました。
アプリの作成
linkedin.com/developersでアプリを作成し、「Share on LinkedIn」プロダクトを追加します。さらにプロフィール取得のために「Sign In with LinkedIn using OpenID Connect」プロダクトも追加が必要でした。
アクセストークンの取得(ハマりポイント)
OAuth認証でcodeを取得後、WSLでアクセストークンに交換します。
ハマりポイント①:Client SecretのURLエンコード
Client Secretに==が含まれている場合、そのままだとinvalid_clientエラーになります。==を%3D%3DにURLエンコードする必要があります。
ハマりポイント②:openidスコープの追加
プロフィール取得にopenidスコープが必要です。OAuth認証のURLにscope=w_member_social%20profile%20openidを含めて、LinkedIn DevelopersでOpenID Connectプロダクトを追加してから再取得が必要でした。
✓ 「IOT(Internet of Things)とは」を LinkedIn に投稿しました。
Step 5:プラグインにFacebook・LinkedIn機能を追加
Claude Codeで既存プラグインにFacebook・LinkedIn投稿機能を追加しました。こちらも約15分で完成。
DIO Blog ReposterプラグインにFacebookとLinkedInへの投稿機能を追加してください。
・Facebook:Graph API v25.0、管理画面からページIDとトークンを設定できる
・LinkedIn:OAuth 2.0、管理画面からアクセストークンを設定できる
・テスト投稿ボタンも追加、nonce処理でセキュリティ対策
追加されたファイル:
includes/class-facebook-api.php # Facebook Graph API v25.0 includes/class-linkedin-api.php # LinkedIn API + OpenID Connect
投稿フォーマットも改善
タイトルだけの投稿では味気ないので、以下のフォーマットに変更しました。
【過去記事】{タイトル}
{ディスクリプション}
{URL}
※アイキャッチ画像も一緒に投稿開発にかかった時間まとめ
| 作業 | 所要時間 | 苦労度 | メモ |
|---|---|---|---|
| Claude Codeでプラグイン開発 | 約10分 | ★☆☆ | 指示を出すだけでほぼ自動 |
| X APIアカウント取得 | 約30分 | ★★☆ | UI把握に手間・クレジット問題で保留 |
| Facebook APIトークン取得 | 約2時間 | ★★★ | me/accounts空問題・期限切れ・権限不足と複数の壁 |
| LinkedIn APIトークン取得 | 約1時間 | ★★☆ | URLエンコード・openidスコープ問題 |
| FB・LI機能追加・フォーマット改善 | 約15分 | ★☆☆ | Claude Codeへの指示でほぼ自動 |
合計:約4時間。ただしClaude Codeによるコーディング自体は計30分程度で、残りの3時間以上は各SNSのAPI設定・トークン取得の試行錯誤でした。
今後の課題
- X投稿:APIクレジット問題の解決が必要
- トークン更新:FacebookとLinkedInのアクセストークンは約60日で期限切れ。Googleカレンダーにリマインダーを設定して定期的に再取得が必要
- Threadsへの対応:Meta Graph API経由で対応可能(優先度低)
まとめ
Revive Old Postsの無料版が使えなくなったことをきっかけに、Claude Codeで自作プラグインを開発しました。
コーディング自体はClaude Codeが全部やってくれます。PHPやAPIの知識がなくても、指示を出すだけで動くプラグインが完成しました。時間がかかったのは各SNSのAPI設定・トークン取得の部分で、そこはAIも手伝ってくれますが最終的には自分で操作する必要があります。
WEBディレクターやWEB担当者にとって「ほしい機能を自作する」という選択肢が現実的になってきています。有料プラグインやSaaS導入の前に、Claude Codeで自作を検討してみてはいかがでしょうか。
