onareのBlog

Google Photosから高機能セルフホスト写真管理ツール「Immich」への乗り換え

はじめに

こんにちは。皆さんは写真をどのように管理していますか?スマホで写真や動画が気軽に取れるのでついつい取りすぎてスマホのストレージが逼迫してしまうことも多々あるかと思います。スマホのストレージを増やしてもいいですが、最小容量の価格に比べどうしてもコストが高くつきますし、Google Photo は 200GB の次が 2TB で、その値段は月額 1,300 円 (2025 年 8 月 17 日時点)とそれなりにお金がかかります。

私自身 Google Photo を契約したのですが、AI による人物特定や家族共有など便利な機能が多々あり、とても気に入っているのですが契約して早々 100GB を食い潰す勢いなので最低でも 1TB は欲しいなと思っていました。

自宅サーバーを運用しているので、Google Photo の便利なところを残しつつセルフホストできる OSS を探したところ Immich を知りました。導入してしばらく使って見ていい感じだったので記事にして共有したいと思います。

Immich とは

Immichは、オープンソースで開発されているセルフホスト型の写真・動画バックアップソリューションです。開発も活発で、Google PhotosやiCloud Photosといった商用サービスに代わる高機能な選択肢となることを目指しています。

主な特徴は以下の通りです。

  • モバイルアプリ: iOSとAndroidに対応した専用アプリがあり、スマートフォンから写真や動画を自動でバックアップできます。
  • AIによる高度な検索: 機械学習を利用して、写っている人物や物体、風景などで写真を検索できます。
  • 複数ユーザー対応: 家族それぞれのアカウントを作成して、個人のライブラリを管理できます。
  • アルバムと共有: 特定の写真をまとめたアルバムを作成したり、友人や家族と安全に共有したりする機能も充実しています。
  • メタデータのサポート: Exif情報やレーティング、タグなどを保持・表示できます。
  • 地図表示: 写真が撮影された場所を地図上に表示する機能もあります。

これらの機能により、Google Photosと遜色のない、あるいはそれ以上に自分好みの写真管理環境を構築できます。プライバシーを重視し、自分のデータを完全にコントロールしたいユーザーにとって、Immichは非常に魅力的な選択肢と言えるでしょう。

Docker で Immich サーバーを構築する

それでは、実際に Immich をインストールしていきましょう。Immich のチュートリアルを参考に、Docker を使った構築方法を紹介します。Docker と Docker Compose がインストールされている環境を前提とします。

手順 1:docker-compose.yml の準備

まずは作業用のディレクトリを作成し、公式が提供しているdocker-compose.yml.envファイルをダウンロードします。

mkdir immich && cd immich
wget https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget https://github.com/immich-app/immich/releases/latest/download/example.env
mv example.env .env

手順 2:環境変数 (.env) の設定

ダウンロードした.envファイルには、Immich の設定が記述されています。最低限、以下の項目は確認・修正しておきましょう。

.env
# Uploadされたfileが保存される場所。十分な空き容量のあるディレクトリを指定する
UPLOAD_LOCATION=./library

# PostgreSQLのパスワード。大文字小文字を含む英数字のセキュアなランダム文字列に変更する。
DB_PASSWORD=postgres

手順 3:Immich の起動

設定が完了したら、いよいよ起動です。以下のコマンドを実行します。

docker-compose up -d

起動が完了したら、ブラウザで http://<サーバーのIPアドレス>:2283 にアクセスしてください。

管理者アカウントの作成画面が表示されれば、無事に起動成功です。

ラズパイでホストするときの注意点

Immich は人物の特定をするために機械学習を用いています。また動画などはトランスコードも実行されます。ラズパイは少し非力なので初期バックアップ時などたくさんのファイルがアップロードされるとパフォーマンスがかなり落ちます。
FAQにも載っていますが、これを軽減する方法がいくつかあるので紹介します。

  • ジョブの同時実行数を 1 にする
    • Immich の admin 画面にある job 設定画面(http://<serverのurl>/admin/system-settings?isOpen=job) を開いて全ての数字を 1 に変更して保存
  • 動画トランスコードのスレッド数を 1 にする
    • トランスコードの設定画面(http://<server url>/admin/system-settings?isOpen=image+video-transcoding+encoding-options)を開いて、スレッド数を 1 にする
    • 初期は 0 になっていて、最大限利用する設定になっています。
    • ハードウェアアクセラレーションは試験的にはあるようですが、ラズパイで用いられている OpenMax にはまだ未対応のようなので今のところ使えません。
  • 機械学習をリモートの高スペックマシンで動かす
    • とりあえず初期バックアップだけ乗り切るなら一時的にラズパイより高スペックの PC で機械学習を走らせるのも手です。
    • リモートマシンの設定方法はこちらに書いてあります。
    • リモートマシンの docker が立ち上がったら Immich にリモートマシンを使う設定を入れます。
    • Immich の設定画面(http://<server url>/admin/system-settings?isOpen=job+machine-learning)でリモートマシンの URL をセットして保存します。

まとめ

Immichは、Dockerを使えば比較的簡単に導入でき、AIによる自動タグ付けや人物認識、複数ユーザー対応など、商用サービスに引けを取らない豊富な機能を提供してくれます。これにより、増え続ける写真や動画の管理コストを抑えつつ、プライバシーを確保し、自分のデータを完全に手元に置いておくことが可能になります。
とはいえ自分で管理する場合はストレージの故障対策を入れないといけないので、RAIDや定期バックアップの設定も入れないといけないので手間とトータルコストを考えるとどっちもどっちな気もしています。