SANANEBLOG
Twitter PR

【無料利用可】X(旧Twitter)自動フォローツールの利用方法

記事内に商品プロモーションを含む場合があります

はじめに

X(旧Twitter)で大量のフォロ一を自動化させたいと考えたことはないでしょうか。

Xでは短時間で大量のフォローを行うとアカウントのロックや凍結などのおそれがあります。

そのため、時間間隔を空けながら手動で一つ一つフォローを実施する必要がありますが、時間・手間がかかる作業です。

また、既存のツールを利用するにも一日の利用制限があったり有料である場合がほとんどです。

今回は「ブックマークレット」という機能を使用してXのフォローを自動化する方法を解説します。

SANANE

ブックマークレットはブラウザ上で動作するため、PCからでもスマホからでも利用が可能です。

本ツールの利用により指定した時間間隔を空けてフォローを行うことができますが、アカウントの制限を防ぐものではございません。

一度に大量のフォローはアカウント制限の対象となる可能性がございます。本ツールの利用は自己責任とし、フォローする数には十分注意し利用ください。

本ツールは無料で提供しております。ご自由にお使いください。

ブックマークレットとは?

ブックマークレットについて

ブックマークレットとは、特定の機能を実行するために使用される小さなプログラムです。

ChromeやSafariなどのブラウザのブックマークとして保存することができますが、通常のブックマークとは異なり、ブックマークレットをクリックすると、保存されたプログラムが現在のウェブページ上で実行されます。

これにより、ユーザーは簡単にページの操作やデータの処理を行うことができます。

本ツールの利用方法

Chromeの場合

STEP1:新しいブックマークバーの作成

まず、利用しているPC上でGoogle Chromeブラウザを開き、ブックマークバーの空白の部分を右クリックし、「新しいブックマーク」または「ページを追加」をクリックします。

ブックマークバーが表示されていない場合は、画面右上の設定(三点リーダ[⋮]マーク)から「ブックマークとリスト」>「ブックマークバーを表示」を選択します。

STEP2:ブックマークの詳細を入力

次に、ブックマークの編集画面より詳細項目を入力します。

「名前」にはお好きな名前(例: 「フォロー自動化」)を入力します。

「URL」には 以下のコードをコピーしてそのまま貼り付けてください。

javascript:(function(){  function createProgressContainer() {    var progressDiv = document.createElement('div');    progressDiv.id = 'progressContainer';    progressDiv.style.position = 'fixed';    progressDiv.style.bottom = '20px';    progressDiv.style.right = '20px';    progressDiv.style.backgroundColor = 'rgba(0,0,0,0.7)';    progressDiv.style.color = 'white';    progressDiv.style.padding = '10px 15px';    progressDiv.style.borderRadius = '8px';    progressDiv.style.fontSize = '14px';    progressDiv.style.zIndex = '9999';    progressDiv.innerText = '準備中...';    document.body.appendChild(progressDiv);    return progressDiv;  }  function updateProgress(progressDiv, currentCount, totalCount, message) {    progressDiv.innerText = '実行状況: ' + currentCount + ' / ' + totalCount + '\n' + message;  }  function k(repeatCount, waitTime) {    var progressDiv = createProgressContainer();    var count = 0;    function d(){      try {        var buttons = document.querySelectorAll("button[aria-label]");        var found = false;        for (var i = 0; i < buttons.length; i++){          var label = buttons[i].getAttribute("aria-label");          if(label && label.startsWith("フォロー")){            if(label.startsWith("フォロー中")){              console.log("'フォロー中'ボタンをスキップしました");            } else {              var btn = buttons[i];              btn.scrollIntoView();              btn.click();              console.log("'フォロー'ボタンをクリックしました");              setTimeout(function(){                if(btn.getAttribute("aria-label") && !btn.getAttribute("aria-label").startsWith("フォロー中")){                  btn.setAttribute("aria-label", "フォロー中");                  console.log("属性が変わらなかったため、強制的に'フォロー中'に更新しました");                }              }, 500);              found = true;              count++;              break;            }          }        }        if(found && count < repeatCount){          var remaining = Math.floor(waitTime/1000);          var intervalId = setInterval(function(){            updateProgress(progressDiv, count, repeatCount, '次の操作まで: ' + remaining + '秒');            remaining--;            if(remaining < 0){              clearInterval(intervalId);              d();            }          }, 1000);        }        else if(count >= repeatCount){          updateProgress(progressDiv, count, repeatCount, "完了");          alert("処理が完了しました。");        }        else {          updateProgress(progressDiv, count, repeatCount, "ターゲットなし: 完了");          alert("すべてのフォローボタンを処理しました。");        }      }      catch(error){        console.error("エラーが発生しました:", error);        alert("エラーが発生しました。");      }    }    d();  }  (function(initCallback){    var c = document.createElement("div");    c.innerHTML = '\n        <div id="customDialog" style="position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: #f9f9f9; padding: 20px; border-radius: 10px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); width: 300px; z-index: 9999; font-family: Arial, sans-serif;">\n            <h3 style="text-align: center; color: #333;">設定オプション</h3>\n            <div style="margin-bottom: 15px;">\n                <label style="color: #555;">繰り返し回数を入力:</label>\n                <input type="number" id="repeatCount" value="5" style="width: 100%; padding: 8px; margin-top: 5px; border: 1px solid #ccc; border-radius: 5px; box-sizing: border-box;" />\n            </div>\n            <div style="margin-bottom: 20px;">\n                <label style="color: #555;">待機時間を秒単位で入力:</label>\n                <input type="number" id="waitTimeInSeconds" value="5" style="width: 100%; padding: 8px; margin-top: 5px; border: 1px solid #ccc; border-radius: 5px; box-sizing: border-box;" />\n            </div>\n            <button id="confirmButton" style="width: 100%; padding: 10px; background-color: #007BFF; color: white; border: none; border-radius: 5px; cursor: pointer; font-size: 16px; margin-bottom: 10px;">\n                開始\n            </button>\n            <button id="closeButton" style="width: 100%; padding: 10px; background-color: #6c757d; color: white; border: none; border-radius: 5px; cursor: pointer; font-size: 16px;">\n                閉じる\n            </button>\n        </div>';    document.body.appendChild(c);    document.getElementById("confirmButton").addEventListener("click", function(){      var repeat = parseInt(document.getElementById("repeatCount").value, 10),          waitSec = parseInt(document.getElementById("waitTimeInSeconds").value, 10);      if(isNaN(repeat) || isNaN(waitSec) || repeat <= 0 || waitSec <= 0){        alert("正しい数値を入力してください。");      }      else{        waitSec *= 1000;        document.body.removeChild(c);        initCallback({repeatCount: repeat, waitTime: waitSec});      }    });    document.getElementById("closeButton").addEventListener("click", function(){      document.body.removeChild(c);    });  })(function(b){    k(b.repeatCount, b.waitTime);  });})();

入力後は任意のブックマークの場所を指定して「保存」をクリックします。

作成が完了するとブックマークバーに作成したブックマークレットが表示されます。

Safariでの場合

Safariではブックマークを新規で作成することができないため、下記の方法でブックマークレットを作成します。

  1. 適当なページ(yahooなど)にアクセス
  2. ツールバーから「ブックマークの追加」をクリックします。
  3. ブックマークを追加する場所を選択し、必要に応じて名前を変更します。
  4. [保存]をクリック
  5. ツールバーから保存したブックマークレットを探し、アイコンを長押しして[編集]をクリック
  6. URLに下記コードをコピーして保存する
javascript:(function(){  function createProgressContainer() {    var progressDiv = document.createElement('div');    progressDiv.id = 'progressContainer';    progressDiv.style.position = 'fixed';    progressDiv.style.bottom = '20px';    progressDiv.style.right = '20px';    progressDiv.style.backgroundColor = 'rgba(0,0,0,0.7)';    progressDiv.style.color = 'white';    progressDiv.style.padding = '10px 15px';    progressDiv.style.borderRadius = '8px';    progressDiv.style.fontSize = '14px';    progressDiv.style.zIndex = '9999';    progressDiv.innerText = '準備中...';    document.body.appendChild(progressDiv);    return progressDiv;  }  function updateProgress(progressDiv, currentCount, totalCount, message) {    progressDiv.innerText = '実行状況: ' + currentCount + ' / ' + totalCount + '\n' + message;  }  function k(repeatCount, waitTime) {    var progressDiv = createProgressContainer();    var count = 0;    function d(){      try {        var buttons = document.querySelectorAll("button[aria-label]");        var found = false;        for (var i = 0; i < buttons.length; i++){          var label = buttons[i].getAttribute("aria-label");          if(label && label.startsWith("フォロー")){            if(label.startsWith("フォロー中")){              console.log("'フォロー中'ボタンをスキップしました");            } else {              var btn = buttons[i];              btn.scrollIntoView();              btn.click();              console.log("'フォロー'ボタンをクリックしました");              setTimeout(function(){                if(btn.getAttribute("aria-label") && !btn.getAttribute("aria-label").startsWith("フォロー中")){                  btn.setAttribute("aria-label", "フォロー中");                  console.log("属性が変わらなかったため、強制的に'フォロー中'に更新しました");                }              }, 500);              found = true;              count++;              break;            }          }        }        if(found && count < repeatCount){          var remaining = Math.floor(waitTime/1000);          var intervalId = setInterval(function(){            updateProgress(progressDiv, count, repeatCount, '次の操作まで: ' + remaining + '秒');            remaining--;            if(remaining < 0){              clearInterval(intervalId);              d();            }          }, 1000);        }        else if(count >= repeatCount){          updateProgress(progressDiv, count, repeatCount, "完了");          alert("処理が完了しました。");        }        else {          updateProgress(progressDiv, count, repeatCount, "ターゲットなし: 完了");          alert("すべてのフォローボタンを処理しました。");        }      }      catch(error){        console.error("エラーが発生しました:", error);        alert("エラーが発生しました。");      }    }    d();  }  (function(initCallback){    var c = document.createElement("div");    c.innerHTML = '\n        <div id="customDialog" style="position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: #f9f9f9; padding: 20px; border-radius: 10px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); width: 300px; z-index: 9999; font-family: Arial, sans-serif;">\n            <h3 style="text-align: center; color: #333;">設定オプション</h3>\n            <div style="margin-bottom: 15px;">\n                <label style="color: #555;">繰り返し回数を入力:</label>\n                <input type="number" id="repeatCount" value="5" style="width: 100%; padding: 8px; margin-top: 5px; border: 1px solid #ccc; border-radius: 5px; box-sizing: border-box;" />\n            </div>\n            <div style="margin-bottom: 20px;">\n                <label style="color: #555;">待機時間を秒単位で入力:</label>\n                <input type="number" id="waitTimeInSeconds" value="5" style="width: 100%; padding: 8px; margin-top: 5px; border: 1px solid #ccc; border-radius: 5px; box-sizing: border-box;" />\n            </div>\n            <button id="confirmButton" style="width: 100%; padding: 10px; background-color: #007BFF; color: white; border: none; border-radius: 5px; cursor: pointer; font-size: 16px; margin-bottom: 10px;">\n                開始\n            </button>\n            <button id="closeButton" style="width: 100%; padding: 10px; background-color: #6c757d; color: white; border: none; border-radius: 5px; cursor: pointer; font-size: 16px;">\n                閉じる\n            </button>\n        </div>';    document.body.appendChild(c);    document.getElementById("confirmButton").addEventListener("click", function(){      var repeat = parseInt(document.getElementById("repeatCount").value, 10),          waitSec = parseInt(document.getElementById("waitTimeInSeconds").value, 10);      if(isNaN(repeat) || isNaN(waitSec) || repeat <= 0 || waitSec <= 0){        alert("正しい数値を入力してください。");      }      else{        waitSec *= 1000;        document.body.removeChild(c);        initCallback({repeatCount: repeat, waitTime: waitSec});      }    });    document.getElementById("closeButton").addEventListener("click", function(){      document.body.removeChild(c);    });  })(function(b){    k(b.repeatCount, b.waitTime);  });})();

ブックマークレットの実行方法

次にX(https://x.com)の[検索]>[アカウント]などのアカウント一覧画面で

X(旧Twitter)上の言語は日本語を選択してください。

英語表示の場合は、ホーム画面から、[More]>[Setting and Privacy]>[Accessibility, display and languages]>[Languages]から変更が可能です。

フォロー画面へ移動したら、作成したブックマークレットをクリックします。

クリックすると下記のような画面が表示されます。

各設定項目を入力して[開始]をクリックすると処理が開始します。

Screenshot

[繰り返し回数]はフォローする人数を入力してください。実行すると上位から順次フォローを行います。

[待機時間]はフォローを解除する時間間隔を入力してください。一時的に大量のフォローを行うとアカウントが制限されるおそれがあります。

実行すると、フォロー解除画面が表示され、待機時間ごとにフォローを解除し、画面をスクロールしていきます。

途中停止したい場合にはブラウザの更新を行ってください。

利用時の注意事項

Xのアプリでは実行不可

本機能はSafariやChromeなど、ブラウザのブックマークレット機能を使用しているため、iOS/Android等のアプリからは実行ができません

必ずsafariやChromeのブラウザ上からXを検索、アクセスの上実行してください。

本ツールはPC版Chrome、iPhoneのSafariで動作を確認済みとなります。

Xの仕様変更による影響

X(旧Twitter)は定期的にインターフェースや機能の変更を行います。

このため、ブックマークレットが依存している要素や属性(例:ボタンのaria-label)が変更されることがあります。

仕様変更によって、ブックマークレットが正しく動作しなくなる可能性があります。

(※2025年3月時点で動作確認済みです。)

アカウントの利用制限:

フォローを短時間で大量に実施する際、アカウントが制限される可能性があります。

実行の際には十分な時間間隔を空け、段階的に実施するようにしてください。

本ツールにおけるあらゆる損害について、一切の責任を負いかねますのでご了承ください。

ページの読み込み状態:

ブックマークレットを停止する際にはブラウザの更新を行ってください。ブラウザを閉じたり、PCがスリープモードに入ると動作が止まる可能性があります。

カスタマイズについて

本ツールに更に機能を追加した場合や、別のツールの作成依頼はココナラというサービスにて承っております。

依頼方法

STEP1:ココナラに会員登録

初めてココナラを登録する方は下記をクリックしてココナラにアクセスし、右上の[会員登録]から会員登録を実施してください。

STEP2:見積・仕事の依頼をする

会員登録が完了したら下記リンクにアクセスし、画面右側の[見積り・仕事の相談をする]からご相談ください。

SANANE

相談は無料ですのでまずはお気軽にご相談ください!