大量画像のファイル名一括変更術 - OS 標準機能からスクリプトまで
画像ファイル名の一括変更が必要な場面
デジタルカメラやスマートフォンで撮影した画像は、IMG_0001.jpg や DSC_1234.NEF のような機械的なファイル名が付けられます。数枚であれば手動でリネームできますが、数百枚〜数千枚の画像を扱う場合は一括リネームが不可欠です。
一括リネームが必要な典型的なシーン:
- 撮影イベント後の整理: 結婚式、旅行、イベントの写真を日付や場所で分類するためにリネーム
- EC サイトの商品画像: 商品コード + 連番 (例:
PROD-A001_01.jpg) に統一する - Web サイトの画像アセット: SEO を意識したファイル名 (例:
tokyo-tower-night-view.jpg) に変更 - 複数カメラの統合: 異なるカメラで撮影した画像を撮影日時順に連番で統一
- バックアップ・アーカイブ: 年月日ベースのファイル名で長期保存用に整理
ファイル名設計の基本原則:
- 半角英数字とハイフン・アンダースコアのみ使用 (スペースや日本語は避ける)
- 日付を含める場合は
YYYY-MM-DD形式で先頭に配置 (ソート順が自然になる) - 連番は十分な桁数を確保 (例: 001-999 ではなく 0001-9999)
- 拡張子は小文字に統一 (
.JPG→.jpg)
OS 標準機能によるリネーム
追加ソフトウェアなしで利用できる OS 標準のリネーム機能を紹介します。少量〜中量 (数十枚程度) の画像に適しています。
macOS Finder:
- 複数ファイルを選択 → 右クリック → 「名前を変更」
- 3 つのモード: テキストを置き換え / テキストを追加 / フォーマット (連番)
- 「フォーマット」モードでは、カスタム名 + 連番 (例:
vacation_001.jpg) を生成可能 - 開始番号の指定が可能。日付の自動挿入はできない
Windows エクスプローラー:
- 複数ファイルを選択 → F2 キー → 新しい名前を入力 → Enter
- 自動的に
新しい名前 (1).jpg,新しい名前 (2).jpgの形式で連番が付与される - 括弧付き連番のため、プログラムでの処理に不便な場合がある
Windows PowerRename (PowerToys):
- Microsoft 公式の PowerToys に含まれる高機能リネームツール
- 正規表現による検索・置換が可能
- プレビュー機能で変更結果を事前確認できる
- 例:
IMG_(\d+)→photo_$1でIMG_0001.jpgをphoto_0001.jpgに変換
制限事項:
OS 標準機能は手軽ですが、EXIF 情報に基づくリネーム (撮影日時をファイル名に含める等) や、複雑な命名規則の適用には対応していません。そのような場合はコマンドラインツールやスクリプトを使用します。
コマンドラインによる一括リネーム
コマンドラインツールは、複雑な命名規則の適用や大量ファイルの処理に最適です。再現性が高く、スクリプト化して繰り返し利用できます。
rename コマンド (Linux / macOS Homebrew):
- インストール:
brew install rename(macOS) / 標準搭載 (多くの Linux ディストリビューション) - 基本構文:
rename 's/パターン/置換/' ファイル群 - 例: 拡張子を小文字に統一:
rename 's/\.JPG$/.jpg/' *.JPG - 例: プレフィックス追加:
rename 's/^/2026-03-/' *.jpg - 例: スペースをアンダースコアに:
rename 's/ /_/g' *.jpg -nオプション: ドライラン (実際にはリネームせず結果を表示)
ExifTool によるメタデータベースのリネーム:
- 撮影日時をファイル名に:
exiftool '-FileName<DateTimeOriginal' -d '%Y%m%d_%H%M%S%%-c.%%le' *.jpg - この例では
IMG_0001.jpgが20260215_143022.jpgのようにリネームされる %%-c: 同一秒に複数枚ある場合の連番サフィックス%%le: 元の拡張子を小文字で維持- カメラモデル名を含める:
exiftool '-FileName<${Model}_${DateTimeOriginal}' -d '%Y%m%d_%H%M%S%%-c.%%le' *.jpg
mmv (Mass Move and Rename):
- パターンマッチングによる一括リネーム:
mmv 'IMG_*.jpg' 'photo_#1.jpg' #1はワイルドカード*にマッチした部分を参照
安全対策:
一括リネームは取り消しが困難なため、必ず事前にドライラン (-n オプション) で結果を確認し、可能であればバックアップを取ってから実行してください。
Python スクリプトによる高度なリネーム
Python を使えば、条件分岐、EXIF 情報の読み取り、データベース連携など、あらゆるカスタムロジックを組み込んだリネーム処理が可能です。
基本的な連番リネーム:
import osfrom pathlib import Pathfolder = Path("./images")for i, file in enumerate(sorted(folder.glob("*.jpg")), start=1): new_name = f"photo_{i:04d}.jpg" file.rename(folder / new_name)
EXIF 撮影日時ベースのリネーム:
from PIL import Imagefrom PIL.ExifTags import TAGSfrom pathlib import Pathfrom datetime import datetimefolder = Path("./images")for file in folder.glob("*.jpg"): img = Image.open(file) exif = img._getexif() if exif and 36867 in exif: # DateTimeOriginal dt = datetime.strptime(exif[36867], "%Y:%m:%d %H:%M:%S") new_name = dt.strftime("%Y%m%d_%H%M%S") + file.suffix.lower() file.rename(folder / new_name)
重複回避の実装:
同一秒に複数枚撮影された場合のファイル名衝突を防ぐため、既存ファイルとの重複チェックとサフィックス追加のロジックを組み込みます:
def get_unique_name(folder, base_name, ext): candidate = folder / f"{base_name}{ext}" counter = 1 while candidate.exists(): candidate = folder / f"{base_name}_{counter:02d}{ext}" counter += 1 return candidate
ドライランモードの実装:
実際のリネーム前に変更内容を確認できるドライランモードを必ず実装してください。--dry-run フラグで切り替え、リネーム前後のファイル名一覧を表示するだけの動作にします。本番実行前に必ずドライランで確認する習慣をつけましょう。
GUI リネームツールの活用
コマンドラインに不慣れなユーザーや、視覚的にプレビューしながらリネームしたい場合は、専用の GUI リネームツールが便利です。
macOS:
- A Better Finder Rename: macOS 向けの定番リネームツール。正規表現、EXIF 情報、連番、日付など多彩なリネームルールを組み合わせ可能。プレビュー機能が優秀
- NameChanger: 無料のシンプルなリネームツール。検索・置換、連番追加、拡張子変更に対応
Windows:
- Bulk Rename Utility: Windows 向けの高機能無料ツール。正規表現、連番、日付、EXIF 情報など 14 種類のリネーム操作を組み合わせ可能。UI は複雑だが機能は最強クラス
- Advanced Renamer: 直感的な UI で複数のリネームメソッドを順番に適用できる。バッチリスト機能でリネーム計画を保存・再利用可能
クロスプラットフォーム:
- digiKam: オープンソースの写真管理ソフト。リネーム機能が内蔵されており、EXIF 情報 (日時、カメラ名、レンズ名等) をファイル名に組み込める
- XnView MP: 画像ビューア兼管理ツール。バッチリネーム機能を搭載
GUI ツール選択のポイント:
- プレビュー機能の有無: リネーム結果を事前に確認できるか
- Undo 機能: 誤ったリネームを元に戻せるか
- EXIF 対応: 撮影日時やカメラ情報をファイル名に使えるか
- 正規表現対応: 複雑なパターンマッチングが可能か
- バッチ保存: リネームルールを保存して再利用できるか
リネーム時のトラブル防止と復元方法
一括リネームは便利ですが、誤った操作は取り返しのつかない結果を招くことがあります。トラブルを防止し、万が一の際に復元できる体制を整えましょう。
事前対策:
- 必ずバックアップを取る: リネーム前にフォルダごとコピーするか、Git で管理する。
cp -r images/ images_backup/ - ドライランを実行する: 実際のリネーム前に結果をプレビュー。ExifTool は
-executeなしで確認、rename は-nオプション - 小さなサンプルでテスト: 全ファイルに適用する前に、数枚のコピーでテスト実行
- リネームログを記録する: 変更前後のファイル名対応表を CSV で保存。復元時に必要
よくあるトラブルと対処:
- ファイル名の衝突: 同名ファイルが存在する場合に上書きされる。事前に重複チェックを行い、サフィックスで回避
- 拡張子の消失: 正規表現のミスで拡張子が削除される。ドライランで確認
- 文字化け: 日本語ファイル名を含む場合、エンコーディングの問題が発生。UTF-8 環境で操作する
- 順序の崩れ: ソート順が意図と異なる場合、連番がずれる。
sorted()のキーを明示的に指定
復元方法:
- リネームログ (CSV) がある場合: スクリプトで逆変換を適用
- Git 管理下の場合:
git checkout -- .で元に戻す - バックアップがある場合: バックアップから復元
- 上記いずれもない場合: EXIF の撮影日時から元のファイル名を推測するしかない (完全な復元は困難)
リネームログの記録例 (Python):
import csvlog = []for old, new in renames: log.append({"old": old, "new": new})with open("rename_log.csv", "w") as f: writer = csv.DictWriter(f, fieldnames=["old", "new"]) writer.writeheader() writer.writerows(log)