はじめに:自分だけのストリーミングサービスを作ろう

Netflix、Disney+、Amazon Prime Video...最近はストリーミングサービスが本当に多くなりました。しかし、各サービスごとにコンテンツが分散しており、自分で持っている映画やドラマファイルは再生するのが不便ですよね。ホームサーバーにメディアサーバーを構築すれば、これらの問題をすべて解決できます。

メディアサーバーを構築すると、家にあるすべての動画、音楽、写真をスマートTV、スマートフォン、タブレットなどどこでも快適に楽しめます。外出先でもインターネットに接続されていれば、自分だけのNetflixのように使えるのです。この編では、メディアサーバーソフトウェアの比較からインストール、設定、外部アクセスまでのすべての過程を詳しくご案内します。

1. メディアサーバーとは何か?

1.1 メディアサーバーの概念

メディアサーバーとは、動画、音楽、写真などのメディアファイルを保存し、様々なデバイスでストリーミング再生できるようにするサーバーソフトウェアです。単にファイルを共有するのとは異なり、メディアサーバーは以下のような機能を提供します。

  • メディア情報の自動収集:映画のタイトル、あらすじ、俳優情報、ポスター画像などを自動で取得します。
  • ライブラリ整理:ジャンル、年度、監督などで自動分類し、見やすく整理します。
  • トランスコーディング:再生デバイスがサポートしていない形式のファイルもリアルタイムで変換して再生します。
  • 視聴進行の同期:どのデバイスで見ていても、別のデバイスで続きから再生できます。
  • ユーザー管理:家族それぞれにアカウントを作成し、個人向けのおすすめや視聴履歴を管理します。

1.2 メディアサーバーのメリット

メディアサーバーを運用すると、様々なメリットがあります。

  • 中央集約化:散らばっていたメディアファイルを一箇所で管理できます。
  • デバイス制限なし:スマートTV、スマートフォン、タブレット、PCなどどこからでもアクセス可能です。
  • 外部アクセス:自宅の外からでも自分のメディアライブラリにアクセスできます。
  • 共有の便利さ:家族や友人に簡単にメディアを共有できます。
  • サブスクリプション費用の節約:すでに持っているコンテンツを活用してストリーミングサービスへの依存を減らせます。

2. メディアサーバーソフトウェア比較:Plex vs Jellyfin vs Emby

メディアサーバーソフトウェアとして最もよく使われる3つを比較してみましょう。それぞれの特徴を把握して、自分に合ったものを選んでください。

2.1 Plex

Plexはメディアサーバー分野で最も歴史があり、認知度の高いソフトウェアです。

  • 長所:洗練されたUI、安定したサービス、豊富なクライアントアプリ、簡単な外部アクセス設定
  • 短所:コア機能の一部が有料(Plex Pass)、サーバーにPlexアカウント必須、閉鎖的なエコシステム
  • 料金:基本無料、Plex Pass 月額$4.99 または 永久ライセンス$119.99
  • おすすめ対象:設定に時間をかけたくない方、安定性を重視する方

2.2 Jellyfin

Jellyfinは完全無料かつオープンソースのメディアサーバーです。Embyのオープンソースフォークとして始まりました。

  • 長所:100%無料、オープンソース、アカウント強制なし、活発なコミュニティ、プラグインによる拡張性
  • 短所:PlexよりUIがやや粗い、公式クライアントアプリが少ない、初期設定が複雑な場合がある
  • 料金:完全無料
  • おすすめ対象:費用をかけたくない方、オープンソースを好む方、カスタマイズが好きな方

2.3 Emby

EmbyはPlexとJellyfinの中間に位置するメディアサーバーです。

  • 長所:きれいなUI、安定したサービス、DVRおよびライブTV機能
  • 短所:コア機能の大部分が有料(Emby Premiere)、オープンソースだったが閉鎖された
  • 料金:基本無料、Emby Premiere 月額$4.99 または 永久ライセンス$119
  • おすすめ対象:DVR/ライブTV機能が必要な方、PlexとJellyfinの間でバランスを求める方

2.4 比較表

項目 Plex Jellyfin Emby
価格 一部有料 完全無料 一部有料
オープンソース X O X
アカウント必須 O (Plexアカウント) X X
UI完成度 最高 良好 良い
クライアントアプリ 非常に豊富 普通 豊富
ハードウェアアクセラレーション O (有料) O (無料) O (有料)
コミュニティ 大規模 活発 中程度

このガイドではJellyfinを基準に説明します。完全無料でありながら機能が十分で、ハードウェアアクセラレーションによるトランスコーディングまで無料で提供されているからです。

3. Jellyfinのインストール

3.1 DockerでJellyfinをインストール(推奨)

Dockerを使うとインストールと更新が簡単です。以下はdocker-composeを使ったインストール方法です。

まずJellyfin用のディレクトリを作成します。

mkdir -p /opt/jellyfin/{config,cache}
mkdir -p /media/{movies,tvshows,music}

docker-compose.ymlファイルを作成します。

version: "3.8"
services:
  jellyfin:
    image: jellyfin/jellyfin:latest
    container_name: jellyfin
    user: 1000:1000
    network_mode: host
    volumes:
      - /opt/jellyfin/config:/config
      - /opt/jellyfin/cache:/cache
      - /media:/media:ro
    restart: unless-stopped
    environment:
      - JELLYFIN_PublishedServerUrl=http://your-server-ip:8096

コンテナを起動します。

cd /opt/jellyfin
docker-compose up -d

3.2 直接インストール(Ubuntu/Debian)

Dockerを使わない場合は直接インストールできます。

# Jellyfinリポジトリの追加
sudo apt install apt-transport-https gnupg
wget -O - https://repo.jellyfin.org/jellyfin_team.gpg.key | sudo apt-key add -
echo "deb [arch=$( dpkg --print-architecture )] https://repo.jellyfin.org/$( awk -F'=' '/^ID=/{ print $NF }' /etc/os-release ) $( awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release ) main" | sudo tee /etc/apt/sources.list.d/jellyfin.list

# インストール
sudo apt update
sudo apt install jellyfin

# サービス開始
sudo systemctl start jellyfin
sudo systemctl enable jellyfin

3.3 初期設定ウィザード

インストールが完了したら、Webブラウザでhttp://サーバーIP:8096にアクセスします。初期設定ウィザードが表示されたら、以下の手順に従います。

  1. 言語選択:日本語を選択します。
  2. 管理者アカウント作成:ユーザー名とパスワードを設定します。
  3. メディアライブラリの追加:一旦スキップして後で設定しても構いません。
  4. メタデータ言語:日本語に設定します。
  5. リモートアクセス:外部アクセスを許可するかを設定します。

4. メディアライブラリの構成

4.1 フォルダ構造の整理

メディアファイルを体系的に整理すると、Jellyfinがメタデータを正確に取得できます。推奨されるフォルダ構造は以下の通りです。

/media/
├── movies/
│   ├── パラサイト 半地下の家族 (2019)/
│   │   └── パラサイト 半地下の家族 (2019).mkv
│   ├── Inception (2010)/
│   │   └── Inception (2010).mkv
│   └── ...
├── tvshows/
│   ├── イカゲーム (2021)/
│   │   ├── Season 01/
│   │   │   ├── イカゲーム - S01E01 - だるまさんがころんだ.mkv
│   │   │   ├── イカゲーム - S01E02 - 地獄.mkv
│   │   │   └── ...
│   │   └── Season 02/
│   │       └── ...
│   └── ...
└── music/
    ├── Artist Name/
    │   ├── Album Name (Year)/
    │   │   ├── 01 - Track Name.flac
    │   │   └── ...
    │   └── ...
    └── ...

4.2 ライブラリの追加

Jellyfin管理者ページでライブラリを追加します。

  1. ダッシュボード > ライブラリ > ライブラリの追加
  2. コンテンツタイプ選択:映画、TVシリーズ、音楽から選択
  3. フォルダ追加:該当メディアが保存されているパスを入力
  4. メタデータ言語:日本語を選択
  5. 国:日本を選択

4.3 メタデータ設定

日本のコンテンツのメタデータをうまく取得するには追加設定が必要です。

  • 映画:TheMovieDBをメタデータソースとして使用します。日本語メタデータも良くサポートされています。
  • TVシリーズ:TheMovieDBまたはTheTVDBを使用します。
  • 音楽:MusicBrainzを使用します。

ライブラリ設定で「画像を取得」オプションを有効にすると、ポスターや背景画像などを自動でダウンロードします。

5. トランスコーディング設定

5.1 トランスコーディングとは?

トランスコーディングとは、再生デバイスがサポートしていないコーデックや解像度のファイルをリアルタイムで変換する機能です。例えば、HEVC(H.265)でエンコードされた4K動画を古いスマートTVで再生するには、サーバーでH.264に変換して送信する必要があります。

5.2 ハードウェアアクセラレーション設定

トランスコーディングはCPUに大きな負担がかかります。ハードウェアアクセラレーションを使うと、GPUがこの作業を代わりに行い、CPU負荷を大幅に軽減できます。

Intel Quick Sync(内蔵グラフィックス)

Intel CPUの内蔵グラフィックスを使用する場合、Dockerコンテナに以下のデバイスを追加します。

devices:
  - /dev/dri:/dev/dri

Jellyfin設定でダッシュボード > 再生 > トランスコーディングに移動し、「ハードウェアアクセラレーション」を「VAAPI」または「QSV」に設定します。

NVIDIA GPU

NVIDIA GPUを使用する場合はnvidia-dockerをインストールし、docker-composeに以下を追加します。

deploy:
  resources:
    reservations:
      devices:
        - driver: nvidia
          count: 1
          capabilities: [gpu]

Jellyfinでハードウェアアクセラレーションを「NVENC」に設定します。

5.3 トランスコーディング最適化のヒント

  • Direct Play優先:可能であればクライアントが元ファイルを直接再生するようにします。トランスコーディングなしで再生すればサーバー負荷がありません。
  • 互換性の高いフォーマットを使用:動画を保存する際にH.264 + AACの組み合わせでエンコードすると、ほとんどのデバイスでDirect Playが可能です。
  • 帯域幅設定:クライアントアプリで最大ストリーミング品質を「オリジナル」に設定すると、不要なトランスコーディングを避けられます。

6. 外部アクセス設定

6.1 ポートフォワーディング

外部からJellyfinにアクセスするには、ルーターでポートフォワーディングを設定する必要があります。

  1. ルーター管理ページにアクセス(通常192.168.0.1または192.168.1.1)
  2. ポートフォワーディングまたはバーチャルサーバー設定メニューを探す
  3. 外部ポート8096を内部サーバーIPの8096ポートに転送設定

6.2 HTTPS設定(推奨)

外部アクセス時のセキュリティのためにHTTPSを設定することをお勧めします。NginxリバースプロキシとLet's Encryptを使用する方法を推奨します。

server {
    listen 443 ssl http2;
    server_name jellyfin.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/jellyfin.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/jellyfin.yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8096;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocketサポート
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

6.3 DDNS設定

固定IPがない家庭ではDDNSを使うと便利です。無料のDDNSサービスとしてはDuckDNS、No-IP、Dynuなどがあります。

7. Bazarrで字幕を自動ダウンロード

7.1 Bazarrの紹介

Bazarrは映画やTVシリーズの字幕を自動でダウンロードしてくれるプログラムです。Jellyfinと連携すると、新しいメディアが追加されるたびに自動で字幕を探してくれます。

7.2 Bazarrのインストール

version: "3.8"
services:
  bazarr:
    image: lscr.io/linuxserver/bazarr:latest
    container_name: bazarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Tokyo
    volumes:
      - /opt/bazarr/config:/config
      - /media/movies:/movies
      - /media/tvshows:/tv
    ports:
      - 6767:6767
    restart: unless-stopped

7.3 Bazarrの設定

  1. 字幕プロバイダー設定:Settings > ProvidersでOpenSubtitles、Subsceneなどを追加します。
  2. 言語設定:Settings > Languagesで日本語を追加します。
  3. メディアサーバー連携:Settings > Sonarr/Radarrで連携するか、直接パスを指定します。

設定が完了すると、Bazarrが定期的に字幕を検索してダウンロードします。ダウンロードされた字幕は動画ファイルと同じフォルダに保存され、Jellyfinが自動で認識します。

8. クライアントアプリの設定

8.1 スマートTV

各TVメーカーのアプリストアでJellyfinアプリをインストールできます。

  • Samsung TV (Tizen):Samsung Appsで「Jellyfin」を検索してインストール
  • LG TV (webOS):LG Content Storeで「Jellyfin」をインストール
  • Android TV:Google Playストアで「Jellyfin」をインストール
  • Apple TV:App Storeで「Jellyfin」をインストール
  • Fire TV:Amazon Appstoreで「Jellyfin」をインストール

公式アプリがない場合は、WebブラウザでJellyfinサーバーのアドレスにアクセスするとWebクライアントが使えます。

8.2 モバイルアプリ

スマートフォンやタブレットでもJellyfinアプリが使えます。

  • Android:Google Playで「Jellyfin」をインストール
  • iOS:App Storeで「Jellyfin Mobile」またはサードパーティアプリ「Swiftfin」をインストール

アプリインストール後、サーバーアドレスを入力してアカウントでログインすればすぐに使えます。外部からアクセスする場合はDDNSアドレスまたはグローバルIPを入力します。

8.3 デスクトップ

  • Webブラウザ:どのOSでもWebブラウザでアクセス可能
  • Jellyfin Media Player:公式デスクトップアプリ(Windows、macOS、Linux)
  • Kodiプラグイン:Kodiを使っている場合はJellyfinプラグインをインストール

9. トラブルシューティング

9.1 よくある問題と解決方法

メタデータが間違ってマッチングされる場合

ファイル名を「映画タイトル (年).拡張子」の形式に正確に合わせてください。それでもダメな場合は、該当メディアを選択して「メタデータ識別」機能で手動マッチングします。

再生が途切れたりバッファリングがひどい場合

トランスコーディングが発生している可能性が高いです。クライアント設定で品質を「オリジナル」に設定するか、サーバーのハードウェアアクセラレーションが正常に動作しているか確認してください。

外部からアクセスできない場合

ポートフォワーディング設定を確認し、ファイアウォールで該当ポートが開いているか確認してください。ISPでポートをブロックしている場合もあるので、別のポート(例:443)を試してみてください。

まとめ

今回はホームサーバーにメディアサーバーを構築する方法を見てきました。Jellyfinは完全無料でありながら商用サービスに劣らない機能を提供するので、初めてメディアサーバーを構築する方に強くお勧めします。

メディアサーバーはホームサーバーの花とも言えます。一度構築しておけば、家族全員が快適に使え、外出先でも自分だけのストリーミングサービスを楽しめます。次の編では、Dockerを活用して様々なサービスを簡単にデプロイ・管理する方法を学びます。