PhotosExport — Apple Photosライブラリを丸ごと書き出すCLIツール

Tool

概要

PhotosExportは、Apple Photosのライブラリに入っている全ての資産をファイルシステム上へエクスポートするための、シンプルで意図のはっきりしたmacOSコマンドラインツールです。作者はShortcutsやAppleScriptベースの既存ソリューションの不足・不安定さを理由に本ツールを作成しています。デフォルトでは「現行カレンダー年」の資産を一括抽出し、利用可能な全リソース(オリジナル、編集済み、Live Photoのムービーなど)とメタデータを一緒に出力する設計が特徴です。小規模かつ実用重視のツールで、Swiftで実装されています。

GitHub

リポジトリの統計情報

  • スター数: 24
  • フォーク数: 0
  • ウォッチャー数: 24
  • コミット数: 11
  • ファイル数: 8
  • メインの言語: Swift

主な特徴

  • 年単位(デフォルトは現在の年)でライブラリ資産を一括エクスポートする設計
  • 各資産について、利用可能なすべてのリソース(オリジナル、編集済みバージョン、Live Photoのムービーなど)を取得
  • メタデータや識別子を含むサイドカーファイルを出力し、後処理や再インポートを想定
  • コマンドラインツールとして簡単にビルド・実行でき、スクリプト運用に適する

技術的なポイント

PhotosExportはSwiftで実装されたコマンドラインアプリケーションで、Package.swiftが含まれているためSwift Package Managerでのビルドが前提になっています。macOS上のPhotosライブラリにアクセスしてアセットを列挙・取得するため、AppleのPhotos系API(PhotoKitや内部のPHAクラス群)を利用している設計と見受けられます。典型的な実装パターンとしては、ライブラリ内のPHAsset相当オブジェクトをフィルタリング(年単位)して順に処理し、各アセットから利用可能なリソースを個別にダウンロード/書き出す流れです。

出力では元ファイルの形式(JPEG/HEIC/RAW/MP4など)を保持し、編集済みの派生ファイルやLive Photoのムービー部分といった複数リソースを個別ファイルとして保存します。さらに、Exifやタイムスタンプ、UUID、キーワードやレーティングといったメタデータをJSONなどのサイドカーファイルにまとめて書き出すことで、後続の整理・検索・再インポート作業に有用な構造にしています。

並列処理やI/O効率にも配慮している可能性が高く、Swiftの非同期API(Dispatchやasync/await)やバッファリングを利用して大量の資産を扱う際の速度と安定性を確保している設計が想定されます。また、コマンドライン向けの典型的な拡張として、年指定や出力先指定、ドライランモードなどのオプションを備えていることが期待されます。Makefileが含まれているため、ビルドや配布用の簡易コマンドが用意されている点も運用面で便利です。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitignore: file
  • LICENSE: file
  • Makefile: file
  • Package.swift: file
  • README.md: file

…他 3 ファイル

(補足)Swiftパッケージとしての最小構成が揃っており、リポジトリサイズは小さく、実験的/ユーティリティ用途のツールであることがわかります。

まとめ

PhotosExportはシンプルで実用的、Photosライブラリの一括エクスポートに最適なCLIツールです。

リポジトリ情報:

READMEの抜粋:

PhotosExport

Why I wrote this

PhotosExport is a small macOS command-line tool that exports Apple Photos library assets to the filesystem, and that I developed out of frustration with Shortcuts’ limited (i.e., non-existent) Photos export capabilities and the brokenness of AppleScript-based solutions.

It is intentionally opinionated:

  • Exports assets from a complete calendar year (current year by default).
  • For each asset, exports **all available `PHA…