この記事は、TSG Advent Calendar 2025 第3日目の記事です。
- 前提 (インフラの構成)
- 広告ブロック (AdGuard Home)
- 画像・動画ビューワ (immich)
- 分散Webアーカイブ環境 (ArchiveTeam Warrior)
- IRCクライアント (thelounge)
- 電子書籍・PDFリーダー (komga)
- Obsidian Self-hosted Live Sync
- お気に入りのイラスト / 動画類のダウンロード
数年前からVPSでいくつかソフトウェアをセルフホストしていましたが、先日引っ越して10Gインターネット環境を手に入れたことで、ネットワークの制限を気にせず自宅サーバを運用できるようになり、自宅で動かせるアプリケーションの選択肢が大きく広がりました。
自分用の記録と、時々ネットで見かける「自宅サーバって何に使うの?」的な質問への自分なりの回答を兼ねて、現在のセルフホスト環境を簡単にまとめてみます。
前提 (インフラの構成)
まあ自宅サーバと言っても今のところSynology NASでちょろっと遊んでるだけです。
よく自宅サーバの入門機として紹介されることも多いSynology NASですが、次のような欠点があります。
- CPU性能が低い
- スペックの割に高い
- 一般的なLinuxシステムと異なる箇所が多く、扱いにくい
色々な見解があるかとは思いますが、私が次回NASを更新するときはSynology製品を買うことはないでしょう。自作PCかミニPCをNASに仕立て上げた方が効率がいいです。今後ミニPC (あるいはNUC、ThinkCentreとか?) も導入して、より幅広い処理を自宅で行えるようにできたら良いですね。
外部からのアクセスはTailscaleにかなり依存しています。自分しかアクセスできないプライベートネットワーク網を簡単に構築できるのがこの上なく便利です。独自ドメインを持っているなら、DNSのAレコードにTailscale IPを登録しておくと「Tailscaleに接続しているときだけ独自ドメインにアクセスできる」という挙動を実現できます。Tailscale IPそのものは外部に晒されはしますが、認証しなければ接続できないのでセキュリティ的にも安心です。
Synology NASでTailscaleを動かす場合、追加の設定が必要です。
また、Tailscaleを介して独自ドメインでNASにアクセスする方法として、以下が参考になりました。まあ要するにSynology NASのリバースプロキシを有効にすれば良いんですが。
広告ブロック (AdGuard Home)
広告ブロック用のDNSフルサービスリゾルバを使ってます。
特にモバイル向けサイトで顕著ですが、最近のインターネット広告は本当にひどいです。広告収入が必要なことは理解できますが、ユーザの閲覧体験を大きく損なうほどの尋常ではない量の広告が挿入されるとなると話は別です。その辺を防ぐために入れてみました。
画像・動画ビューワ (immich)
よく「セルフホスト版のGoogle Photo」と紹介されるソフトです。他にも同様のソフトは色々とありますが、個人的にデザインと軽量さと開発の活発さが気に入ったのでこれにしました。
Synology NASに導入する場合は以下のリンクを見ておけば大丈夫だと思います。結構頻繁にアップデートがあり、今後設定方法が大きく変わる可能性もあるので要注意です。
便利な機能として、NAS側のディレクトリを読み込み専用の外部ストレージとしてImmichにマウントする仕組みが元から用意されています。万が一操作ミスをして、Immich側で画像ファイルを書き換えるような操作をしてしまっても、これなら安心です。
さらに、下記のユーザ拡張を使うと、外部ストレージのディレクトリ階層をImmichのアルバムとして登録できて検索しやすくなるのでおすすめです。
欠点は新興ゆえに機能がやや限られていることです。Google Photoの代替となる画像ビューアとしては問題ない使い心地ですし、リリースのたびにものすごいスピードで機能が追加されてもいます。しかし私の求めている機能「アルバム・フォルダを指定してタグ検索する」がなかなか実装される気配がないのと、タグ検索の速度にちょっともたつきがある点に不満があるので、検索専用の別ツールの導入を考えています。
分散Webアーカイブ環境 (ArchiveTeam Warrior)
以下の記事で紹介したソフトウェアを常時起動させています。
IRCクライアント (thelounge)
IRCのWebクライアントを提供するOSSです。CUIクライアントをtmuxなどで常時起動させておく手もありますが、スマホからでもブラウザで閲覧したかったのでこれを選びました。と言っても教えてくれたのはChatGPTですが。
先述したArchiveTeamは連絡手段としてIRCを使っているので、その対応としてこちらを使っています。
電子書籍・PDFリーダー (komga)
色々選択肢がありますが、自分は以下のツールを使ってます。
もともとは技術書典で買ったPDFを簡単に閲覧できる環境が欲しくて導入しました。公式サイトから自分の買ったPDFを自動でダウンロードするツールを自作した上で、そのデータをNASに格納し、保存先ディレクトリをdockerコンテナにマウントして使っています。
ひとつ問題があり、それはメモリを食いまくるということです。常に1.5~2GBくらいを占有します。同程度のツールで、もうすこしパフォーマンス的にマシなプロジェクトがあればそちらに移行したいです。
Obsidian Self-hosted Live Sync
最近流行りのObsidianを私も使い始めたのですが、複数端末間の同期を簡単におこなうためにはObsidianに金を払う必要があります。金を払わない代わりにGitHubやGoogle Driveを使って頑張る方法もあります。
私が選んだのは、Self-hosted LiveSyncというObsidianのコミュニティプラグインを使う方法です。下記のドキュメントの方法をそのままなぞれば設定できます。
作者が日本人の方なので日本語のドキュメントも用意されていますが、ここに罠があります。日本語ドキュメントはメンテナンスされておらず、情報が古いので、アテにしてはいけません。必ず英語版ドキュメントを参照するようにしてください。
お気に入りのイラスト / 動画類のダウンロード
好きだったイラストや動画がインターネットから消えてしまうという現象はよく起こります。原因は絵師や投稿者の気まぐれだったり権利者削除だったり色々ですが、ともあれコンテンツがある日突然消えてしまうのは悲しいことです。そうした悲しみを回避するため、各種プレイリストやブックマークを走査して定期的にローカルにダウンロードするようにしています。なお、私のおこなっているダウンロードは、あくまでも個人的な鑑賞の用途のみを目的としていることをお断りしておきます。
YouTubeのプレイリスト
yt-dlpで保存しています。いくつかテクニックがあるので併せて解説します。
2025年11月から、yt-dlpでYouTube動画をダウンロードするには、外部依存関係としてDeno, Bunなどの何らかのJavaScriptランタイムが要求されるようになりました。
まともなパッケージマネージャのないSynology NASにいちいち手動でDenoを入れるのも面倒だったので、ボランティアが公開しているyt-dlp用のDockerfileを使っています。Denoはもちろん、ffmpegなどの依存関係も同梱されているので安心です。
ダウンロードに失敗したURLの一覧を取得するためのTipsも使っています。
yt-dlpでは --print-to-file after_move:original_url /path/to/output.txt のようにすることで「ダウンロードに成功したURL」を出力できますが、「ダウンロードに失敗したURL」を直接出力できません。そのため「すべてのダウンロード対象URL」と「すべてのダウンロード成功URL」を取得し、両者の差集合を取るようにしています。
また、動画の保存先パスにプレイリスト名を使うことはできますが、URL出力時にプレイリスト名を指定することはできないので、余分にyt-dlpを叩いてプレイリスト名を取得させたりしています。
--write-info-json とすると {動画ファイル名}.info.json という形式のメタデータファイルが得られますが、私の用途では必要ない情報が大量に含まれていたため、--parse-metadata オプションを指定して不要なメタデータ項目を削除しています。詳しいことは公式ドキュメントに書かれています。
閲覧制限や年齢制限がかけられているYouTube動画の場合、ダウンロードのためにはアカウント認証情報を含むcookieが必要です。cookieの認証情報の無効化を防ぐため、ブラウザのシークレットウィンドウでログインした際のcookieを利用する、などのTipsがあります。
各種イラストのダウンロード
gallery-dlというコマンドラインツールを使って、pixivやDeviantArtなどのイラストを保存しています。この辺も色々なテクニックがあるのですが省きます。興味のある方はDMかDiscordあたりでお願いします。
とりあえずはこんなところでしょうか。他にもなんか便利そうなセルフホストソフトウェアがあったらぜひ教えて欲しいです。
明日の担当はshell_mugさんです。きっと素晴らしい記事を投稿してくれることでしょう。楽しみですね。