この記事はえとねるん Advent Calendar 2025 4日目および、OpenStreetMap Advent Calendar 2025 4日目およびFediverse (3) Advent Calendar 2025 4日目の記事です1


自分は幼いころから物をためる癖がある。 例えば学校の所謂検定教科書は小学校から高校まですべてとっているし、ショッピングセンターなどのフロアガイドやホテルの歯ブラシをよく集めていた。 最近になって、スマフォやPCや大容量(> 100GB)の記録媒体を手に入れたことによって、かなり高品質な写真を撮ったりそれらを保存することが簡単にできるようになった。 このため、「写真を撮って損はない」という意識が生まれ、最近は(特に一人で旅をしているときは)かなりたくさんの写真を撮っている。

また、スマフォにはGPSが搭載されており、これを使うことで2位置情報を継続的に記録できるようにもなった。 写真にも位置情報を保存できるが、これらを組み合わせると写真を撮ってない間の行動も復元できるようになる。 そして写真と違ってこれは自動化することだって可能だ。

ということで最近はこれらの情報を貯蓄することにはまっているので、今回は具体的な

  • 情報の取得方法
  • 情報の整理・保存方法
  • 情報の閲覧方法

などを簡単にまとめようと思う。

[自分語り] 写真や位置情報記録の経緯

初期

自分がスマフォを手にしたとき3、SNSで上げた写真経由で位置情報がバレることや、そもそもスマフォで位置情報を取ることが怖く、位置情報は無効化していた4

しかし、登山のときにオフラインで登山地図を見たり位置情報で現在地がわかるYAMAPというサービスを使い、自分の行動を記録して振り返られることの面白さを知った。 そして、digikamというデスクトップアプリケーションで地図上で試しに位置情報を有効化して撮った写真が表示されるのにも感動した5

更に、スマフォを手にして2年弱たって友人と旅行に行ったときに、Google Mapsのタイムラインの機能を教えてもらい、継続的に(しかもほとんど意識することなく)自分の細かい行動記録を取れることを知って継続的な記録にも興味を持った。

中期

ところが、この状態にはいくつかの問題があった。

  1. digikamはデスクトップアプリケーションなので、スマフォから見れない

PCを開いて、写真を保存している外部SSDを刺さないといけないのは、同期の面倒さや閲覧のしづらさの点で不満があった。

  1. Google Mapsタイムラインの仕様変更

プライバシー関係の問題だかなんだかで、情報をスマフォにローカルで保存するようになった。 おかげでPCから閲覧できなくなった。

  1. Google Mapsタイムラインは大まかな位置情報の記録ツールである

けっして、アクティビティを高精度で記録するわけではない。 これらを行うツールもまたたくさんあるが、それらとは情報がデカップルした状態になる。

というわけで現在使っている方法はこれらの問題を解決した方法になる。

写真

撮影

写真はスマフォ6で行っている。 一時期はカメラがほしいと思ったが経済的に(あと自分の写真の雑さ的に)スマフォの方が良いだろうと今は思っている7

不満点としては、

  • バッテリー消費が激しい: たぶんAI処理的なやつのせいだろうが、非常に電池を食う。特に旅行中はコンセントなどがない状態かつ、写真をたくさん撮るので新しいスマフォのはずなのに電池持ちが悪い(なんてこった)。
  • 音がなる: 前のやつはならなかった。音を鳴らさないためにGoogle Cameraを別で入れてるが、こいつは超広角で撮ると色温度が非常に高くなるバグがあり青っぽくなってしまう。あとAndroidをあげると壊れることがある。

写真は数十GBほどになり一方ストレージは128GBなので、いずれ掃除する必要がある。

保存

保存は2つの系統で行っている。

  1. USB接続の外付けSSD

Windowsの場合はFreeFileSync8、Linuxの場合はmtpでマウントしてrsyncなどで。

  1. immich

自宅サーバ(raspi4 8GB)で動かしている。(自分は使ったことないが)Google Photo的なもの。 古い写真はSSDからimmich CLIで、新しい写真はモバイル用アプリで直接アップロードしている。 以下immichについて詳しく書く。

immich運用

immichはNodeとPythonで動くサーバー、Svelteでできたwebアプリ、Dart製のモバイルアプリ、nodeで動くCLIなどから構成されたセルフホスト用写真管理システムで、率直に言うと、とても完成度が高いGitHubのスター数はなんと85.6kもあり9、ここからもimmichの人気の高さがうかがえるだろう。

immichを運用し始めたのは去年の10月頃であり10、raspi4自宅サーバでMisskey等とともに運用している。

immich自体は運用を始めるよりかなり前から知っていたが、digikam的UIに慣れていて見た目に馴染みがなかったのと、機械学習を使うと聞いて需要とあってないのかなと思いNextcloudなどでの写真運用などを模索していた(去年夏ごろ)。 しかし、実際に写真管理方法を模索して最終的にimmichに落ち着いている人がいたので、物は試しということで建ててみた。

実際に運用した感想としてはまず、思ったより問題なく動くし、機械学習の機能も思ったより便利だと感じた。 具体的な負荷は平常時はお一人様Misskeyの数分の一くらいのCPU・メモリ負荷で、写真をアップロードした直後にメタデータの展開、サムネイル生成、機械学習(スマートサーチ、顔検出、重複検出、OCRなど)をやっているときは全リソースを使う感じである。

機械学習サーバーを別のマシンで動かす

immichのサーバーはメインサーバー(node)、機械学習サーバー(Python)、Postgres、Redisの4つから構成されており1、機械学習サーバーはメインサーバーとHTTP通信のみをする。 したがって機械学習サーバーを別のマシンで動かすことが簡単にできる。

機械学習は基本的に写真/動画に対して一度しか行わないため、写真をアップロードしていないときは負荷はほとんどない。 よって普段サーバーとして運用していない普段遣いのPCで一時的に処理を肩代わりすることができる。

具体的な方法はドキュメントに書いてあるが、自分がやった方法では、

  1. 機械学習サーバーを動かすPCでdocker-compose.ymlを用意(環境変数はデフォルトでやってる)
  2. raspiと同じtailscaleネットワークに繋いで、そのアドレスをimmichの管理画面(設定->機械学習設定)のURLに追加する。

だけでできた。 注意点としてはドキュメントに書いてあるが、この間の通信は基本的に内部のものなのでセキュリティに気をつけようとのこと。

最近のバージョンでOCRが追加されたときに1万枚以上の写真を処理する必要がでたが、raspiだけでは1週間ほど掛かりそうだったところを一晩で終わらせることができた。

ちなみに機械学習サーバーの選択は自動でやってくれるので、設定をいちいちいじらなくても、より高パフォーマンスなサーバーを自動で使ってくれるし、使わないときに外部の機械学習サーバーを閉じていてもエラーなくraspiで処理をしてくれる。

どんな感じで使ってる?

多分大体Google Photosと同じ感じで使える。

こんな感じに地図に写真を表示したり1112

immich webでの地図表示

こんな感じに写真1枚やアルバムを共有したり、 機械学習で解析した結果を使って、文字での検索や類似画像の検索ができる。

現在の使用量はこんな感じ:

immichのサーバー統計。写真24835枚、動画469本、全体で103GiB

現在のサーバー統計。なんとも贅沢

運用を始めたときはバージョンがv1.xxxのときでそのときは公式webサイトで「開発が非常にアクティブなので注意」と書いてあったが、先日ついに安定版としてv2.0.0がリリースされたため、安心して使えると思う。

一つ不満があるとするなら、写真をUSB2.0接続のHDDにおいているため結構読み込みが遅い。 Misskeyの画像キャッシュを消したおかげでSSDの空き容量がふんだんにある(600GBぐらい)ので、そっちに引っ越してもいいかもしれない。

位置情報

取得

写真と違って、位置情報の取得方法はかなり迷走している。 今まで使ったことがある方法としては、

  • Google Maps: おなじみ
  • Mapy.com: 旧Windy Maps→Mapy.cz。OpenStreetMapに出会わせてくれた。任意の地点でいろんな長さの散歩・サイクリング(・クロスカントリー)コースをいい感じに作ってくれるNearby Tripsが面白い。
  • FitoTrack: ワークアウト記録用。
  • Organic Maps: 完全オフライン13で使える地図アプリ。フォークにCoMapsがある。
  • OpenTracks: こちらもワークアウト記録用。オフライン地図を使える。
  • OwnTracks: サーバーに送信するだけ。地図表示あり。サーバーもある。
  • GPSLogger for Android: ローカルに保存。オンライン送信あり。

などがある141516

たくさんあるし、それぞれ特徴が微妙に違うので表にしてみると、

ツール主な用途トラッキングの特徴・用途地図表示統計表示
Mapy.com汎用地図運動の記録(高頻度・ローカルバッファ・オンライン保存)オフライン可能17部分的
FitoTrack運動の記録運動の記録(高頻度・ローカルバッファ・オフライン保存)オンラインあり
Organic Maps地図簡易的な記録(高頻度・ローカルバッファ・オフライン保存)オフラインのみ18部分的
OpenTracks運動の記録運動の記録(高頻度・ローカルバッファ・オフライン保存)オンライン・オフライン19あり
OwnTracks継続的な記録履歴のための記録(可変頻度・バッファなし・オンライン保存)オンラインなし
GPSLogger継続的な記録履歴のための記録(可変頻度・ローカルバッファ・オンライン/オフライン保存)なしなし

ということで、分類わけをすると、

  • 地図メイン: 位置情報の記録ができるが、あくまでおまけ。Mapy.com、Organic Maps。
  • 運動記録用: 位置情報の細かい記録が主目的。記録中に区間ごとの統計を見たり地図での表示ができる。FitoTrack、OpenTracks。
  • 位置情報記録用: 継続的な位置情報の記録が目的。サーバーの存在が半分前提。記録中の表示は最小限。OwnTracks、GPSLogger。

と言う具合に、同じ位置情報の記録と言ってもけっこうバリエーションがあることがわかる。 これを踏まえて現在(ここ2週間ほど)は、

  • (地図表示): Organic Maps
  • 常時起動: GPSLogger
  • 運動の記録: OpenTracks

という構成で使ってる。

OpenTracks

FitoTrackからの乗り換えで使ってる。 決め手は、オフラインでの地図が使えること。

UIはシンプルで、記録を開始すると現在の位置・速度情報やインターバルごとの情報、速度・標高の対時間・距離プロファイルが見れる。 結果をGPXで出力可能。

GPSLogger

OwnTracksからの乗り換えで使ってる。 決め手は、オフラインバッファーがあること。

地図を表示する機能は一切なく、カスタマイズ可能な項目もたくさんありかなりとっつきづらい。 しかし、その分機能はかなり豊富で

  • ログの間隔、精度閾値などを詳細に設定可能
  • 動きがあったときだけ記録できる
  • GPS/GNSSおよびネットワーク位置情報それぞれオンオフ可能
  • 出力ファイルの形式も複数対応(GPX, KML, GeoJSON, CSVなどなど)
  • さらに自動送信も可能(カスタムURLにカスタムの形式で、各種オンラインストレージ、email、OSMなど)

などができ、更にログパフォーマンス・出力設定をまとめて複数のプロファイルとして保存可能だ。

従って、平常時と活動時に記録頻度などを切り替えて表示することができる。

アノテーション機能もあるため、JOSMなどに取り込んでのOSM編集にも活用可能だ。

さらにおもしろい機能として、他のアプリで取得された位置情報を記録する「パッシブ位置情報を記録」という機能があり、これを使えば運動中のOpenTracksによる記録も更に追加してくれることになる。

まだ使い始めて日が浅いのもあり、ログのタイミングや自動送信に関する挙動は把握しきれていないが、かなりいい感じがしているので、これからもこれを常時起動しておこうと思う。

データ移行?

GPSでの位置情報記録はGPXまたはKMLが使われており、(Googleを除いて)これらすべてで互換性がある。

保存

でこれだけいろんな方法で記録できるのは嬉しいのだが、このままでは情報が散逸してしまって、統一的に情報を見ることができない。 ということで今年の9月に長距離移動をした衝動でいろいろ調べた結果、dawarichというソフトウェアがあることを知った。

dawarichは要するにセルフホストできるGoogle Maps Timelineであり、

  • GPX、KML、GeoJSONなどのデータのインポート
  • HTTPでの位置情報の受信と記録
  • 統計の表示
  • 訪問(visits)の検出、記録
  • 旅の記録
  • 地図上に表示(fog of wars20もできる)

などができる。 さらにおもしろい機能として、(なんと!)immichもしくはPhotoPrismと連携して写真を地図上に表示することもできる。

この手のソフトはdawarich以外にもいくらかあり、例えばDawarich vs Othersに比較がある。 dawarichを選んだ理由としては

  • 機能が多そう
  • Google Timelineからのインポートができる
  • Immichと統合できる
  • モダンな感じでUIがほかより良さそう

などがある。

運用とその感想

dawarichはRuby on RailsのサーバーとSidekiq、Redis、PostGIS21で構成されている。 というわけでMisskeyほどではないが、Immichと同程度の負荷がある2223。 ときどきRedisが大量のメモリを食っており、常時たくさんのサーバーと通信して、データベースなども圧倒的に大きいMisskeyに比べると負荷の割にパフォーマンスが悪いなと思う。

UIはこんな感じ:

dawarichでの位置情報(線)の表示画面。下側にleafletで表示されたOSMの地図とその上にトラックが載っている

一度地図を表示してしまえば、地図に何を表示するか次第だが、普通にぐりぐり見れる。

ただ少々残念だが、それ以外の動作は結構遅い。 具体的には最初のログイン画面の表示や地図の表示などが遅い。 immichとの統合もdawarich側では全く情報を保存しないので24、表示がかなり遅い。

そしてUIの出来も以下の点などで今一つだと思ってる:

  • 特にモバイルで問題になるが、ボタン系が小さいので押し間違いが多い
  • ダークモード切り替えがとても遅い(リロードが入り、数秒はかかる)。Misskeyが異様に速いので比較してしまう…
  • Google Timelineのような時系列を可視化したようなものはない

ただ、dawarichは非常に開発が活発なので、これらもいずれ良くなるのではないかという期待はしている。 実際少し前まで、モバイルで地図が画面いっぱいに表示されてしまうため、時系列移動の部分へのアクセスが非常にしづらかったが、最近のバージョンでこの点は改善された(ありがとう)。 一部アイコンも絵文字をそのまま使ってたのが、svgのものになって見栄えも良くなった。

モバイルアプリ

dawarichはiOS用のアプリしかない。 ということは自分はAndroidを使ってるのでこれは使えなく、なのでどのような機能があるのか知らないがこれはちょっと残念だった。

将来的にAndroid用が作られるのかは知らないが、記録アプリの様々な特徴をいいとこ取りしたようなアプリがimmichのような高クオリティでできたら嬉しいなあとは思う。 ただ、これはとてもハードル高いなとも思う。

スマフォからの閲覧に関しては、オフラインで記録中はGPSLoggerからのGPXエクスポートをOrganic MapsかOpenTracksがとりあえずよさそう。

まとめ・おわりに25

というわけで現在実践中の写真管理と、(少々ニッチだが)位置情報管理についてまとめてみた。 サーバー系の感想としては、immichは完成度が高くて素晴らしい、dawarichはこれからに期待、そして改めてMisskeyがすごいなあと思った。

最後にこれらのシステムを使った趣味(?)的活動と将来の展望をちょっと書こうと思う。

趣味的活動: 過去の写真のジオタグ

写真を振り返りつつ、Googleストリートビューや航空写真を見ながら記憶をたどりに位置情報をつける。 immichのモバイルアプリとweb UIからつけることができる。

思い出の振り返りができてたのしい。

趣味的活動: OpenStreetMapのマッピング

これだけ位置情報や地物の情報を閲覧できる環境にあるので、それを使ってマッピングもできる26。 逆にマッピング目的で撮った写真やメモを集めて表示するのにも使える。

あとここまでのものすべてOSMベースの地図を表示するので、地図の更新の恩恵を直接受けるため、マッピングのモチベーションも上がる。

そして全ての情報の統合…

欲しい:もろもろを集めて閲覧するやつのアイデア

はい。ほしい(aspiring)。

immichやdawarich使い出したのも、このシステムの前段として使えるのではという思惑があった。

一応dawarichなどを見てDBはPostGISがいいのかなあなどは考えている27ことの発端にもたくさん返信つけてるしリノートもたくさんしてる。


まとめ:欲しい:もろもろを集めて閲覧するやつのアイデアが欲しい

以上、ありがとうございました。


  1. 書いているうちに思ったよりOSMやMisskey関係の話が出てきたのと、ちょうど空いてたのでエントリー ↩︎

  2. スマフォはGPSだけでなくインターネットへの接続からも位置情報を決めている(携帯回線やWiFiなど)。Googleの位置情報サービスなどで得られる。 ↩︎

  3. およそ6年前 ↩︎

  4. 自分はかなり非方向音痴だと自認しており、別に位置情報サービスがなくても困らない。 ↩︎

  5. https://mstdn.jp/@nippa/106990882210900143 notestockのおかげで簡単に過去の自分の投稿がわかる。ありがたい。 ↩︎

  6. 初代Huawei Nova 5T、2代目Google Pixel 8 ↩︎

  7. とはいえ望遠を撮りたいと思うことはよくある。 ↩︎

  8. USB接続のスマフォ内部ストレージにシェル(pwsh)からアクセスする方法を知らない。知ってたら教えてください。 ↩︎

  9. スターつけてなかった… ↩︎

  10. https://misskey.qwjyh.net/notes/9zjnk1y55z ↩︎

  11. 地図はOSMの標準っぽいように表示をカスタムしてる。タイルサーバーはimmichホストのデフォルト。 ↩︎

  12. スマフォでも同様に見れる。しかもなんと、ローカルに保存してくれているので表示がはやい。 ↩︎

  13. 逆に地図をダウンロードしないと使えない。 ↩︎

  14. 余談だが、codebergホストが結構あるなとおもった。 ↩︎

  15. これらはだいたいF-Droidで検索して知った。 ↩︎

  16. ほかにOSMマッピング用のがあったが今のスマフォでは動かなかった…。いまはマッピングにはEvery Doorを使ってる(ただしオンライン時限定)。 ↩︎

  17. 無料だと1か国のみ。国境付近に滞在してると致命的なくらい使いにくい… ↩︎

  18. 毎月更新 ↩︎

  19. 更新頻度は不明。自分でファイルをダウンロードして特定のフォルダに置く。 ↩︎

  20. 訪問した地点を中心に"霧が晴れた"地図が表示される。EverySingleStreet.jlの道路を気にしないバージョン。 ↩︎

  21. PostgresのGIS用の拡張。aarch64でdockerで動かすときはちょっと注意が必要。詳しくはdawarichドキュメント参照(最近わかりやすくなった)。 ↩︎

  22. メモリフットプリント的には3つとも同じくらい ↩︎

  23. 逆に他のソフト(forgejo、sftpgo、memos、(restic rest serever))は機能の違いもあるが、どれも負荷が軽く、そして偶然なのかどれもGo製である。 ↩︎

  24. この設計自体は良いと思う。 ↩︎

  25. といいつつまだまだ続きます ↩︎

  26. 本当はMapillaryなりPanomaraxなりに上げたほうがいいんだろうけれど… ↩︎

  27. 最近(9月かな)timelinizeというのを知ったが、これは自分だけのAIを作る的な感じで、raspiで動くのかなと言うのとちょっと目的が違うのかなと思って、あまり熱くなってない。 ↩︎