広告を排除:InvidiousとDockerでプライベートなYouTubeフロントエンドをセルフホストする

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

YouTubeのプライバシー問題とパフォーマンスの肥大化

YouTubeは諸刃の剣です。比類のないコンテンツライブラリを誇る一方で、実際のユーザー体験は、スキップ不可の広告や強引なデータ収集による悪夢と化しています。

YouTubeのタブを1つ開くだけで簡単に1GBのRAMを占有することがあり、その多くはバックグラウンドのトラッカーや重いスクリプトの実行に費やされています。HomeLab愛好家にとっては、情報漏洩を阻止するための対策を講じるのと同様に、帯域幅の隠れたコストも無視できません。ネットワーク上のデバイスが動画を読み込むたびに、最初のフレームが再生される前に約15〜20MBのテレメトリデータとJavaScriptがダウンロードされます。

Pi-holeやAdGuard HomeのようなDNSレベルのブロッカーは、ここでは苦戦することが多いです。Googleは動画コンテンツと同じドメインから広告を配信しているため、広告をブロックすると動画自体が再生できなくなることがよくあります。そのため、別のアプローチが必要です。プライベートなフロントエンドはプロキシとして機能し、余計な負荷を削ぎ落として、本当に見たいコンテンツだけを配信します。

基本コンセプト:Invidiousとは何か?

Invidiousは、軽量でプライバシーに特化したYouTubeの「スキン」と考えてください。これはオープンソースの代替手段であり、Googleアカウントなし、広告なし、そして侵入的なトラッキングクッキーなしで動画を閲覧・視聴できるようにします。厳しいクォータ制限や開発者キーが必須である公式のYouTube APIは使用せず、サイトを安全にスクレイピングし、内部APIを使用してデータを取得します。

なぜわざわざセルフホストするのでしょうか?具体的なメリットは以下の通りです:

  • 広告ゼロ: ミッドロール広告、バナー、そして「スポンサー」による煩わしさが一切ありません。
  • IPマスキング: GoogleにはサーバーのIPアドレスしか見えません。あなたの個人デバイスは彼らの追跡アルゴリズムから隠されたままになります。
  • 圧倒的な効率性: 標準的なInvidiousのページは、YouTubeの同等ページよりも約90%軽量です。これは古いハードウェアやデータ制限のあるプランにとって画期的です。
  • 音声のみモード: ポッドキャストや音楽セットを聴くだけの場合、帯域幅を最大80%節約できます。
  • ローカル登録チャンネル: Googleアカウントにログインすることなく、500人以上のクリエイターをフォローできます。すべてはローカルのデータベースに保存されます。

私は半年前にこの環境に切り替えました。ネットワークトラフィックは大幅に静かになり、パーソナライズされたおすすめによる心理的な摩擦もなくなりました。

実践:DockerによるInvidiousのデプロイ

これはほぼどんな環境でも動作します。4GBのRAMを搭載したRaspberry Pi 4があれば、家庭内ユーザーを処理するには十分すぎるほどです。

1. 環境の準備

まず、プロジェクト専用のディレクトリを作成します。設定ファイルを一箇所にまとめておくことで、後のバックアップが非常に簡単になります。

mkdir ~/invidious
cd ~/invidious
mkdir config

2. セキュアなHMACキーの生成

Invidiousはセッショントークンの署名にHMACキーを使用します。インスタンスのセキュリティを確保するために、長いランダムな文字列が必要です。次のコマンドを実行し、出力を設定ファイル用に保存してください:

openssl rand -base64 30

3. Docker Composeファイルの作成

2つのコンテナをデプロイします。1つはInvidiousアプリケーションを処理し、もう1つは設定や登録チャンネルを管理するためのPostgreSQLデータベースを実行します。効率的な運用のためにDocker Composeマネージャーを活用し、以下の内容で docker-compose.yml ファイルを作成します:

services:
  db:
    image: postgres:14-alpine
    volumes:
      - ./postgresdata:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=invidious
      - POSTGRES_USER=kemal
      - POSTGRES_PASSWORD=kemal
    healthcheck:
      # データベースの準備ができているか確認
      test: ["CMD-SHELL", "pg_isready -U kemal -d invidious"]
      interval: 2s
      timeout: 5s
      retries: 10

  invidious:
    image: quay.io/invidious/invidious:latest
    volumes:
      - ./config/config.yml:/iv/config/config.yml:ro
    ports:
      - "8080:3000"
    depends_on:
      db:
        condition: service_healthy
    restart: always

4. インスタンスの設定

~/invidious/config/config.yml ファイルを作成します。ここでアプリの動作を定義します。指示された場所にHMACキーを貼り付けてください。

db:
  user: kemal
  password: kemal
  host: db
  port: 5432
  dbname: invidious

check_tables: true
hmac_key: "ここに生成したHMACキーを入力"

port: 3000
https_only: false
default_user_static_instance_config: true

# サーバーにビデオストリームのプロキシを強制し、IPを隠蔽する設定
proxy_video: true

プライバシー保護のためには、proxy_video: true を有効にすることが不可欠です。これがないと、ブラウザは依然としてGoogle의動画サーバー(googlevideo.com)に直接接続してストリームを取得してしまいます。

5. サービスの起動

コンテナをバックグラウンドで起動します。Dockerは自動的にイメージをプルし、データベースを初期化します。

docker compose up -d

データベースの初期マイグレーションが完了するまで30秒ほど待ちます。ログを追跡することで進捗を確認できます:

docker compose logs -f invidious

6. インターフェースへのアクセス

ブラウザで http://[サーバーのIPアドレス]:8080 にアクセスしてください。ミニマルな検索バーが表示されます。4K動画を検索してみてください。ページが多数のサードパーティ広告ネットワークの応答を待つ必要がないため、ほぼ瞬時に読み込まれることに気づくはずです。

ローカルネットワーク向けの最適化

起動して動作を確認したら、「設定(Settings)」メニューへ移動しましょう。デフォルトの画質を1080pに設定することをお勧めします。インターネット接続が遅い場合は、バッファリングを防ぐためにプレイヤーにDash(アダプティブ)ストリームの使用を強制することもできます。

モバイルユーザーは重いアプリを必要としません。ChromeやSafariでインスタンスのURLを開き、「ホーム画面に追加」するだけです。自分専用のポッドキャスト・プラットフォームを構築する際と同様に、プログレッシブウェブアプリ(PWA)として動作し、公式のYouTubeアプリのようなバッテリー消費を抑えつつ、フルスクリーンで広告なしのモバイル体験を提供します。

現在の登録チャンネルを失う心配もありません。Google Takeoutにアクセスし、YouTubeのデータをCSVとしてエクスポートして、Invidiousにアップロードしてください。数秒で、トラッキングなしのフィードが元通りになります。

まとめ

プライベートなフロントエンドをセルフホストすることは、HomeLabで得られる最も実用的な成果の一つです。毎日のデジタルライフを即座にアップグレードしてくれます。視聴環境をInvidiousに移行することで、プライバシーを取り戻し、システムリソースを大幅に節約できます。ローカル環境での設定に慣れたら、Nginx Proxy Managerのようなリバースプロキシの追加を検討してみてください。これにより、SSL証明書を追加して、世界中のどこからでも自分専用のYouTubeにアクセスできるようになります。

Share: