
UNIX Cafe | 第30回
はじめに:ImageMagickで画像を最適化 | サイトの表示速度を改善する方法
「最近、自分のブログやサイトの表示がなんだか遅い…」
その原因、最適化されていない重い画像にあるかもしれません。
ページの表示速度は、読者の満足度に直結するだけでなく、Googleの検索順位を決めるSEO評価においても極めて重要な要素です。高画質な写真をそのままアップロードしてしまうと、知らず知らずのうちに機会損失を生んでいる可能性があります。
この記事では、そんなWebサイト運営者の共通の悩みを解決するため、MacやLinuxのターミナル(黒い画面)から使える魔法のツール**「ImageMagick」**を使い、フォルダ内の大量の画像を「軽くてキレイ」な最適サイズに一括で軽量化する方法を学んでいきます。
画像軽量化の基本戦略:3つのアプローチ
画像のファイルサイズを小さくするには、主に3つの方法があります。今回は特に1と2を組み合わせて、効果的な軽量化を目指します。
リサイズ(物理的なサイズを小さくする)
スマホやデジカメで撮った写真は、Webで表示するには大きすぎることがほとんどです。ブログの横幅に合わせて適切なサイズ(例: 1200pxなど)に縮小するだけで、ファイルサイズは劇的に小さくなります。
品質調整(圧縮率を調整する)
JPG画像などは、圧縮品質を少し下げることでファイルサイズを削減できます。品質85%程度であれば、人間の目にはほとんど画質の劣化が分からないまま、大幅な軽量化が可能です。
形式変換(より圧縮効率の高いフォーマットへ)
JPGやPNGを、より新しいWeb向けのフォーマットであるWebPに変換する方法です。これも非常に効果的ですが、今回はリサイズと品質調整に焦点を当てます。(WebP変換については第24回の記事で詳しく解説しています)
魔法の画像処理ツール「ImageMagick」
今回も主役は、コマンドラインで画像を自在に操る万能ツール「ImageMagick」です。
macOSへのインストール (Homebrewを利用)
ミナちゃんまだインストールしていない方は、ターミナルを開いてコマンドを一度だけ実行してください。
brew install imagemagickこれで、重い画像をスッキリ軽くするための準備が整いました。
【基本編】1枚の画像をリサイズ&品質調整してみる
まずは、コマンドの基本を理解するために、1枚の画像(input.jpg)を軽量化してみましょう。
目標: 横幅を1200pxにリサイズし、JPG品質を85%に調整して、output.jpgとして保存します。
magick input.jpg -resize 1200x -quality 85 output.jpgコマンドの解説
- -resize 1200x: 横幅を1200pxに指定。xの後の高さを省略すると、縦横比を保ったまま自動で調整してくれます。
- -quality 85: JPGの圧縮品質を85%に設定します。
このコマンドを実行すると、例えば元の画像が3MB(3000KB)だったものが、わずか300KB程度(約1/10)になることも珍しくありません。驚くべき効果ですね。
【応用編】フォルダ内の画像をまとめて軽量化する
ここからがコマンドラインの真骨頂です。フォルダ内にある大量のJPG画像を、forループ(繰り返し処理)を使って一括で軽量化します。
元画像はそのままに、軽量化した画像をoptimized/という新しいフォルダに保存するのが、安全で管理しやすいおすすめの方法です。
# 1. 軽量化した画像を保存する "optimized" フォルダを作成
mkdir -p optimized
# 2. forループで、フォルダ内の全JPG画像を一つずつ処理
for img in *.jpg
do
# 3. magickコマンドでリサイズと品質調整を行い、optimized/ フォルダに保存
echo "Optimizing ${img}..."
magick "$img" -resize 1200x -quality 85 "optimized/$img"
done
echo "✅ All images have been optimized."この数行のコマンドだけで、何十、何百枚の画像があっても、コーヒーを一杯飲んでいる間にすべての軽量化作業が完了します。



これなら、全部の画像を自動で処理してくれるんですね!
【実践編】いつでも使える「画像軽量化スクリプト」
この便利な処理を、いつでも誰でも使える「自分だけの軽量化コマンド(シェルスクリプト)」として保存しておきましょう。
以下の内容を optimize_images.sh のような名前でファイルに保存します。
#!/bin/bash
#
# optimize_images.sh
# 使い方: このスクリプトを画像のあるフォルダに置いて実行すると、
# optimized/ フォルダ内に軽量化された画像が作成されます。
#
# --- 設定項目(ここで幅や品質を自由に変更できます) ---
TARGET_WIDTH=1200
JPG_QUALITY=85
OUTPUT_DIR="optimized"
# ----------------------------------------------------
mkdir -p ${OUTPUT_DIR}
echo "JPG画像を最適化します..."
for img in *.jpg
do
echo " -> ${img}"
magick "$img" -resize ${TARGET_WIDTH}x -quality ${JPG_QUALITY} "${OUTPUT_DIR}/$img"
done
echo "PNG画像を最適化します..."
for img in *.png
do
echo " -> ${img}"
# PNGには-qualityは効果が薄いため、リサイズのみ
magick "$img" -resize ${TARGET_WIDTH}x "${OUTPUT_DIR}/$img"
done
echo "✅ すべての画像の軽量化が完了しました!"スクリプトの使い方
chmod +x optimize_images.sh- 作成したファイルに、以下のコマンドで実行権限を与えます。
- 軽量化したい画像があるフォルダに、このスクリプトファイルを置きます。
- ターミナルでそのフォルダに移動し、スクリプトを実行します。
./optimize_images.shスクリプト上部の設定項目を書き換えるだけで、いつでも好きなサイズ・品質で画像を最適化できる、あなただけの強力なツールの完成です。
PNGや他の形式にも対応できる?
ここまでは主にJPG画像を例に解説してきましたが、もちろんImageMagickはPNGや、スマホでよく使われるHEICなど、様々な画像形式に対応しています。
forループの対象とする拡張子を変えるだけで、どんな形式の画像でも同じように一括処理が可能です。
PNG画像をまとめて軽量化する場合
PNGファイルは、写真よりもイラストやロゴ、スクリーンショットなど、色の境界がはっきりした画像で使われることが多い形式です。
JPGの-qualityオプションはPNGには直接適用されませんが、リサイズだけでもファイルサイズを大幅に削減できます。
PNG画像を横幅1000pxに一括リサイズする例:
# 軽量化したPNG画像を保存する "optimized_png" フォルダを作成
mkdir -p optimized_png
# forループでPNG画像を一枚ずつ処理
for img in *.png
do
echo "Optimizing ${img}..."
magick "$img" -resize 1000x "optimized_png/$img"
done
echo "✅ All PNG images have been optimized."このように、*.jpgだった部分を*.pngに変え、保存先のフォルダ名を分かりやすく変更するだけで、PNGファイル用の軽量化処理が完成します。
【応用】JPGもPNGも、一度に全部まとめて処理したい!
「フォルダの中にJPGもPNGも混在しているから、一度に全部処理したい」
そんな欲張りな願いも、シェルスクリプトなら簡単に叶えられます。
findコマンドとwhileループを組み合わせることで、フォルダ内にある全てのJPGとPNGファイルを探し出し、一括で軽量化処理を行うことができます。
#!/bin/bash
#
# optimize_all_images.sh
# JPGとPNGの両方をまとめて軽量化するスクリプト
#
TARGET_WIDTH=1200
JPG_QUALITY=85
OUTPUT_DIR="optimized"
mkdir -p ${OUTPUT_DIR}
# findコマンドでjpgとpngを探し、whileループで一つずつ処理する
find . -maxdepth 1 \( -iname "*.jpg" -o -iname "*.png" \) | while read img; do
# ./ をファイル名から取り除く
img_name=$(basename "$img")
echo "Processing ${img_name}..."
# 拡張子に応じて処理を分ける
if [[ "$img_name" == *.jpg || "$img_name" == *.jpeg ]]; then
magick "$img_name" -resize ${TARGET_WIDTH}x -quality ${JPG_QUALITY} "${OUTPUT_DIR}/$img_name"
elif [[ "$img_name" == *.png ]]; then
magick "$img_name" -resize ${TARGET_WIDTH}x "${OUTPUT_DIR}/$img_name"
fi
done
echo "✅ すべての画像の最適化が完了しました!"このスクリプトを実行すれば、あなたはもうファイル形式を気にする必要はありません。ImageMagickとシェルの連携が、すべてを自動で判断し、最適化してくれます。
このように、基本のコマンドを一度覚えてしまえば、あとは応用次第でどんな状況にも対応できるのが、コマンドラインの面白さであり、強力な点なのです。



これならどんな形式でも応用できますね!
さらに軽くしたいときは?
リサイズと品質調整だけでも画像は十分に軽くなりますが、最高のパフォーマンスを求めるなら、もう一歩先へ進んでみましょう。
それは、画像を次世代フォーマット「WebP(ウェッピー)」に変換することです。
WebPは、JPGやPNGよりもさらに高い圧縮率を誇り、画質をほとんど劣化させることなく、ファイルサイズを劇的に削減できます。ページの表示速度を極限まで高めたい場合、このWebPへの変換は非常に強力な一手となります。
詳しい手順やコマンドについては、こちらの記事で詳しく解説しています。リサイズした画像を、さらにWebPに変換して、最強の軽量画像を目指してみませんか?


まとめ:画像の軽量化を習慣にして、快適なサイトを作ろう
最後に、今回の重要なポイントをまとめます。
- Webサイトの表示速度にとって、**画像の軽量化(最適化)**は必須のSEO対策。
- ImageMagickを使えば、「リサイズ」と「品質調整」をコマンドで一括処理できる。
- forループと組み合わせることで、フォルダ内の大量の画像を自動で軽量化可能。
- 一連の処理をシェルスクリプトにしておけば、いつでもワンタッチで最高のパフォーマンスを発揮できる画像を用意できる。
画像の最適化は、読者のため、そしてあなた自身のサイトの評価のために、今すぐ始められる最も効果的な施策の一つです。ぜひこの自動化のテクニックを身につけ、快適なWebサイト運営を実現してください。



この流れをつかめば、どんなサイトの画像もスッと軽くできますよ。
次回予告



次回は“撮影日で自動分類!”をやってみよう。
EXIFデータを使って、写真を日付ごとに仕分けるんだ。



旅行写真を整理するのにぴったりですね!楽しみです♪
さらに学びたいあなたへ
📘 用途ごとに選ぶ Linux のおすすめ本











