0
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?

ブックマークレットは案外いいぞ|X(旧Twitter)片思い一括フォロー解除ツールを作って再評価した「API非依存」の強さ

0
Posted at

正直に白状すると、私はずっとブックマークレットを軽く見ていました。「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を固定生成す...  続きを読む

0
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
0
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?