ExifSortPro / 使い方

使い方ガイド

動作環境は macOS 12 Monterey 以降です。Apple Silicon・Intel の両方で動きます(universal2)。

ExifSortPro の各機能について、画面ごとに使い方を説明します。

目次

  1. 起動と初回設定
  2. ソースの追加
  3. 出力先とテンプレート
  4. プリセット
  5. プレビューと個別オーバーライド
  6. 実行 / キャンセル / ログ
  7. エラーサマリと再実行
  8. 履歴と巻き戻し
  9. 機材エイリアス
  10. 保持期間と履歴サイズ管理
  11. パフォーマンス設定 (並列 / キャッシュ / クラウド)
  12. 言語切替
  13. CLI リファレンス
  14. クラウド宛先について
  15. トラブルシューティング

1. 起動と初回設定

動作環境

OS macOS 12 Monterey 以降
CPU Apple Silicon・Intel 両対応(universal2 の1本)
ネットワーク 不要(すべての処理が Mac の中で完結します)

DMG 配布版から起動する場合

  1. ExifSortPro-0.1.0-beta4.dmg をダウンロードして開く
  2. 表示されるウィンドウで、ExifSortPro.appApplications フォルダにドラッグ
  3. 終わったら、マウントされたディスクイメージをゴミ箱にドラッグして取り出す
  4. Applications フォルダから ExifSortPro を起動

配布物は Apple Developer ID による署名と Apple の公証(notarization)を受けています。 そのままダブルクリックで起動でき、警告は出ません。

それでも「開発元が未確認のため開けません」と出た場合

ダウンロードが途中で壊れている可能性があります。まず DMG を取り直してください。 急ぐ場合は、Finder で ExifSortPro.app右クリック → 開く を選び、 確認ダイアログで「開く」をクリックすると起動できます。

誤って DMG 内のアプリを直接起動した場合

「ExifSortPro はディスクイメージから起動しています。」というダイアログが出ます。これは保護機能です。Applications フォルダにドラッグしてからそちらで起動し直してください。

ソースから起動する場合

exifsort-gui

初回起動時の自動セットアップ

初回起動時、~/.exifsort/manifest.sqlite3 が自動作成されます。設定・履歴・プリセット・エイリアスはすべてここに保存されます。

起動直後のメイン画面

起動直後のメイン画面


2. ソースの追加

メインウィンドウの ソース セクションにフォルダ/ファイルをドラッグ&ドロップするか、「ファイルを追加…」ボタンで選択します。

スキャンオプション:

  • メディアファイルのみ (デフォルト ON) — 写真・動画・XMP のみ取り込み。.db などの DB ファイルは除外されます。.photoslibrary などの macOS パッケージバンドルは常に「単一ファイル」として扱われ、中身は走査しません

件数表示: ソースリスト下部の「ファイルを追加…」「クリア」ボタン横に、追加済みの「フォルダ:N個 ファイル:M個」がリアルタイムで表示されます(リストが空のときは非表示)。

フォルダを追加したところ

フォルダを追加したところ


3. 出力先とテンプレート

保存先 に振り分け先のルートフォルダを指定します。

フォルダテンプレート(「詳細」を開くと出る入力欄)はパス構造を表す文字列です。{year}/{month}/{camera} のように / で階層を区切ります。

変数一覧:

変数 例(日本語モード) 例(English) 説明
{year} {month} {day} 2024年/03月/15日 2024/03/15 撮影日(12. 言語切替 で連動)
{hhmm} 1030 1030 撮影時刻(HHMM)
{month_name} {month_abbr} March, Mar March, Mar 英語月名(言語設定の影響なし)
{weekday} {weekday_abbr} Friday, Fri Friday, Fri 英語曜日(言語設定の影響なし)
{camera} NIKON Z 8 NIKON Z 8 カメラモデル
{lens} NIKKOR Z 24-70mm NIKKOR Z 24-70mm レンズモデル
{ext} jpg jpg 拡張子(小文字)

RAW + JPG と XMP は、まとめて同じ場所へ。

同じフォルダーにある同じ名前の DSC_0001.NEFDSC_0001.JPG、それに現像設定の サイドカー DSC_0001.xmp は 1 組として扱われ、同じ振り分け先へコピーされます。 保存先に同名があって別名で保存するときも、組の全員が同じ番号を受け取るので、 _copy1 の付き方がずれて対応が切れることはありません。

  • サイドカーは、同じフォルダーにあり、拡張子を置き換えた名前DSC_0001.xmp)のものが 対象です。DSC_0001.NEF.xmp のように拡張子の後ろへ足す形式(darktable など)は、 別のファイルとして扱われます
  • ⚠️ {ext} を入れたテンプレートでは、このまとめが無効になります。「拡張子ごとに 分ける」という指定と両立しないためです。.NEF.JPG はそれぞれの拡張子フォルダーへ、 .xmpxmp フォルダーへ入ります。RAW と現像設定を隣に置いておきたい場合は、 {ext} を使わないでください

画面から選べる変数は、一覧より少なくしてあります。

どこから 使える変数
フォルダー構成のアイコン(ドラッグ) {year} {month} {day} {camera} {ext} の5つ
挿入」ボタンのメニュー 上記 + {month_name} {month_abbr} {weekday} {weekday_abbr} {hhmm}
テンプレート欄に直接入力 上の表のすべて{lens} を含む)

絞った理由は、そのままだとかえって整理しにくいフォルダができるためです。曜日で分ける人はほとんどおらず、時刻({hhmm})は1分ごとに1フォルダーできてしまいます。レンズ名は XF16-55mmF2.8 R LM WR のように長く、フォルダー名として扱いにくくなります。

ただし解釈する側は全部そのまま残してあります。 {lens} を含むテンプレートを手で入力すれば動きますし、以前に保存したプリセットもそのまま使えます。

挿入」ボタンから変数を挿入できます。前後に文字があれば必要な / が自動補完されるので、「/ を入れ忘れて {year}{month} のような連結になってしまった」というミスは起きにくくなっています。テンプレート行の下にサンプルメタデータでの 「例: ...」 プレビューがリアルタイム表示されます。

ソースと保存先のフォルダが重なるとき: 例えば /Volumes/SDCARD/ の中身を /Volumes/SDCARD/Sorted/ に振り分けるような構成だと、確認ダイアログが出ます。「同じディスク内へのコピーになるため、容量がほぼ2倍になります」と警告された上で、続行するかキャンセルするか選べます(デフォルトはキャンセル)。SD カード上で外付けディスクを繋がずに整理したい、といった用途を想定した opt-in です。なおソースと保存先が 完全に同一フォルダ の場合だけは、誤操作と判断して常にブロックします。

重複時の挙動 (If destination exists):

  • 別名で保存IMG_1234_copy1.jpgIMG_1234_copy2.jpg … と連番を付けて別ファイルとして保存(デフォルト)
  • スキップ — 何もしない
  • 上書き — 上書き
  • エラー — その行をエラー扱い

同じフォルダをもう一度整理したときは、ここの設定で結果が変わります。2回目の実行では、すでに保存先にある写真が中身で照合されて重複と判定されます(ファイル名だけでなく、大きさと中身のハッシュを見ます)。

設定 2回目を実行すると
別名で保存(デフォルト) 同じ写真が _copy1 付きでもう1部できます。容量が2倍になります
スキップ 何も起きません。すでにある写真は増えません

SD カードを挿し直して念のためもう一度、といった使い方をするなら、スキップに変えておくのが安全です。デフォルトを「別名で保存」にしてあるのは、取りこぼしを作らないためです(別物なのに同じ名前、というケースで片方が消えるより、両方残るほうが元に戻せます)。

なお増えてしまっても、8. 履歴と巻き戻し からその回の実行を丸ごと取り消せます。元の写真には触れていないので、消えるのは増えたコピーだけです。

高速モード(コピー後の検証をスキップ):

ON にするとコピー後の中身チェックをスキップして高速化します。APFS のローカルコピーはほぼ確実に成功するため、速度を優先したい場合に有効です。最高の信頼性を求める場合は OFF のままにしてください。既定値は 設定 → パフォーマンス… から変更できます(11. パフォーマンス設定)。

保存先とフォルダ構成を決めたところ

保存先とフォルダ構成を決めたところ


4. プリセット

よく使う設定の組み合わせを保存できます。

ビルトイン:

  • 日付別(日付別)— {year}/{month}/{day}
  • カメラ別(カメラ別)— {camera}
  • 日付+カメラ別(日付+カメラ別)— {year}/{month}/{camera}

ユーザープリセット:

  • 「名前を付けて保存…」で現在の設定を保存
  • 「削除」でユーザープリセットを削除(ビルトインは削除不可)

プリセットには template, on_exists, 不明値の代替文字列(unknown_date, unknown_camera, unknown_lens)が含まれます。


5. プレビューと個別オーバーライド

プレビュー…」をクリックすると、振り分け予定の全行を表示します。

  • 新規(白背景) — 新規コピー
  • 重複(オレンジ) — 重複検出済(行末のドロップダウンで スキップ / 上書き / 別名で保存 を個別指定可能)
  • エラー(赤) — メタデータ取得失敗等

ヘッダーには N group(s): X new, Y duplicate(s), Z error(s) のサマリが表示されます。

開始」で実行、「キャンセル」で破棄。

実行前のプレビュー。どこへ何が入るか全件確認できる

実行前のプレビュー。どこへ何が入るか全件確認できる


6. 実行 / キャンセル / ログ

開始」で処理開始。プログレスバーと現在処理中ファイル名が表示されます。実行中は 同じボタンが「キャンセル」に変化 し、クリックで中断要求(処理中のファイル完了後に「キャンセル中…」表示を経て停止)。

中断時は 既にコピー済のファイルは残り、履歴に「中断」として記録されるため、後から巻き戻し可能です。

実行中にウインドウを閉じた場合も同じです。閉じる操作が中断要求として扱われ、処理中のファイルが終わるのを待ってから閉じます。大きな動画をコピーしている最中だと、窓が数秒〜十数秒残ることがありますが、故障ではありません。強制終了はしないので、履歴は正しく残り、巻き戻せます。

ログエリアには [n/total] 形式で各ファイルの結果が出力されます。ステータスバー右端の丸いインジケータが idle / running / done / failed / cancelled の状態を色で示します。

実行終了時の "通常コピー以外" まとめ: 1 回の実行で RENAMED(別名コピー)/OVERWRITTEN(上書き)/SKIP(重複スキップ)/FAIL(失敗)が 1 件でも発生していれば、最終ログの末尾に「通常コピー以外で完了したファイル (N 件)」というセクションが自動で出ます。各行にはファイル名・保存先(または失敗理由)が並ぶので、何百行も流れる実行ログを遡らなくても、別名で保存されたファイルなどを一覧で確認できます。


7. エラーサマリと再実行

処理完了時に失敗が 1 件以上あれば自動でエラーサマリ画面が開きます。

  • 失敗ファイル一覧(ソースパス / エラーメッセージ)
  • 個別の「再実行」 または 「全件再実行」 で該当ファイルだけ再処理
  • CSV / JSON エクスポート で外部ツールに渡せる形式で書き出し

読み取れなかったファイルの一覧。個別に再実行できる

読み取れなかったファイルの一覧。個別に再実行できる


8. 履歴と巻き戻し

メニュー 履歴 → セッション一覧… で過去の整理履歴一覧を表示。

  • 上のテーブル: ID / 開始時刻 / ステータス / 件数 / source → dest
  • 履歴を選ぶと下のテーブルにエントリ詳細が表示される
  • 「ロールバック…」 で選んだ履歴を巻き戻し(コピーされたファイルを削除)

巻き戻し時の安全策:

  • 中身チェック — コピー後にユーザーが編集したファイルは 削除をスキップ--no-verify-hash で無効化可能 / GUI では常時有効)
  • 元データには触れない(コピーしか作っていないため)

履歴。セッションを選ぶと中身が出る。丸ごと巻き戻せる

履歴。セッションを選ぶと中身が出る。丸ごと巻き戻せる


9. 機材エイリアス

EXIF の表記揺れを正規化するための辞書機能です。

メニュー 設定 → 機材名エイリアス… から CRUD 操作できます。

例:

Raw name Normalized Kind
NIKON CORPORATION NIKON Z 8 Z8 camera
NIKKOR Z 24-70mm f/2.8 S Z 24-70 f2.8 lens

正規化後の文字列がテンプレートの {camera} / {lens} に入ります。

機材名のエイリアス設定

機材名のエイリアス設定


10. 保持期間と履歴サイズ管理

「履歴」ダイアログの 「保持期間…」 ボタンで保持日数を設定できます。

  • デフォルト: 30 日(古い履歴は起動時に自動削除)
  • 0 を指定: 無期限保持

無期限保持で履歴データが大きくなりすぎるのを防ぐため:

  • 使用状況の表示 — 「保持期間」ダイアログに 現在の使用量: N セッション / M エントリー / X.X KB が常時表示
  • 大規模時の警告 — 履歴データが 200 MB を超える 状態で保存すると、「古い履歴を削除しますか?」を提案。承諾すると N 日以上前の履歴のみ削除(保持設定 = 無期限はそのまま維持)

保持期間の設定ダイアログ

「保持期間…」を押すと出るダイアログ。いま履歴がどれだけ場所を取っているかを見てから日数を決められます


11. パフォーマンス設定 (並列 / キャッシュ / クラウド)

メニュー 設定 → パフォーマンス… で開きます。設定はアプリ内に保存され、次回起動以降にも引き継がれます。

Parallelism(並列度):

  • メタデータ抽出ワーカー数 — メタデータ読み出しを同時並行で行う数。「自動」(値 0) で CPU コア数の半分(最大 4)を自動選択。大量ファイルでは増やすと高速化、ただし CPU 使用率も上がります
  • Hash + copy workers — 中身チェック + コピーを同時並行で行う数。「自動」で同上の自動値。SSD では速くなり、HDD ではむしろ遅くなる場合があります

Behaviour(挙動):

  • Default to Fast mode (skip post-copy verification) — ON にすると、メイン画面の Fast mode チェックを起動時から ON にします(3. 出力先とテンプレート参照)
  • メタデータキャッシュを有効にする — 一度読み込んだファイルの情報をアプリが覚えておくしくみ。同じフォルダを再スキャンすると劇的に高速化します。ファイルが編集されると自動的に再読み込み

iCloud / クラウド同期のプレースホルダ:

iCloud Drive の「Mac のストレージを最適化」やクラウド同期ソフトが残す「クラウド上にしか実体がないファイル」(プレースホルダ)の扱いを選びます。

  • 警告してスキップ(推奨) — 警告ログを出してスキップし続行。サマリに件数が記録されるので、後から再実行可能(既定)
  • ダウンロードして待機 — macOS にダウンロードを要求してから処理。低速回線では遅いがアーカイブ用途で安全
  • 処理を中断する — 実体のないファイルを検出した時点で整理全体を中断。部分結果を許容できない場合に

宛先側がクラウド同期フォルダの場合の注意点は 14. クラウド宛先について を参照。

パフォーマンス設定

パフォーマンス設定


12. 言語切替

メニュー 設定 → 言語 → 日本語 / English で切替。

  • 設定は ~/Library/Preferences/com.ExifSort.ExifSort.plist に保存
  • 次回起動から反映(再起動を促すダイアログが出ます)

優先順位: EXIFSORT_LANG 環境変数 > GUI 設定 > デフォルト(日本語)

この設定は出力フォルダ名にも影響します。日本語のときは {year}/{month}/{day}2024年/03月/15日 に展開され、English のときは 2024/03/15 のままです(3. 出力先とテンプレート 参照)。途中で言語を切り替えると、それ以降の振り分けは新しい言語のフォルダ名で作られるため、過去の 2024/03/15 ツリーと別ツリーが並んで生まれる点に注意してください。


13. CLI リファレンス

exifsort sort SOURCE DEST [options]
exifsort sessions list [--limit N]
exifsort sessions show SESSION_ID
exifsort sessions purge [--days N]
exifsort sessions retention [N]
exifsort sessions export SESSION_ID --format csv|json --output FILE
exifsort sessions rollback SESSION_ID [--no-verify-hash] [--keep-empty-dirs]
exifsort aliases list [--kind camera|lens]
exifsort aliases add KIND RAW NORMALIZED
exifsort aliases remove KIND RAW

sort 主要オプション:

オプション 説明
--template TEMPLATE パステンプレート
--preset NAME プリセット読込
--save-preset NAME 実行設定をプリセットとして保存
--on-exists {error,skip,overwrite,rename} 重複時の挙動
--dry-run プレビューのみ(コピーしない)
--no-verify コピー後のハッシュ検証をスキップ
--include-hidden dotfile も対象
--include-non-media メディア限定スキャンを無効化(DB / キャッシュは常に除外)
--threshold-mb N サンプリングハッシュへ切替えるサイズ閾値(デフォルト 500 MB)
--sample-mb N サンプリングモード時の各リージョンのサンプルサイズ(デフォルト 4 MB)
--unknown-date STR / --unknown-camera STR / --unknown-lens STR 不明値の代替文字列
--lang {ja,en,...} 日付トークンの言語。ja2024年/03月/15日、それ以外は 2024/03/15。省略時は $EXIFSORT_LANG、それも未設定なら en(CLI のデフォルト)
--allow-overlap ソース/保存先が入れ子になっていても続行する。SD カード内へ振り分けるなど、容量倍化を承知でやる場合のみ。OVERLAP_EQUAL(完全一致)はこのフラグでも引き続きブロック
--quiet 進捗行を抑制

同時並行数・キャッシュ・クラウドの実体なしファイルの扱いは GUI の「パフォーマンス…」 から制御します(CLI もこの値を尊重します)。


14. クラウド宛先について

ExifSortPro 自体はクラウド同期を関知せず、保存先がクラウド同期フォルダの場合も普通のローカルパスとして書き込みます。OS(iCloud Drive / Dropbox / OneDrive / Google Drive のクライアント)が、書き込まれたファイルを後追いで非同期にアップロードします。

クラウド同期フォルダ(例: ~/Library/Mobile Documents/com~apple~CloudDocs/...~/Dropbox/...)を保存先に指定することは可能ですが、以下の挙動を理解しておいてください:

項目 内容
検証はローカル完了時に成功する コピー直後の中身チェックはローカルディスクのバイト列を見るのでパスしますが、クラウドへのアップロード完了を待ちません。「整理が完了 = 全ファイルがクラウドに上がった」ではない点に注意。
ローカルディスクが一時的に膨らむ iCloud Drive / Dropbox の「最適化」設定でも、いったんローカルに完全なファイルを書き込んでからアップロードします。1000 件 × 30MB = 30GB が一時的にローカルを使う可能性。
同時編集による衝突 同じ保存先を別マシンからも同期している場合、Photos (conflicted copy 2026-04-30).jpg のような conflicted copy が生成されることがあります。1 台ずつ実行してください。
巻き戻しが遅延する iCloud Drive で「Mac のストレージを最適化」が有効だと、コピー直後にローカルから消えてクラウドのみに残ります。巻き戻し時にネットワーク経由で再ダウンロードが入るため遅くなります。

ソース側のクラウド対応は別途対応済みです。ソースに iCloud / Dropbox / OneDrive / Google Drive の「クラウド上にしか実体がないファイル」が含まれている場合の動作は、設定 → パフォーマンス… の「iCloud / クラウド同期のプレースホルダ」セクションで設定できます(既定: 警告してスキップ。詳細は 11. パフォーマンス設定)。


15. トラブルシューティング

ExifTool が見つからない → DMG 版には ExifTool を同梱しているので、通常この警告は出ません (ExifSortPro.app/Contents/Resources/resources/exiftool/macos/exiftool)。 出た場合はアプリが壊れている可能性があるため、DMG を取り直してください。 ソースから動かしている場合は brew install exiftool が必要です。

起動時に「開発元未確認」警告 → 配布物は署名・公証済みなので、本来は出ません。ダウンロードが壊れている 可能性があるので DMG を取り直してください。急ぐ場合は Finder で右クリック → 開く、または システム設定 → プライバシーとセキュリティ → このまま開く

フルディスクアクセス警告~/Pictures 等にアクセスする場合に macOS が要求。システム設定 → プライバシーとセキュリティ → フルディスクアクセス で ExifSortPro を許可。

日本語が文字化け(□で表示) → macOS で稀に発生。フォントは Hiragino を明示指定済みなので、システムの Hiragino が壊れていないか確認してください。

履歴ダイアログが重い → 履歴が数千を超えると遅くなります。「保持期間…」で保持日数を設定するか、無期限の場合は警告ダイアログから古い履歴を削除してください(10. 保持期間と履歴サイズ管理)。

巻き戻してもファイルが残る → コピー後にユーザーが編集したファイルは中身チェックに引っかかって削除がスキップされます(仕様)。CLI なら --no-verify-hash で強制削除可能。