サブスクのレンタルモデルからの脱却
深夜2時、Spotifyでお気に入りのアンダーグラウンド・ヒップホップ・アルバムが「お住まいの地域ではご利用いただけません」となったときのことです。ライセンス紛争や月額料金の値上げ(今や多くのサービスで11.99ドル)が、ついに私を限界まで追い込みました。NASには400GBもの高音質FLACファイルが眠っているのに、所有すらしていない圧縮音源にお金を払っていたのです。巨大なメディアスイートのような重いツールを使わずに、自分の手持ちのデータをスマホや車に飛ばす方法が必要でした。
多くの人はJellyfinを選びますが、一通の手紙を届けるためにセミトレーラーを使うような大掛かりな感覚があります。動作は重く、音楽のメタデータ処理は不安定になりがちで、インターフェースはビデオ優先です。Navidromeは違います。Go言語で書かれたこのツールは、オーディオコレクションを「おまけ」ではなく「主役」として扱います。
なぜNavidromeがホームラボの軽量級で勝るのか
このスタックに決める前に、よくある候補を検討しました。Plexは洗練されていますが、最高の音楽機能(Plexamp)はサブスクリプション制です。Jellyfinは1GB RAMのVPSでは苦戦しました。AirsonicはJavaベースであるため、ライブラリを開こうとするだけでサーバーのファンが回り始めました。Navidromeは効率性の面でまさに「スイートスポット」を突いています。
- 最小限のフットプリント: 私のインスタンスのアイドル時のメモリ使用量は約45MBです。5万曲をインデックスしている最中でも、200MBを超えることはほとんどありません。
- Subsonicエコシステム: これが秘密兵器です。Subsonic APIを実装しているため、Symfonium、Dsub、Amperfyといった数十年にわたるサードパーティ製アプリを利用できます。
- 純粋なファイルシステム・マッピング: 独自のデータベース内にファイルを埋め込むことはありません。ディスク上のフォルダを整理すれば、Navidromeはその変更をUIにそのまま反映します。
私はこのセットアップを14ヶ月間使い倒してきました。手動での再起動は一度も必要ありませんでしたし、家族3人が同時にストリーミングしてもメモリリークが発生することはありませんでした。
トレードオフ:期待すべきこと
完璧なツールなど存在しません。イメージをプルする前に、Navidromeの特定の設計思想を理解しておく必要があります。
メリット
- 爆速なUI: Reactベースのウェブインターフェースは非常に軽快です。数千人のアーティストの中から検索しても、ミリ秒単位で結果が出ます。
- リアルタイム・トランスコーディング: 5Gの接続が不安定な場合でも、FFMPEGを使用して35MBのFLACファイルをリアルタイムで2MBのOpusストリームに圧縮します。
- 真のマルチユーザー対応: 隔離されたアカウントを作成できます。パートナーの微妙な80年代ポップスへのこだわりが、あなたの「よく聴く曲」リストを台無しにすることはありません。
デメリット
- 完璧なタグ管理が必要: NavidromeはID3タグに厳格です。ライブラリが「track01.mp3」のようなファイルばかりだと、UIは混沌とした状態になります。あらかじめMusicBrainz Picardなどでライブラリを整理しておく必要があります。
- ビデオ非対応: これは音楽専用機です。コンサート映像やミュージックビデオをホストすることはできません。
アーキテクチャ:Dockerとセキュリティ
Navidromeをスタンドアロン의 バイナリとして実行するのは避けましょう。コンテナ化することで、docker compose pull 一発でアップデートが完了します。私は常にTraefikやNginx Proxy Managerのようなリバースプロキシと組み合わせています。暗号化されていないHTTP経由でSubsonic APIを公開してはいけません。
ステップ・バイ・ステップ:サーバーのデプロイ
まずはディレクトリの整理から始めましょう。設定データとメディアファイルを分けておくことで、バックアップが大幅に高速化されます。
mkdir -p ~/homelab/navidrome/data
mkdir -p ~/homelab/navidrome/music
次に、docker-compose.yml ファイルを作成します。この設定は安定性を重視し、特定のリソースパスを含んでいます。
version: "3"
services:
navidrome:
image: deluan/navidrome:latest
container_name: navidrome
user: 1000:1000 # 'id' コマンドで UID/GID を確認してください
ports:
- "4533:4533"
restart: unless-stopped
environment:
ND_MUSICFOLDER: "/music"
ND_DATAFOLDER: "/data"
ND_CACHEFOLDER: "/data/cache"
ND_LOGLEVEL: "info"
ND_SESSIONTIMEOUT: "24h"
ND_SCANINTERVAL: "1h"
ND_TRANSCODINGCACHESIZE: "500MB"
volumes:
- ./data:/data
- /path/to/your/music:/music:ro # 読み取り専用マウントでファイルを保護
次のコマンドでスタックをデプロイします:
docker compose up -d
設定とモバイルアプリのセットアップ
http://your-server-ip:4533 でダッシュボードにアクセスし、管理者アカウントを作成します。モバイルアプリを使用する場合は、ユーザープロファイル設定で「Subsonic API」が有効になっていることを確認してください。
最高の体験のために、Androidなら Symfonium、iOSなら Amperfy をお勧めします。アプリからドメイン(例:https://music.yourdomain.com)を指定し、資格情報を入力すれば、コレクション全体が数秒で同期されます。月額料金を払うことなく、Spotifyのような体験が得られます。
「Unknown Artist」問題の解決
ダッシュボードが「Unknown」フォルダだらけになっている場合は、メタデータが原因です。beets のようなCLIツールや、MusicBrainz Picard のGUIを使ってタグを修正しましょう。修正後、Navidromeで「Quick Scan」を実行します。このセットアップにより、私は商用サービスを完全に解約できました。遅延はなく、数年ぶりに、聴いている音楽を「自分のもの」として所有している実感があります。

