正直に白状すると、私はずっとブックマークレットを軽く見ていました。「javascript: から始まる古い書き方」「モダンじゃない」——そんなイメージで、選択肢から外していたんです。

ところが最近、その認識がすっかり変わりました。きっかけは、X(旧Twitter)で「片思い」を一括フォロー解除するツールを作ったこと。そしてもうひとつ、ブログの商品リンクを API依存から「手入力+ブックマークレット」に切り替えたことです。

この記事は、その2つの実体験を通して「ブックマークレット、案外いいぞ」と再評価した記録です。ニッチな話ですが、同じように APIの仕様変更に振り回されている人 には刺さるはず。まさに「誰得?」なテーマですが、少なくとも私は得しました。


    作ったもの:X片思い一括フォロー解除ブックマークレット作成ツール

    まず成果物から。Xのアカウント名を入力すると、片思い(自分はフォローしているが相手にフォローされていないアカウント)を一括解除するブックマークレットを生成するツールを作りました。

    X(旧Twitter)で片思いを一括フォロー解除するブックマークレット作成ツール X(旧Twitter)で、片思い(自分がフォローしているが相手にフォローされていないアカウント)を一括でフォロー解除するブックマークレットを生成。API不要・ブラウザだけで動作します。Xのアカウント名を入力してブックマークバーに登録するだけ。  続きを読む

    使い方はシンプルです。

    1. 自分のXアカウント名を入力
    2. 生成された「🩷 片思い削除」ボタンをブックマークバーにドラッグして登録
    3. Xのフォロー中ページを開いて、ブックマークを1回クリック
    4. 確認ダイアログで「OK」→ 片思いを順に自動解除

    なぜ作ったのか:API有料化で「片思い削除ツール」が全滅した

    昔は「片思い削除ツール」のようなWebサービスがいくつもありました。ところが今、検索しても古くて動かないツールしか出てきません

    理由は明白で、Twitter/X の API が有料化・仕様変更されたからです。これらのツールは API 経由でフォロー関係を取得・操作していたので、APIが閉じられた瞬間に軒並み動かなくなりました。

    「じゃあ、APIを使わずに実現するには?」——その答えが、ブラウザ上でXの画面を直接操作するブックマークレットでした。APIを一切使わず、画面をスクロールして「フォロー中」ボタンを機械的にクリックしていく。原始的ですが、APIの都合に一切左右されません


    仕組み:APIを使わず「画面を操作する」

    ブックマークレットの中核は、たったこれだけの発想です。

    • Xのフォロー中ページで、「フォロー中」ボタンを XPath で探す
    • 見つけたら クリック → 出てきた「フォロー解除」確認を クリック
    • 見つからなければ 少しスクロール して、また探す
    • 最後までスクロールしたら完了

    コードの要点を、読みやすい形で抜き出すとこんな感じです(実際に生成されるのは1行に圧縮したもの)。

    function loop(prevScroll) {
      const html = document.querySelector("html");
      // 「フォロー中」かつ「フォローされています」でない要素を探す
      const node = getByXPath(TARGET_XPATH);
    
      if (node) {
        node.scrollIntoView({ behavior: "smooth", block: "center" });
        node.click();                       // フォロー解除を実行
        setTimeout(() => {
          clickConfirmButton();             // 確認ダイアログの「フォロー解除」を押す
          setTimeout(() => loop(0), 500);   // 次を探す
        }, 500);
      } else {
        html.scrollBy({ top: 0.8 * window.innerHeight, behavior: "smooth" });
        if (prevScroll !== html.scrollTop) {
          setTimeout(loop, 400, html.scrollTop);  // まだスクロールできる→続行
        } else {
          alert("フォロー解除が完了しました");     // 最下部→終了
        }
      }
    }

    「フォローされています」の表示があるアカウント(相互フォロー)は対象から除外しているので、外れるのは片思いだけ。ツール側では、この中のアカウント名の箇所だけを入力値で差し替えてブックマークレットを生成しています。


    ハマったポイント:ブックマークレットは「ページ遷移で死ぬ」

    作る過程で、ブックマークレットの本質的な制約に2つぶつかりました。ここが今回いちばんの学びです。

    1. 別ページからの「全自動1クリック」はできない

    最初は「どのページからクリックしても、自動でXのフォロー中ページに移動して、そのまま解除まで走る」を目指しました。ところがこれは原理的に不可能でした。

    ブックマークレットは、クリックした瞬間のそのページ上でだけ動くコードです。location.href でXへ移動した瞬間、ページごとコードが消滅し、移動先に自分を注入し直すことはできません。だから「移動」と「解除」で2クリック必要になります。

    そこで割り切って、動線を整理しました。

    • フォロー中ページで押す → 確認 → 1クリックで解除開始(これを主動線に)
    • 別ページで押す → 確認して自動移動 → ダイアログに「移動後もう一度押してください」と明記

    「押したのに何も起きない?」という迷いをなくすのがポイントです。

    2. 削除前の確認を入れる

    一括解除は取り消せません。誤爆すると相互以外が全部外れてしまう。なので、解除を始める直前に必ず confirm() を挟み、OKを押さない限り何も起きないようにしました。地味ですが、破壊的な操作には必須のガードです。


    本題:ブックマークレット、案外いいぞ

    ここからが、この記事で一番言いたいことです。実際に使ってみて、ブックマークレットの強みを見直しました

    API非依存 ── これが最大の武器

    今回の片思い削除ツールがまさにそうですが、APIの有料化・仕様変更・レート制限の影響を受けません。画面を直接操作するので、公式APIがどうなろうと動きます。

    実はつい最近、ブログの商品リンクでも同じ乗り換えをしました。以前は API 連携で商品情報を取得していた [amazon] [rakuten] [yshopping] の3ショートコードを、「手入力+ブックマークレット」方式に統一したんです。商品ページでブックマークレットを押すと、ASINやタイトルを拾ってショートコードを組み立ててくれる。APIキーの管理も、仕様変更への追従も不要になりました。

    Rinkerが重い・面倒な人へ|商品リンクをショートコード+ブックマークレットで爆速で貼る方法 WordPressの定番プラグイン「Rinker」が面倒だと感じる人向けに、商品リンクをショートコードとブックマークレットで爆速で貼る方法を解説。Amazon・楽天・Yahoo!ショッピングの3ショップに対応し、APIを使わず保存時にHTMLを固定生成す...  続きを読む

    サーバー不要 ── 壊れる要素が少ない

    ブックマークレットはフロントだけで完結します。バックエンドもホスティングも要りません。

    これは地味に大きくて、サーバーサイドの仕組みは「動かす環境」自体がトラブルの温床になります(私も別件で、共用サーバー上のAPIが落ちて半日復旧に費やしたばかりです)。ブックマークレットには、そもそも落ちるサーバーがありません。構成要素が少ない=壊れる箇所が少ない、というシンプルな強さです。

    速い・ゼロインストール

    登録はブックマークバーにドラッグするだけ。インストール不要、審査不要、即実行。Chrome拡張のようにストア掲載やレビュー対応をする必要もありません。動作も、余計なレイヤーがないぶん軽快です。

    透明性が高い

    中身のコードがすべて見えるのも安心材料です。javascript: 以降を読めば、そのブックマークレットが何をするか誰でも確認できる。ブラックボックスなツールより、むしろ信頼できます。


    正直に:弱点もある

    いいことばかり書きましたが、弱点も明記しておきます。

    画面(DOM)の構造変更に弱い ── これが唯一にして最大の弱点です。今回の片思い削除ブックマークレットは、「フォロー中」「フォロー解除」「フォローされています」という日本語UIの文言や、Xのボタン構造に依存しています。X側がUIを変えれば、動かなくなります。

    とはいえ、これは「壊れたら中身を少し直せばいい」レベルの話。サーバーが落ちる・APIが有料化するといった、こちらでコントロールできない事態に比べれば、はるかに扱いやすいリスクです。


    まとめ

    ブックマークレットは、派手さはありません。javascript: から始まる見た目も、正直モダンとは言い難い。でも、

    • API非依存で、仕様変更に振り回されない
    • サーバー不要で、壊れる要素が少ない
    • 速くて、インストール不要
    • 中身が透明

    という「枯れているぶん確実」な強さがあります。今回、片思い削除ツールと商品リンクの2つで実感しました。

    「誰得?」な話に付き合ってくれてありがとうございました。派手な新技術も楽しいですが、こういう古くて確実な道具を引き出しに一つ持っておくと、いざという時に効きます。よかったら、片思い削除ツールも試してみてください。


    関連記事

    X(旧Twitter)で片思いを一括フォロー解除するブックマークレット作成ツール X(旧Twitter)で、片思い(自分がフォローしているが相手にフォローされていないアカウント)を一括でフォロー解除するブックマークレットを生成。API不要・ブラウザだけで動作します。Xのアカウント名を入力してブックマークバーに登録するだけ。  続きを読む Rinkerが重い・面倒な人へ|商品リンクをショートコード+ブックマークレットで爆速で貼る方法 WordPressの定番プラグイン「Rinker」が面倒だと感じる人向けに、商品リンクをショートコードとブックマークレットで爆速で貼る方法を解説。Amazon・楽天・Yahoo!ショッピングの3ショップに対応し、APIを使わず保存時にHTMLを固定生成す...  続きを読む