背景 #
Hugoでブログを運用する際、iPhoneで撮影した写真をそのまま使うと1枚数MBもあり、Gitリポジトリがすぐに肥大化してしまいます。 そこで、次世代画像フォーマットの WebP に変換して、画質を維持しつつファイルサイズを軽量化する方法を試しました。
ImageMagickのインストール #
Mac環境なら Homebrew を使って簡単にインストールできます。
# MacにImageMagickをインストール
brew install imagemagick画像の変換とリサイズ #
iPhoneの標準形式である .HEIC から、Web表示に最適な .webp へ変換します。ブログ記事の幅に合わせて横幅をリサイズし、圧縮率を指定しておきます。
# 横幅1200px、画質75%のWebPに変換
magick <変換前>.HEIC -resize 1200x -quality 75 <変換後>.webpフォルダ内の画像を一括変換する場合 #
複数の画像をまとめて処理したいときは、以下のコマンドが便利です。
# 変換したいフォルダに移動し、変換コマンド実行する
cd testfolder
magick mogrify -format webp -resize 1200x -quality 75 *.HEIC変換テストの結果 #
実際にiPhoneで撮影した写真(HHKB)で試してみた結果がこちらです。

| 比較項目 | 内容 | ファイルサイズ |
|---|---|---|
| 変換前 | iPhone原寸 (HEIC) | 4.2 MB |
| 変換後 | WebP (1200px / q75) | 171 KB |
まとめ #
ファイルサイズを 約96%削減 することができました。 表示速度も改善され、GitHubなどのリポジトリ容量を圧迫する心配もなくなります。若干面倒ではありますが、コツコツやっていこうかと思います。ショートカットとかでドラッグ&ドロップで変換できるようにした方が楽かしら。
後日追記 #
20260526 #
毎回、ターミナル叩くのも面倒なので、シェルスクリプト化しました。 pngをwebpに変換して、featured.webpにリネームさせています。 記事のサムネイル作成用で使っています。
手作業でチマチマやらなくて良くなりました。
#!/bin/bash
# --- 設定エリア(必要に応じて変更)---
# 記事のベースディレクトリ
BASE_CONTENT_DIR="content/posts"
# 画像処理設定
WEBP_QUALITY=75
WEBP_RESIZE="1200x"
# 最終的なWebPのファイル名
FINAL_WEBP_NAME="featured.webp"
# -------------------------------------
# 1. 引数チェック
if [ -z "$1" ]; then
echo "エラー: フォルダ名(記事のID)を指定してください。"
echo "使い方: ./convert_png_to_featured_webp.sh <フォルダ名>"
echo "例: ./convert_png_to_featured_webp.sh hugo-blowfish-giscus"
exit 1
fi
FOLDER_NAME=$1
TARGET_DIR="${BASE_CONTENT_DIR}/${FOLDER_NAME}"
# 2. ターゲットディレクトリの存在確認
if [ ! -d "$TARGET_DIR" ]; then
echo "エラー: 指定されたディレクトリが存在しません: ${TARGET_DIR}"
exit 1
fi
# 3. 必要なコマンドの確認 (ImageMagick)
if ! command -v magick &> /dev/null; then
echo "エラー: 'ImageMagick (magick)' コマンドが見つかりません。インストールしてください。"
exit 1
fi
# --- 処理開始 ---
# 4. 指定されたフォルダへ移動 (cd 引数のフォルダ)
echo "ディレクトリへ移動します: ${TARGET_DIR}"
cd "${TARGET_DIR}" || { echo "エラー: ディレクトリの移動に失敗しました。"; exit 1; }
# 5. PNGファイルの存在確認(PNGがなければ何もしない)
PNG_FILES=$(ls *.png 2> /dev/null)
if [ -z "$PNG_FILES" ]; then
echo "フォルダ内にPNGファイルが見つかりません。処理をスキップします。"
exit 0
fi
echo "画像変換を開始します..."
# 6. PNGをWebPに変換、リサイズ、品質設定 (magick mogrify -format webp ...)
# 要件: 1200x リサイズ, 品質 75
magick mogrify -format webp -resize "${WEBP_RESIZE}" -quality "${WEBP_QUALITY}" *.png
if [ $? -ne 0 ]; then
echo "エラー: 画像の変換(magick mogrify)に失敗しました。"
exit 1
fi
echo "変換が完了しました。"
# 7. 生成されたWebPのファイル名を featured.webp にリネーム
# 注意: 複数のPNGから複数のWebPができた場合、どのファイルがリネームされるかはlsの順序に依存します。
# Featured Image用として1つだけを残す
# 最初にlsでWebPファイルを取得(変換後のため存在確認は不要)
WEBP_FILES=$(ls *.webp 2> /dev/null)
FIRST_WEBP_FILE=$(echo "${WEBP_FILES}" | head -n 1)
if [ -n "$FIRST_WEBP_FILE" ] && [ "$FIRST_WEBP_FILE" != "${FINAL_WEBP_NAME}" ]; then
echo "ファイルをリネームします: ${FIRST_WEBP_FILE} -> ${FINAL_WEBP_NAME}"
mv "${FIRST_WEBP_FILE}" "${FINAL_WEBP_NAME}"
if [ $? -ne 0 ]; then
echo "エラー: ファイルのリネームに失敗しました。"
# リネームに失敗した場合、安全のため元のPNGは削除せずに終了します。
exit 1
fi
else
echo "リネームは不要、または完了しています。"
fi
# 8. 元のPNGファイルを削除する (rm *.png)
echo "元のPNGファイルを削除します..."
rm *.png
if [ $? -eq 0 ]; then
echo "成功: すべての処理が完了しました。"
echo "作成されたファイル: ${TARGET_DIR}/${FINAL_WEBP_NAME}"
else
echo "エラー: PNGファイルの削除に失敗しました。"
exit 1
ficontvert_png_to_featured_webp.sh みたいな形で保存し、 以下のように実行します。
# 実行権限を付与
chmod +x contvert_png_to_featured_webp.sh
# 実行するときは下記で
./contvert_png_to_featured_webp.sh [実行するフォルダ]20260530 #
スマホスクショ用にwebpファイルを横500pxに変換 #
iPhoneのスクショを本ブログに貼ろうとしたのですが、サイズが大きすぎたので以下のコマンドでサイズ変換してみました。
cd [変換するフォルダ]
magick mogrify -resize 500x *.webpまだ大きい気がするので様子みようかと思います。