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?

🗑️ 【コピペで実行】YouTube登録チャンネルを自動で一括解除するスクリプト(2025年秋版)

Last updated at Posted at 2025-10-12

YouTube登録チャンネルを自動で一括解除するスクリプト(2025年秋版)

久しぶりにYouTubeの登録チャンネルを見返したら、何年も更新が止まっているチャンネルや、投稿者が方針転換して全く興味のないジャンルになっているチャンネルばかりだった経験はないでしょうか。

ホーム画面やおすすめに古い登録チャンネルの動画が表示され続けるのも煩わしいですし、チャンネル登録数が数百件を超えているとポチポチ整理するのも一苦労です。

実はChrome系ブラウザなら開発者ツールからJavaScriptを実行することで一括解除が可能です。2025年秋現在でも動作するスクリプトを作成しました。(もちろん使用は自己責任)

登録チャンネルを一括解除してフィード環境をリセットしたい方におすすめです。

💻 動作環境

このスクリプトは以下の環境で動作確認しています。

  • ブラウザ: Google Chrome、Microsoft Edge(Chromium版)
    その他のChromiumベースブラウザ(Brave、Operaなど)でも動作する可能性があります
  • OS: Windows、macOS

Firefox、Safariでは開発者ツールの仕様が異なるため、動作しない可能性があります。

🚀 実行方法

まず https://www.youtube.com/feed/channels にアクセスし、(状況に応じて[管理]をクリックする必要がある場合があります)ページを一番下までスクロールしてすべてのチャンネルを読み込みます。これを忘れると途中のチャンネルまでしか解除されません。

F12キーを押して開発者ツールを開き、Consoleタブを選択します。

初めてコンソールにコードを貼り付ける場合、セキュリティ警告が表示されます。その際は allow pasting と入力してEnterキーを押してください。これで貼り付けが可能になります。

以下のスクリプトを貼り付けてEnterキーで実行してください。

(async function() {
  console.log('=== YouTube一括チャンネル解除開始 ===');
  console.log('現在のURL:', window.location.href);
  
  if (!window.location.href.includes('youtube.com/feed/channels')) {
    console.error('⚠️ https://www.youtube.com/feed/channels で実行してください');
    return;
  }
  
  const DELAY = 1000;
  let count = 0;
  let failCount = 0;
  const MAX_FAILS = 5;
  
  function wait(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
  }
  
  function findSubscribeButton() {
    let buttons = Array.from(document.querySelectorAll('button')).filter(btn => {
      const label = btn.getAttribute('aria-label') || '';
      return label.includes('登録済み') || label.includes('Unsubscribe');
    });
    
    if (buttons.length > 0) {
      console.log(`登録済みボタンを${buttons.length}個発見`);
      return buttons[0];
    }
    
    const renderers = document.querySelectorAll('ytd-subscribe-button-renderer');
    for (let renderer of renderers) {
      const btn = renderer.querySelector('button');
      if (btn && btn.textContent.includes('登録済み')) {
        console.log('ytd-subscribe-button-renderer内でボタン発見');
        return btn;
      }
    }
    
    return null;
  }
  
  function findConfirmButton() {
    const selectors = [
      'ytd-popup-container #confirm-button button',
      'tp-yt-paper-dialog #confirm-button button',
      'yt-confirm-dialog-renderer #confirm-button button',
      '[aria-label*="登録解除"]',
      'button[aria-label*="Unsubscribe"]'
    ];
    
    for (let selector of selectors) {
      const buttons = document.querySelectorAll(selector);
      if (buttons.length > 0) {
        console.log(`確認ボタン発見: ${selector}`);
        return buttons[0];
      }
    }
    
    const allButtons = document.querySelectorAll('button');
    for (let btn of allButtons) {
      if (btn.textContent.trim() === '登録解除' || btn.textContent.trim() === 'Unsubscribe') {
        console.log('テキストで確認ボタン発見');
        return btn;
      }
    }
    
    return null;
  }
  
  console.log('チャンネル解除処理を開始します...');
  console.log('⚠️ 処理中は他の操作をしないでください');
  
  while (failCount < MAX_FAILS) {
    window.scrollTo(0, 0);
    await wait(500);
    
    const subscribeBtn = findSubscribeButton();
    
    if (!subscribeBtn) {
      failCount++;
      console.log(`❌ ボタンが見つかりません (${failCount}/${MAX_FAILS})`);
      
      if (failCount >= MAX_FAILS) {
        console.log('=== 処理完了 ===');
        console.log(`✓ 合計 ${count} チャンネルの登録を解除しました`);
        
        if (count === 0) {
          console.log('');
          console.log('⚠️ チャンネルが解除されませんでした。');
          console.log('対処法:');
          console.log('1. 正しいページにいるか確認');
          console.log('2. ページを再読み込みしてから再実行');
          console.log('3. 手動で1つ解除してからスクリプトを実行');
        }
        break;
      }
      
      await wait(DELAY);
      continue;
    }
    
    failCount = 0;
    
    console.log(`${count + 1}件目: 登録済みボタンをクリック...`);
    subscribeBtn.click();
    await wait(800);
    
    const confirmBtn = findConfirmButton();
    
    if (confirmBtn) {
      console.log('確認ボタンをクリック...');
      confirmBtn.click();
      count++;
      console.log(`✓ 解除完了: ${count}件`);
    } else {
      console.log('⚠️ 確認ダイアログが見つかりませんでした');
    }
    
    await wait(DELAY);
  }
  
  console.error('エラーが発生した場合は、ページを再読み込みして再実行してください');
})();

実行するとコンソールに進捗が表示され、順次チャンネル登録が解除されていきます。動作が確認できたら後は放置して外出するなりスマホでゲームするなど、他のことに時間を使いましょう。

順次チャンネル登録が解除されていきます

⚙️ 仕組み

スクリプトは次の処理を繰り返し実行しています。

ページ内の「登録済み」ボタンを検索して最初に見つかったボタンをクリックし、表示される確認ダイアログの「登録解除」ボタンをクリックします。1秒待機して次のチャンネルへ進みます。

ボタンが見つからなくなるか、5回連続で見つからなかった時点で処理を終了します。

YouTubeのUI変更に対応するため、複数のセレクタパターンを使ってボタンを検索するようにしています。aria-label属性、要素のテキスト、親要素からの検索など、いくつかの方法を組み合わせることで変更に強い作りにしました。

一度解除したチャンネルは元に戻せません。大切なチャンネルは事前に別途リストアップしておくことをおすすめします。

処理中はページ上で他の操作をしないでください。クリックやスクロールをすると正常に動作しなくなる可能性があります。

🔧 トラブルシューティング

ボタンが見つからないと表示される
正しいページ( https://www.youtube.com/feed/channels )で実行しているか確認してください。別のページでは動作しません。

途中で止まってしまう
ページを再読み込みしてから再度実行してみてください。何度か実行することで全チャンネルの解除が完了します。

最初から動かない
手動で1つチャンネル登録を解除してからスクリプトを実行すると動くことがあります。

YouTubeのUI変更により今後も動かなくなる可能性はありますが、その際はセレクタ部分を調整すれば対応できると思います。

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?