X API を使わずに「X 風お知らせ」を実現した話 ― 開発の工夫と発想転換

前回の記事 では、X(旧Twitter)の API が有料化したことで、たくさんの WordPress サイトのタイムライン埋め込みが壊れてしまった、というお話をしました。

東京労音さんのサイトもまさにその一つで、私はその解決策として「X の API を使わずに、サイト内で『X 風お知らせ』を管理する」という発想で WordPress プラグインを自作しました。

今日はその第2回として、「じゃあ実際にどうやって作ったのか?」という、開発の中身を少しだけお話してみたいと思います。

技術寄りの話になりますが、なるべく WordPress を使っているサイト運営者さんにも伝わるように書いてみますね。


目次

まず、設計の発想転換から

「X のタイムラインを表示する」と聞くと、普通は次のような手順を想像します。

  1. X からデータを取ってきて
  2. WordPress に表示する

でも、これが今や API 有料化で簡単にはできなくなった、というのが前回のお話でした。

そこで私はこう発想を変えました。

「X からデータを取らずに、サイト側にも同じ内容を最初から持っておけばいいのでは?」

つまり、X とサイトの両方に「同じ内容を別々に投稿する」ということです。これだけ聞くと「面倒では?」と思われるかもしれませんが、ここに開発のちょっとした工夫が入ってきます。


工夫①:WordPress に「Xお知らせ専用の入力欄」を作る

WordPress には「カスタム投稿タイプ」という仕組みがあります。普通の「投稿」とは別に、自分専用の投稿エリアを管理画面に追加できる機能です。

たとえば、商品サイトなら「商品」というカスタム投稿タイプ、求人サイトなら「求人」というカスタム投稿タイプを追加したり、というよくある使い方ですね。

私はこれを使って「Xお知らせ」という専用の投稿エリアを作りました。

管理画面の左メニューに「Xお知らせ」が現れ、そこから新規追加・編集・一覧表示ができるようになります。普通のブログ投稿とはまったく別のエリアなので、ブログ記事と混ざる心配もありません。


工夫②:「Xに投稿する」ボタンで二度手間を防ぐ

「サイトに書いた内容を、もう一度Xにコピペするのは面倒」

これは当然出てくる悩みです。そこで私は、編集画面に「Xに投稿する」というボタンを設置しました。

このボタンを押すと、X の投稿画面が新しいタブで開いて、本文とサイト記事の URL が自動で入力された状態になります。あとは画像を X 側にアップして「ポスト」を押すだけ。

実は、これは X が公式に提供している「ツイート画面に最初から文字を埋め込んで開く仕組み」(intent URL と言います)を使っているだけで、X の API ではありません。なので、無料で、しかも公式に許可された方法で実現できます。

https://x.com/intent/tweet?text=【本文】%0A【URL】

このような URL を開けば、X の投稿画面に文章が自動で入った状態で開く、というシンプルな仕掛けです。「API を使う」のではなく、「ブラウザの動きをうまく使う」のがポイントでした。


工夫③:URL を短くする工夫

最初に作った時、ちょっとした問題がありました。

サイトに「クリスマスコンサート」というタイトルでお知らせを投稿すると、その記事の URL がこんなふうになっていたんです。

https://example.com/x-oshirase/クリスマスコンサート/

これを X の投稿に貼り付けると、日本語の部分が長い文字列に変換されて、URL がやたら長くなってしまうんですね。

https://example.com/x-oshirase/%E3%82%AF%E3%83%AA%E3%82%B9%E3%83%9E%E3%82%B9.../

X は文字数制限がある(280文字)ので、これは結構な問題です。

そこで私は、お知らせを公開した瞬間に自動で URL を「投稿の管理番号」に置き換える仕組みを入れました。

https://example.com/x-oshirase/123/

こうすることで、X に貼り付ける URL がすっきり短くなり、本文をたくさん書く余裕が生まれます。

地味な工夫ですが、こういう「実際に使った時にだけ気づく不便」を1つずつ潰していくのが、自作プラグインの楽しいところでもあります。


工夫④:ブロックエディタとの相性問題

WordPress の新しい編集画面(ブロックエディタ)を使っていると、こんな現象に遭遇しました。

「公開ボタンを押した直後、『Xに投稿する』ボタンが灰色のまま反応しない。ページを再読込すると押せるようになる」

これは、ブロックエディタの内部仕組みで「ボタンが置かれているエリアが、公開後に自動で更新されない」ことが原因でした。

普通の開発者なら「再読込してください」と説明書に書いてしまうかもしれません。でも、東京労音さんの社員さんが使うことを考えると、それは絶対に避けたい体験です。

そこで小さな JavaScript を組み込んで、「公開した瞬間にボタンを動的に有効化する」処理を追加しました。これで再読込なしで、公開と同時に X 投稿に進めるようになりました。

「ユーザーが当たり前と感じる動き」を実現するために、裏では結構な工夫が必要になる、というのは開発あるあるです。


ギター文化館さんでも導入してみました

音楽団体Aさんでの運用がうまく回り始めた頃、私が管理している別のサイト、 音楽ホールBさんでも同じ問題を抱えていたことに気づきました。

音楽ホールBさんは、サイトでは定期的にコンサート情報やイベントの様子を発信されています。こちらも X のタイムライン埋め込みがうまく表示されなくなっていたので、同じプラグインを導入してみました。

すると、音楽ホールBさんでも問題なく稼働。サイドバーにスクロール可能なお知らせがきれいに並んで、訪問者がコンサート情報を遡って読めるようになりました。

「1つのサイトだけで動く」のと「複数のサイトで動く」のでは、確認できる範囲が全然違います。

音楽ホールBさんで導入してみたことで「あ、こういうテーマだとこう見えるんだ」「この配置だとこんな印象になるんだ」という新たな発見があり、プラグインそのものを改善するきっかけにもなりました。


まとめ:「無いなら作る」の楽しさ

「X API が高いから諦める」のではなく、

  • カスタム投稿タイプで専用の入力エリアを作る
  • intent URL で X への投稿を半自動化する
  • URL の短縮
  • ブロックエディタの癖への対応

こういった、ひとつひとつは小さな工夫を積み重ねていくことで、お金をかけずに、安定して、デザインも自由な「X 風お知らせ」を実現できました。

WordPress は「カスタム投稿タイプ」「ショートコード」「フィルターフック」など、自分仕様に拡張できる仕組みが本当に豊富です。「これがあったらいいのに」と思うものは、自分で作れることが多いんですね。

そして実際に作ってみると、自分が困っていたことは、たいてい他の人も同じように困っている、ということに気づきます。それが「他の人にも使ってもらえる形にしよう」というモチベーションにつながっていきます。


次回のお知らせ

次回(第3回)では、このプラグインを「自分専用」から「他の人にも使える形」にするために、

  • GitHub でコードを管理し始めた話
  • 「ライト/ダークモード切り替え」など機能を育てている話
  • 将来的に WordPress プラグインを販売するために何が必要か

といった、プラグインを「商品」として育てていく過程を書こうと思います。

WordPress プラグインを自作してみたい方、自分の作ったものを少し誰かに使ってもらいたい方には、参考になる内容になればと思っています。

最後まで読んでくださって、ありがとうございました 🙌


この記事は、WordPress プラグイン「SINQWELL X Notice」シリーズの第2回です。

SINQWELL では、WordPress プラグインの開発・カスタマイズ・導入代行も承っています。同じ困りごとを抱えていらっしゃるサイト運営者の方、お気軽にご相談ください。

目次