【ITニュース解説】Immich mobile app sync V2
2025年09月26日に「Hacker News」が公開したITニュース「Immich mobile app sync V2」について初心者にもわかりやすく解説しています。
ITニュース概要
写真管理アプリImmichのモバイル版で、同期機能がバージョン2に刷新された。これにより、写真や動画のクラウド連携がより安定し、効率的に行えるようになった。ユーザーは大切なメディアファイルをスムーズに管理できるようになるだろう。
ITニュース解説
Immichの新しい同期システム、Sync V2について解説する。Immichは、ユーザーが自分の写真やビデオを自分自身のサーバーにバックアップし、管理するためのオープンソースソフトウェアである。これは、Google Photosのようなサービスに代わって、個人のデータプライバシーとコントロールを重視するユーザーに選ばれている。Immichはモバイルアプリとサーバーコンポーネントで構成されており、ユーザーが撮影した写真やビデオをモバイルデバイスからサーバーへ自動的にアップロードする機能がその核となる。
これまでImmichでは、Sync V1と呼ばれる同期システムが利用されてきた。このシステムは、モバイルデバイスの特定のフォルダパスを監視し、そこに新しい写真やビデオファイルが作成されると、それらをサーバーにアップロードするという比較的単純な仕組みだった。しかし、このファイルパスベースの同期方法にはいくつかの課題があった。
まず、同じファイルが重複してアップロードされる問題が頻繁に発生した。例えば、ユーザーがデバイス上でファイルの場所を移動させたり、ファイル名を変更したり、あるいは一部を編集して保存し直したりすると、Immichはそれを新しいファイルとして認識し、既にサーバーに存在するにもかかわらず再度アップロードしてしまうことがあった。これはサーバーのストレージ容量を無駄にするだけでなく、ネットワーク帯域も余分に消費し、同期処理の効率を著しく低下させていた。
次に、デバイス側のアルバム構造がサーバーに正確に同期されないという問題があった。ImmichのSync V1は個々のファイルを扱うため、デバイスで作成したアルバムの構成をサーバーに反映させる機能が不足していた。そのため、ユーザーはサーバー側で手動でアルバムを再構成する必要があり、手間がかかっていた。
さらに、同期エラーが発生しやすいという課題もあった。ファイルパスの変更や一時的なネットワークの切断、デバイスのストレージ管理の変更など、様々な要因で同期が中断されたり、一部のファイルが正しくアップロードされないままになったりすることがあった。特に、Androidの最新バージョンで導入された「Scoped Storage(スコープストレージ)」というセキュリティ機能は、アプリがファイルシステム全体にアクセスするのを制限し、特定のアプリ専用の領域にしかアクセスできないようにするものである。この変更により、Immichのようなファイルパスベースで広範囲にファイルをスキャンするアプリは、設計の根本的な見直しを迫られることになった。Scoped Storageの導入は、Sync V1のような設計では今後のAndroidデバイスでの安定した動作が困難になることを示唆していた。
これらの問題を解決するために、Immichは全く新しい同期システムであるSync V2を開発した。Sync V2の最大の変更点は、ファイルベースの同期から「アセットベース」の同期へと移行したことである。ここでいう「アセット」とは、単なるファイルパスやファイル名で識別されるデータではなく、写真やビデオの具体的な内容そのものを指す概念である。アセットは、その内容を一意に識別するための特別な情報(ハッシュ値など)や、作成日時、ファイルサイズといったメタデータによって管理される。
Sync V2では、各写真やビデオファイルをアップロードする前に、その内容から「ハッシュ値」と呼ばれるユニークな識別子を計算する。ハッシュ値とは、ファイルの内容を基に生成される短い文字列で、少しでもファイルの内容が異なれば全く異なるハッシュ値が生成されるという特徴を持つ。これにより、Immichはデバイス上のファイルとサーバー上のファイルが全く同じ内容であるかどうかを、ファイル名やパスに依存せずに正確に判断できるようになる。
このアセットベースの考え方とハッシュ値の利用により、Sync V2の同期フローは大幅に改善された。まず、初回同期時には、モバイルデバイス内のすべての写真やビデオを「フルスキャン」する。この際、ファイルの内容からハッシュ値を計算し、作成日時、ファイルサイズ、ファイル名といった重要なメタデータと一緒にサーバーに送信する。サーバーはこれらの情報を受け取り、既に同じハッシュ値を持つアセットがデータベースに存在するかどうかを確認する。もし同じアセットが既に存在すれば、そのファイルのアップロードはスキップされ、重複アップロードが防止される。新しいアセットであれば、初めてサーバーにアップロードされる。
フルスキャンが完了した後は、「差分同期」に切り替わる。これは、デバイス上で新しく追加された写真やビデオ、あるいは既存のアセットに対して変更があった場合のみを検出し、その情報だけを効率的にサーバーに送信する仕組みである。例えば、ユーザーが写真を一枚撮影したら、Immichはすぐにその写真のハッシュ値とメタデータを計算し、サーバーに新しいアセットとして登録してアップロードする。これにより、不要なデータの転送が大幅に削減され、ネットワーク帯域とサーバーリソースの消費を抑えることができる。
Sync V2では、アセットの「追跡」も可能になった。つまり、デバイス上で写真やビデオファイルが別のフォルダに移動したり、名前が変更されたり、あるいは軽い編集が加えられたりしても、Immichはそれが元々サーバーにアップロードされていた同じアセットであることを識別できるようになった。これは、アセットを一意のIDとハッシュ値で管理することで実現される。これにより、ユーザーがデバイスでファイルを整理しても、サーバー側で重複が発生したり、同期状態が不整合になったりする心配がなくなる。
さらに、Sync V2では「アルバム同期」の機能が強化される。これにより、モバイルデバイスで作成したアルバム構造をサーバーに正確に反映させることが可能になる。また、将来的にはサーバー側でアルバムを作成し、それがモバイルデバイスに同期されるといった、より高度な連携も視野に入れられている。これは、ユーザーが自分の写真やビデオをより直感的に、そして統一された方法で管理できるようになることを意味する。
Sync V2の導入によって、Immichは数多くのメリットを享受する。最も重要なのは、同期の「信頼性」が格段に向上することである。重複アップロードの防止、効率的な差分同期、アセットの正確な追跡により、ユーザーは自分の写真やビデオが確実にサーバーにバックアップされ、かつ無駄なく管理されているという安心感を得られる。また、同期処理自体の「パフォーマンス」も向上し、よりスムーズで高速な体験が提供される。AndroidのScoped StorageのようなOSレベルの変更にも柔軟に対応できる設計となったため、将来的な互換性も確保される。
既にImmichを利用しているユーザーは、Sync V1からSync V2への移行プロセスが提供される。これは、既存のサーバーにアップロードされた写真やビデオが新しいアセットベースのデータベースに統合され、ユーザーが特別な操作をすることなく新しい同期システムの恩恵を受けられるように設計されている。この新しい同期システムは、Immichをさらに堅牢で使いやすい写真・ビデオ管理ソリューションへと進化させるための重要な一歩となる。システムエンジニアを目指す上で、このような既存システムの課題を洗い出し、根本的なアーキテクチャの変更によって解決するというアプローチは、非常に参考になる実践的な事例であると言える。新しい技術や環境の変化に対応するために、どのようにシステムを設計し直すか、その思考プロセスをImmichのSync V2の進化から学ぶことができるだろう。