Mac miniを自分専用Googleフォトにする方法。Immichに移行しました

サムネイル画像

Googleフォトに課金するのをやめて、Mac miniを使って0円で写真管理をすることにしました。

今回はMac miniに写真管理ソフト「Immich(イミッチ)」をインストールして自分だけのGoogleフォトを構築していきます。

Immichとは、いわば「自分で管理するGoogleフォト」です。

自宅のサーバーにインストールして、スマホの写真のバックアップをかんたんにできたり、写真に写っているものを自動で認識して検索できたり、写真を自動で整理してくれたりする管理ソフトです。

正直Googleフォトよりも快適です。写真や動画の読み込みが圧倒的に速くなってすごく使いやすいです。

この記事では、

  • GoogleフォトからImmichに移行したきっかけ
  • Immichとはなにか
  • Mac miniへ構築する手順
  • Googleフォトから写真を移行する方法
  • 実際に使って感じたメリット

これら5点をまとめて解説します。

なぜGoogleフォトをやめる必要があったのか

クラウドの写真管理サービスはとても便利なんですが維持費がかかります。

わたしはGoogleフォトを10年以上使っていて、一番古い写真で2015年のものからありました。

当初は無料で無制限アップロードが特徴だったのに、2021年ごろからGoogleドライブの15GBの容量を消費するようになり、最終的には100GBのプランを契約せざるを得なくなっていました。(当時は年額2500円、現在はプランそのものが消滅?)

お金を払ったとはいえ、増え続ける写真と動画を全てアップロードしていたら100GBでも足りなくなる未来は目に見えています。

そこで写真管理方法を見直そうと考えて、すでに自宅で常時稼働しているMac miniを写真管理サーバーとして動かすためにImmichを導入することにしました。

Immichは「セルフホスト型Googleフォト」

Immich公式サイトより

Immichは、自分のサーバーで動かすセルフホスト型の写真・動画管理ソフトです。

自分のサーバーと聞くとむずかしそうに見えますが、いちばん簡単に用意するならPCを常に起動している状態にするだけで、サーバーとして使うことができます。

ブラウザとiPhone・Androidアプリから利用でき、タイムライン表示、アルバム、地図表示、共有、スマートフォンからの自動バックアップなどを備えています。

見た目や操作感はほとんどGoogleフォトと同じです。機能的にも人物認識や写真の検索機能など共通点が多いです。

複数人でアカウントを分けて使う機能や、機械学習によって人物認識や写真検索をかんたんにできるようにする機能もあります。

Immichは無料で利用できるオープンソースソフトウェアです。機能の概要と現在の仕様は、Immich公式ドキュメントで確認できます。

ImmichとGoogleフォトとの違い

Immichは何から何まですべて自分で用意する必要があります。必要なものは写真を保存するストレージ常時起動しているサーバー(PC)です。

項目 Googleフォト Immich
保存先 Googleのクラウド 自宅のPC/MacやNASなど
容量 契約プランに依存 用意したストレージに依存
保守管理 基本的にGoogle側 更新・障害対応・バックアップを自分で行う
外出先からの接続 最初から利用可能 VPNや安全な公開設定が必要
写真検索 クラウド側で処理 自宅サーバー上の機械学習で処理可能
複数人での利用 Googleアカウント単位 管理者が家族ごとのアカウントを作成

機能的にはGoogleフォトと同じでも、自分でサーバーとストレージを管理しなければならないので、完全に自己責任で運用する必要があります。

GoogleフォトならGoogleのクラウドサーバーに写真データを預ける形になるので、むずかしい設定は必要なく、管理する責任もGoogleに任せることができます。

自分で管理する安心か、Googleに頼る安心か、どちらをとるかはあなた次第です。

Immichを導入する前に知っておくこと

1. バックアップを自分で用意しなければならない

Immichのデータベースバックアップは通常毎日自動で生成されます。デフォルトでは14日分のバックアップが保持されます。

また、Immichのデータベースバックアップに含まれるのはメタデータやユーザー情報であり、写真・動画そのもののバックアップは取られません。なので、どうしても消えてほしくないデータは別のハードディスクやクラウドストレージなどにコピーを取る必要があります。

データベースバックアップファイルは200MB程度(全体で110GBのライブラリの場合)なので、たまにクラウドストレージにコピーを保存しています。

2. 何かあったときは自己責任

もちろんデータの管理や運用は自己責任です。

Immichは開発が活発で、アップデートによって仕様が大きく変わることがあります。

アップデート前にリリースノートを読み、バックアップを取り、必要な移行手順を確認する必要があります。

3. 外出先からのアクセスや家族への共有は別途設定が必要

自分のPC内だけで使うなら簡単ですが、外出先からのアクセスや家族に使ってもらうにはTailscale、Cloudflare Tunnel、リバースプロキシなどの設計が必要です。

わたしの環境では、Tailscaleアカウントでログインした端末なら自宅・外出先問わず利用できる状態にしています。家族への共有はしていませんが、今後構築する予定です。

4. Immichで写真を消してもスマホには残る

スマホから写真をバックアップする際に気をつけたいのが、Immich側で写真を削除してもスマホには写真が残り続ける、ということです。

例えばImmichのアプリで写真を削除しても、スマートフォン側の元写真は削除されません。

元写真が端末に残ったままなら、設定や状態によって再びバックアップ対象になる点にも注意が必要です。

Googleフォトアプリの感覚で「Immichで写真を消したらスマホの中の写真も消える」ということはできません。

バックアップと同期は別物、と理解しておく必要があります。

ImmichをMac miniに構築する

ここからはMac miniにImmichを構築する方法を解説します。

とはいえ、基本的にはImmich公式のQuick Startと同じです。

今回のサーバーとして使用するMac miniは、M4・メモリ32GB・ストレージ256GBのMac miniです。ストレージが少なすぎるので、Immichのライブラリとデータベースは外付けSSD(1TB)に保存しています。APFSというMac専用のフォーマットで運用しています。

Immich公式が推奨するインストール方法はDocker Composeです。

macOSではDocker DesktopやOrbStackなど、Docker Composeを利用できる環境を先に用意します。公式の要件では、快適なアップロード処理に6GB以上のメモリが推奨されています。

Docker自体がメモリをそこそこ食う(常時3GB程度)ので、知識のある方は他のインストール方法を試してみてください。

1. フォルダと設定ファイルを用意する

まず、Immichを運用するフォルダを作成します。ここにライブラリが構築されるので、外付けSSDの直下に immich-app というフォルダを作成します。(フォルダのパスはご自身の環境に合わせて変えてください)

mkdir ./immich-app
cd ./immich-app

続いて、ImmichのDocker Composeファイルと.envファイルをダウンロードします。

wget コマンドがインストールされていない場合は、 brew install wget であらかじめインストールしておきます。

wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

example.env というファイルは、 .env という名前に変更しておいてください。

これでImmichの構築に必要なファイルのダウンロードは完了です。

2. 設定ファイルの設定

.env を開いて設定を確認します。

# You can find documentation for all the supported env variables at https://docs.immich.app/install/environment-variables

# The location where your uploaded files are stored
UPLOAD_LOCATION=./library

# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=./postgres

# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
# TZ=Etc/UTC

# The Immich version to use. You can pin this to a specific version like "v2.1.0"
IMMICH_VERSION=v3

# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=postgres

# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

.env を置いた immich-app フォルダにそのままライブラリとデータベースを入れる場合は、 UPLOAD_LOCATION と DB_DATA_LOCATION はそのままで大丈夫です。

変更が必要なのは DB_PASSWORD です。データベースのパスワードを設定します。

DB_USERNAME と DB_DATABASE_NAME は変更してもしなくてもどちらでも大丈夫です。

もうひとつインストールした docker-compose.yml はそのまま変更せずに使用します。

3. コンテナを起動する

設定ファイルを置いたフォルダで、次のコマンドを実行します。

docker compose up -d

起動後は、Mac mini自身なら http://localhost:2283、同じネットワーク内の端末なら http://Mac-miniのIPアドレス:2283 を開きます。

最初に作成したアカウントが管理者になります。

4. セットアップ

ブラウザで開いたら、画面の通りにアカウントのセットアップをしていけば問題ありません。

途中で出てくるストレージテンプレートのセットアップだけは少しむずかしいので解説します。

設定画面のスクショなので、セットアップ時の画面とは異なる可能性があります

ストレージテンプレートとは、保存した写真を日付やカメラ名などで自動でフォルダ分けしてくれる機能です。個人的にこれがImmichを使う最大のメリットだと思います。

たとえば 年/月/日 でフォルダ分けしたい場合、 {{y}}/{{MM}}/{{dd}}/{{filename}} というようにテンプレートを記述すると、写真データに含まれる日付に合わせて自動で分類してくれます。

プリセットがたくさんあるので好きなものを選んで使うこともできます。

わたしは日付にくわえて、スマホやカメラの種類でも分類したかったので

{{y}}/{{MM}}/{{dd}}/{{model}}/{{filename}}

という分け方にしています。

.jp は.jpg が見切れているだけです

これでImmichの土台はできました。

ここまではかんたんにセットアップできるんですが、実際は写真データの移行の方が大変でした。

Googleフォトからデータを移行

今回、GoogleフォトのデータをそのままImmichへ一括投入したわけではありません。

以前からバックアップとしてHDDへ保存していた昔の写真データを土台にして、まずこちらをImmichへ手動でアップロードしました。

そのうえでGoogleフォトと見比べ、HDD側に存在しない写真だけをGoogleフォトのデータから拾い出して追加しました。少し手間はかかりますが、すでに整理済みのバックアップを生かしつつ、不足分だけを補う方法です。

正直、そんな面倒なことをせずに普通に immich-go (Googleフォトからのインポートツール)を使えばよかったと後悔しています。めちゃめちゃ面倒でした。

💡
immich-go とは

Googleフォトから全写真をまとめて移行したい場合は、JSON形式の付随情報も扱えるコミュニティ製ツール immich-go がImmich公式ドキュメントで紹介されています。

今回は使用していませんが、Googleフォトのデータだけ取り込めればOKという場合はこれがベストだと思います。

あまりおすすめはできない方法ですが、一応データ移行の手順を書いておきます。

まずはGoogleフォトから写真をダウンロードします。ブラウザ版なら右上の設定ボタンから、データのエクスポートを選択します。

バックアップを押すと、Googleデータエクスポートの画面になります。

すべての写真をエクスポートするならそのまま次のステップへ。「すべてのフォトアルバムが含まれます」を選択すると、写真の撮影年ごとにエクスポートするかどうか選べるので、わたしは個別に撮影年を選択してエクスポートしました。

アルバムすべてをエクスポートすると、撮影年のフォルダとアルバムと重複してしまうから、という理由もあります。

特に理由がなければこのまま「エクスポートを作成」を押します。ダウンロードリンク自体は数分でメールが来ましたが、保存容量によっては時間がかかるかもしれません

データが数十GBある場合はダウンロードに時間がかかります。そのため、この作業をするときは時間に余裕を持って作業しましょう。

わたしは過去のスマホで撮った写真をHDDに直接保存してあったので、本来ならGoogleフォトからダウンロードする必要はないです。

ただ、Googleフォトに入っているけどHDDには入っていない画像や、その逆パターンがあることに気づいてしまい、写真を整理するのにとても時間がかかりました。

スマホごとに違うファイル名の規則があるので、それをもとにフォルダ分けした後にImmichに取り込みます。

Immichに写真を取り込むのは、Googleフォトと同じでドラッグアンドドロップでもできますし、右上のアップロードボタンからもできます。

スマホからの自動バックアップ設定

Immichのアプリを入れて、スマホからImmichにバックアップを取ってみましょう。

スマホからMacのImmichにアクセスするには、http://Mac-miniのIPアドレス:2283 を入力します。Mac miniのIPアドレスはMacの設定アプリから、接続中のWiFiを見ると書いてあります。

外出先でもImmichにアクセスするにはTailscaleという無料のVPNサービスを使うとかんたんにできます。ここでは解説は省略します。

Immichアプリでログインできたら右上のバックアップボタンから設定をします。

iPhoneの方は、バックアップされるアルバムを必ず「最近の項目」のみに設定します。

デフォルトではすべてのアルバムが選択されますが、アルバムごとに写真がアップロードされるので重複して保存されてしまいます。最近の項目にはスクリーンショットやAirDropなども含めたすべての写真が入っているので、このアルバム1つだけバックアップできれば大丈夫です。

それから、バックアップ画面の右上の設定アイコンからモバイル通信時のバックアップ設定も確認しましょう。もし「モバイル通信を使用してバックアップを行う」にチェックがついていたらオフにすることをおすすめします。

これらの設定をした後にバックアップを有効化しましょう。

メタデータがない写真問題

時間はかかったものの、Immichに写真を保存するところまでは問題なくできました。

一番つまずいたのはこのあと、写真の撮影日時の設定です。

写真のメタデータに日時の情報が入っていなかったり、タイムゾーンが適切に設定されていなかったりすると、Immich上での表示がおかしくなってしまいます。

数年前の写真がなぜか今日の日付のところに表示されたり、タイムゾーンがないことで時系列が変わってしまったりするので、アップロードした後に日時を設定をする必要があります。

特に多かったのがスクリーンショットです。不要なスクショはすべて削除したうえで、必要なものについては撮影年だけ思い出してその年の3月31など適当な日付をImmich上で一括でつける、というように対応しました。

他にも古いスマホで撮った写真にタイムゾーンがすべてついていなくて困った話があるんですが、それはまた後日まとめます。

実際に使ってみて感じたこと

写真の読み込みが感動レベルで速い

信じられないくらい写真の読み込みが速いです。

Mac miniとSSDの性能のおかげなのか、数年前の写真をさかのぼっても、スマホに入っていない動画を開いても一瞬で表示されます。

もちろん、Immichを動かしているPCだけでなくスマホでも読み込みがめちゃめちゃ速いです。外出先からアクセスしても、電波状況が良ければサクサク動作します。

アプリのキャッシュを溜めこんでいるのかと思いきや、iOS版のImmichは200MB程度しか使っていません。どんな技術なんだ…

Googleフォトの読み込みの遅さに少しでもイラッとしたことがある方は一度体験してほしいです。ありえないほど快適です。

使い勝手はGoogleフォトと一緒

基本的にスマホ版もPC版もGoogleフォトのUIと同じです。

上の方に○年前の写真がストーリーっぽく表示されるのも同じです。

特筆することがないくらいにはUIが一緒なので、Googleフォトに慣れていた方なら違和感なく移行できると思います。

写真に位置情報をつけて保存している方なら、Googleフォトではスマホ版でしかできない地図表示がPCでもできます。

機械学習は最初時間がかかるが設定すると超便利

最初に大量に写真をインポートすると、めったにファンが回らないMac miniがほんのり熱くなってファンが回り始めます。

Immichに写真をアップロードすると、同時に写真の機械学習を行うため少しだけMacに負荷がかかります。

機械学習を行うことで、以下のことができるようになります。

  • スマート検索:写真の内容を日本語で検索
  • OCR:画像内の文字を認識
  • 顔検出・顔認識:顔が含まれる写真を分類

スマート検索はGoogleフォトにもありますが、自然言語で検索できるのでめっちゃ便利です。使い勝手が一緒というのは、そういう部分も含めて一緒ということです。

デフォルトの設定では精度がイマイチなので、設定から機械学習の設定を開いて、Clipモデルを XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k に変更すると、日本語での検索精度が高くなりました。

使用できるモデルはImmichの公式ドキュメントに記載があります。わたしはJapaneseという項目の一番上のモデルを設定しました。おそらく一番性能がいいのだと思います。

OCRもスマートサーチも、想像以上に検出精度が高いのでびっくりすると思います。

顔認識は検出精度が高すぎて、顔一覧に大量の低画質の知らない人が並んで最初ゾッとしました。検出精度は調整できるので、下の画像のように設定するとちょうどよかったです。正直、Googleフォトでもあまり使いこなせていなかったのでオフでも問題ないと思います。

重複写真を見比べて削除できる

連写した写真や同じ場所で撮った写真など、内容が重複する写真を見比べて整理する機能もあります。

重複が何枚あっても、一番ファイルサイズが大きい写真がデフォルトで「保持」が選ばれるようになっています。

ブラウザ版限定の機能になります。サイドバーのユーティリティから「重複を調査」で重複削除ができます。アプリではこの機能を見つけられませんでした。

少しUIが窮屈な印象で、拡大しない限り写真が固定されたアスペクト比に切り抜かれた状態でしか判断できないのが残念です。フル画質でなくてもいいので写真全体を表示して横に並べて比較できるようになればいいなと思いました。

まとめ

最初の環境構築とデータ移行の壁さえ乗り越えればGoogleフォト以上に快適な写真管理ができるようになります。

読み込み速度の快適さはヤミツキになるくらい感動しました。

社会人1年目の夏休みはImmichのセットアップでつぶれましたが、おかげでここ最近で一番生活が変わった気がします。

自宅で常時稼働できるPCがある方はぜひImmichを使ってみてほしいです。

最後まで読んでいただきありがとうございました。

おまけ:外出先でもアクセスできるようにする

Immichを外出先でもスマホで開けるようにするには、「Tailscale」というアプリを使います。

使い方はとても簡単で、

  1. Tailscaleアカウントを作成する
  2. MacとスマホにTailscaleアプリをインストールする
  3. 両方で同じアカウントでログインする
  4. VPN接続をオンにする
  5. Mac miniのTailscaleアプリで発行されるIPアドレス http://100.XX.XXX.XX:2283 でスマホのImmichアプリにログイン

これだけです。

TailscaleのIPアドレスはMacの右上あたりに常駐しているTailscaleを開くと This Device の横に書いてあります。

ざっくり簡単に説明すると、Tailscaleを入れた端末同士が同じネットワークに接続している状況を擬似的に作り出してくれるアプリです。VPNの仕組みを使って安全に構築できます。

アプリで接続したURLを変えるには一回サインアウトしてもう一度ログインしなおしましょう。

Mac miniをサーバーとして活用していきたい方は必須のアプリです。