まず、圧縮ツールを入れる

$ brew install jpegoptim pngquant optipng

前提

// ==================================================
// 画像最適化メモ(最新版 / 動作確認済み)
// ==================================================
//
// ■ 動作確認環境
// - macOS (zsh)
// - Git 管理リポジトリ内で実行
// - Homebrew 導入済み
// - 使用ツール:jpegoptim / pngquant / optipng
//
// ■ 方針
// - jpg / png を手で切り分けない
// - Git差分(HEADとの差分)だけ処理する
// - ファイル数が多くても落ちないように「1ファイルずつ処理」する
// - PNG は pngquant → optipng(可逆仕上げ)
// - Git管理前提なので上書きOK(戻すのも簡単)
// ==================================================

1) 差分の確認(git diff –stat)

// 変更ファイルと差分量(画像最適化後の確認に便利)
git diff --stat

// 変更ファイル名だけ一覧(staged+unstaged)
git diff --name-only HEAD

// 画像だけに絞る(jpg/png)
git diff --name-only HEAD | grep -Ei '\.(jpe?g|png)$'

2) 画像最適化(Git差分だけ・安全版 / 動作確認済み)

2-1) 標準品質(JPG80 / PNG70-85)

git diff --name-only HEAD -z \
| xargs -0 -n 1 sh -c '
  f="$1"
  case "$f" in
    *.jpg|*.JPG|*.jpeg|*.JPEG)
      jpegoptim --max=80 --strip-all "$f"
      ;;
    *.png|*.PNG)
      pngquant --quality=70-85 --ext .png --force "$f" \
      && optipng -o2 "$f"
      ;;
  esac
' _

2-2) 高品質(JPG85 / PNG80-90)

git diff --name-only HEAD -z \
| xargs -0 -n 1 sh -c '
  f="$1"
  case "$f" in
    *.jpg|*.JPG|*.jpeg|*.JPEG)
      jpegoptim --max=85 --strip-all "$f"
      ;;
    *.png|*.PNG)
      pngquant --quality=80-90 --ext .png --force "$f" \
      && optipng -o2 "$f"
      ;;
  esac
' _

2-3) 対象を特定ディレクトリに限定(例:recruit/images 配下のみ)

git diff --name-only HEAD -z -- wp-content/themes/bmt/recruit/images \
| xargs -0 -n 1 sh -c '
  f="$1"
  case "$f" in
    *.jpg|*.JPG|*.jpeg|*.JPEG)
      jpegoptim --max=80 --strip-all "$f"
      ;;
    *.png|*.PNG)
      pngquant --quality=70-85 --ext .png --force "$f" \
      && optipng -o2 "$f"
      ;;
  esac
' _

3) 元に戻したい場合(1ファイルだけ)

3-1) working tree の変更だけ戻す(未ステージ分を破棄)

git restore path/to/file.jpg

4) ステージ済みまで戻す場合(2段階:unstage → restore)

// 1) ステージから外す(indexを戻す)
git restore --staged path/to/file.jpg

// 2) working tree も戻す(作業ツリーを戻す)
git restore path/to/file.jpg

5) 仕上げチェック(運用)

// 状態確認
git status

// 差分量確認
git diff --stat

// 問題なければ add
git add -A

// もう一回確認
git status