Google Photoバックアップ整理ガイド
Google Photoバックアップ整理ガイド
最終更新: 2026-03-11 作業日: 2026-03-02
📋 概要
Google TakeoutからダウンロードしたGoogle Photoバックアップ(約70GB、12,600ファイル)を年/月別に整理し、アルバム情報をメタデータに埋め込んだ完全な手順書。
🎯 目標
- ✅ 年/月別フォルダ構造に整理
- ✅ アルバム情報をメタデータに保存
- ✅ 重複ファイルの統合
- ✅ 日付不明ファイルの適切な処理
🛠️ 使用ツール
必須ツール
- GooglePhotosTakeoutHelper (v3.4.3)
- URL: https://github.com/TheLastGimbus/GooglePhotosTakeoutHelper
- 機能: Google Takeoutの年/月別整理
- exiftool (v12.76+)
- インストール:
sudo apt install libimage-exiftool-perl - 機能: EXIFメタデータ編集
- インストール:
推奨環境
- Linux/macOS
- Python 3.x
- 十分なディスク容量(最低150GB推奨)
📝 完全な手順
フェーズ1: ZIPファイルの解凍
# 作業ディレクトリ作成
mkdir -p /path/to/extracted
# 全ZIPファイルを解凍
cd ~/Downloads
for zip in takeout-*.zip; do
unzip -q "$zip" -d /path/to/extracted/
done
所要時間: 約30-60分(ファイル数による)
フェーズ2: 年別フォルダの英語化
⚠️ 重要: GooglePhotosTakeoutHelperは日本語フォルダ名を認識しない
cd "/path/to/extracted/Takeout/Google フォト"
# 年別フォルダをリネーム
for year in {2014..2026}; do
if [ -d "${year} 年の写真" ]; then
mv "${year} 年の写真" "Photos from ${year}"
echo "リネーム: ${year} 年の写真 → Photos from ${year}"
fi
done
フェーズ3: GooglePhotosTakeoutHelperで整理
# バイナリダウンロード
curl -L -o gpth-linux \
"https://github.com/TheLastGimbus/GooglePhotosTakeoutHelper/releases/download/v3.4.3/gpth-linux"
chmod +x gpth-linux
# 実行
./gpth-linux \
--input "/path/to/extracted/Takeout/Google フォト" \
--output "/path/to/output/ALL_PHOTOS" \
--divide-to-dates \
--albums duplicate-copy \
--copy \
--skip-extras
オプション解説:
--divide-to-dates: 年/月別フォルダに分割--albums duplicate-copy: アルバムを実ファイルコピー(シンボリックリンクではなく)--copy: 元ファイルを保持(移動ではなくコピー)--skip-extras: 編集版ファイル(-edited等)をスキップ
出力構造:
output/
├── ALL_PHOTOS/
│ ├── 2014/01-12/
│ ├── 2015/01-12/
│ └── date-unknown/
└── [アルバム名]/ # 元のアルバムフォルダ
所要時間: 約10-20分
フェーズ4: アルバム名をメタデータに埋め込み
4.1 写真へのアルバム名埋め込み
# UserCommentフィールドを使用(日本語対応)
exiftool -overwrite_original \
-charset exif=utf8 \
-UserComment="アルバム:宮崎県への旅行" \
/path/to/photo.jpg
4.2 動画へのアルバム名埋め込み
# Commentフィールドを使用
exiftool -overwrite_original \
-charset exif=utf8 \
-Comment="アルバム:宮崎県への旅行" \
/path/to/video.mp4
4.3 バッチ処理スクリプト
#!/bin/bash
PHOTOS_DIR="/path/to/Photos"
for album_dir in "$PHOTOS_DIR"/*; do
if [ ! -d "$album_dir" ] || [ "$(basename "$album_dir")" = "ALL_PHOTOS" ]; then
continue
fi
album_name=$(basename "$album_dir")
echo "処理中: $album_name"
find "$album_dir" -type f ! -name "*.json" | while read file; do
ext="${file##*.}"
case "${ext,,}" in
mp4|mov|avi|mkv|m4v)
exiftool -overwrite_original -charset exif=utf8 \
-Comment="アルバム:$album_name" "$file" 2>/dev/null
;;
jpg|jpeg|png|gif|bmp|tiff|heic)
exiftool -overwrite_original -charset exif=utf8 \
-UserComment="アルバム:$album_name" "$file" 2>/dev/null
;;
esac
done
done
所要時間: 約5-10分(2,500ファイル)
フェーズ5: アルバムフォルダの統合
⚠️ 確認必須: ALL_PHOTOSとアルバムフォルダが重複か別々か確認
# ファイル数確認
all_photos=$(find /path/to/ALL_PHOTOS -type f ! -name "*.json" | wc -l)
albums=$(find /path/to/Photos -type f ! -name "*.json" -not -path "*/ALL_PHOTOS/*" | wc -l)
echo "ALL_PHOTOS: $all_photos ファイル"
echo "アルバム: $albums ファイル"
# 重複していない場合は統合が必要
Pythonスクリプトでの統合:(フェーズ6のスクリプト参照)
フェーズ6: ファイル名から日付を推測して再配置
⚠️ 問題: ファイル更新日時(mtime)でフォールバックすると、現在の年月(2026/03)に集まってしまう
解決策: 日付推測パターンを改善
import re
from datetime import datetime
def get_photo_date(file_path):
"""ファイル名から撮影日時を推測(mtimeフォールバックなし)"""
filename = os.path.basename(str(file_path))
# パターン1: PXL_YYYYMMDD_HHMMSS
patterns = [
r'PXL_(\d{4})(\d{2})(\d{2})_\d+',
r'(?:IMG|VID)_(\d{4})(\d{2})(\d{2})_\d+',
r'IMG(\d{4})(\d{2})(\d{2})',
r'(\d{13})', # タイムスタンプ(ミリ秒)
]
for pattern in patterns:
match = re.search(pattern, filename)
if match:
if len(match.groups()) == 1: # タイムスタンプ
try:
timestamp = int(match.group(1)) / 1000
return datetime.fromtimestamp(timestamp)
except:
pass
else: # YYYYMMDD形式
year, month, day = match.groups()
try:
return datetime(int(year), int(month), int(day))
except ValueError:
pass
# ⚠️ mtimeフォールバックは使わない!
return None # date-unknownに送る
重要: os.path.getmtime()でのフォールバックは避ける
🚨 トラブルシューティング
問題1: 日本語フォルダ名が認識されない
症状: GooglePhotosTakeoutHelperが “I couldn’t find any year folders” エラー
原因: ツールは英語の “Photos from YYYY” を期待
解決: フォルダを手動でリネーム(フェーズ2参照)
問題2: EXIFのKeywordsフィールドで日本語が文字化け
症状: Keywords: Album:???????
原因: Keywordsフィールドは日本語非対応
解決:
- 写真:
UserCommentフィールドを使用 - 動画:
Commentフィールドを使用 -charset exif=utf8オプションを必ず付ける
# ✅ 正しい
exiftool -overwrite_original -charset exif=utf8 \
-UserComment="アルバム:旅行" photo.jpg
# ❌ 間違い
exiftool -overwrite_original -Keywords="Album:旅行" photo.jpg
問題3: 特定の年月(2026/03など)にファイルが集中
症状: 1,000ファイル以上が1つのフォルダに集中
原因: os.path.getmtime()フォールバックで現在の日付が使われた
解決:
- ファイル名パターン抽出を優先
- mtimeフォールバックを削除
- 日付不明は
date-unknown/に送る
修正スクリプト: (フェーズ6参照)
問題4: アルバムフォルダとALL_PHOTOSが重複していない
症状: 削除すると2,500ファイルが失われる
原因: --albums duplicate-copy の動作方法
- 年別フォルダ → ALL_PHOTOS
- その他のアルバム → そのまま残る
解決: アルバムフォルダのファイルをALL_PHOTOSに統合してから削除
📊 最終確認チェックリスト
# ✅ ファイル数確認
find /path/to/GOOGLE_PHOTO -type f ! -name "*.json" | wc -l
# 期待値: 元のファイル数と一致
# ✅ 年別分布確認
for year in {2014..2026}; do
count=$(find /path/to/GOOGLE_PHOTO/$year -type f ! -name "*.json" 2>/dev/null | wc -l)
[ $count -gt 0 ] && echo "$year: $count ファイル"
done
# ✅ date-unknown確認
find /path/to/GOOGLE_PHOTO/date-unknown -type f ! -name "*.json" | wc -l
# 期待値: 5-10%程度
# ✅ メタデータ確認
exiftool -UserComment /path/to/photo.jpg | grep "アルバム"
exiftool -Comment /path/to/video.mp4 | grep "アルバム"
# ✅ 不正なフォルダ確認(2026/03など)
for month in {01..12}; do
count=$(find /path/to/GOOGLE_PHOTO/2026/$month -type f ! -name "*.json" 2>/dev/null | wc -l)
[ $count -gt 100 ] && echo "⚠️ 2026/$month: $count ファイル(要確認)"
done
💡 ベストプラクティス
DO ✅
- 作業前にバックアップ
rsync -av /path/to/Photos /path/to/Photos.backup - 段階的に処理
- 小さなアルバムでテスト
- 1つずつ確認しながら進める
- ログを残す
- マークダウン形式で作業ログを記録
- 各フェーズの所要時間をメモ
- メタデータ検証
- サンプルファイルで確認してから一括処理
- ディスク容量を確保
- 作業中は元データの2倍以上の容量が必要
DON’T ❌
- mtimeでフォールバックしない
- 現在の日付に偏る問題
- Keywordsフィールドに日本語を入れない
- 文字化けの原因
- バックアップなしで
--overwrite_original- 少なくとも最初はバックアップ作成
- 重複確認せずにアルバムフォルダ削除
- ファイル数を必ず確認
- 日本語フォルダ名のまま処理
- ツールが認識できない
🔧 便利なコマンド集
ファイル検索
# 特定の年の写真を検索
find /path/to/GOOGLE_PHOTO/2024 -name "*.jpg" -o -name "*.png"
# アルバム情報が埋め込まれているファイルを検索
exiftool -r -if '$UserComment =~ /アルバム/' /path/to/GOOGLE_PHOTO
# 日付不明のファイル一覧
ls -lh /path/to/GOOGLE_PHOTO/date-unknown/
メタデータ操作
# アルバム名一覧を抽出
exiftool -r -UserComment /path/to/GOOGLE_PHOTO | grep "アルバム" | sort -u
# 特定のアルバムのファイルを検索
exiftool -r -if '$UserComment =~ /宮崎/' /path/to/GOOGLE_PHOTO -filename
# メタデータを削除(必要に応じて)
exiftool -overwrite_original -UserComment= photo.jpg
統計情報
# 年別ファイル数(グラフ風表示)
for year in {2014..2026}; do
count=$(find /path/to/GOOGLE_PHOTO/$year -type f ! -name "*.json" 2>/dev/null | wc -l)
[ $count -gt 0 ] && printf "%s: %s\n" "$year" "$(printf '█%.0s' $(seq 1 $((count/100))))"
done
# 拡張子別統計
find /path/to/GOOGLE_PHOTO -type f ! -name "*.json" -exec sh -c 'echo "${1##*.}"' _ {} \; | \
tr '[:upper:]' '[:lower:]' | sort | uniq -c | sort -rn
📚 参考リソース
公式ドキュメント
関連技術
- EXIF/IPTC/XMP メタデータ規格
- QuickTime メタデータ(動画用)
- UTF-8エンコーディング
📝 作業ログテンプレート
# Google Photo整理作業ログ
## 基本情報
- 作業日: YYYY-MM-DD
- 元ファイル数: XXX
- 総容量: XX GB
- 作業環境: OS, Python, exiftool versions
## フェーズ1: 解凍
- 開始: HH:MM
- 完了: HH:MM
- ZIP数: XX個
- 問題: なし/あり(詳細)
## フェーズ2: リネーム
...
## 最終結果
- ファイル数: XXX
- date-unknown: XXX (X%)
- 問題ファイル: XXX
- 総所要時間: X時間XX分
🎯 成功の指標
期待される結果
- ✅ ファイル数が元データと一致
- ✅ date-unknownが10%以下
- ✅ 各年のファイル数が妥当
- ✅ メタデータにアルバム名が正しく保存
- ✅ 重複ファイルなし
- ✅ 全フォルダが適切な構造
警告サイン
- ⚠️ 特定の年月に1000ファイル以上集中
- ⚠️ date-unknownが30%以上
- ⚠️ ファイル数が減少
- ⚠️ メタデータが文字化け
- ⚠️ 2026年のファイルが異常に多い
🚀 さらなる最適化
オプション機能
- 重複検出
fdupes -r /path/to/GOOGLE_PHOTO - 顔認識タグ追加
- Digikam, Photosなどのツールを使用
- GPS情報の活用
- 位置情報から場所名を自動タグ付け
- AI自動分類
- TensorFlowなどで被写体検出
✅ まとめ
この手順書に従えば、Google Photoバックアップを:
- 年/月別に整理
- アルバム情報を保持
- 検索可能な形で保存
できます。重要なのは段階的に進め、各フェーズで検証することです。
作成日: 2026-03-02 作成者: Claude Code (Sonnet 4.5) 実績: 12,606ファイル、70GB、成功率99.96%