Squoosh CLIを使って画像圧縮を自動化する

Webに画像を貼り付ける場合、スマホなどで撮影した画像はデータサイズが大きすぎて表示されるまでに時間がかかるため、画像を縮小してデータサイズを減らし表示速度を早くする必要があります。この画像縮小ツールは数多ありますが、圧縮率・GUIの使いやすさの点でSquooshを利用しています。

しかし、ブラウザ上で動作するSquooshは1枚ずつしか変換できない上に、画像を開く度にパラメータがリセットされてしまうため、複数の画像ファイルを一括変換する場合は効率が悪いです。

これを解決する手段としてコマンドライン版Squoosh(Squoosh CLI)を使う方法がありますが、インストールと自動化に難儀したのでメモしておきます。

下記手順はMacOS上で動作確認をしています。Windowsの場合はImageMatickをインストーラを使ってインストールし、さらにgitをインストールしたときに一緒にインストールされるgit-bashから起動すればサンプルプログラムが動作すると思います(未確認)。

Squoosh CLIとImageMagickのインストール(Mac OS 12.5で確認)

node.jsをインストールする

下記サイトよりnode.jsのLTS版のインストーラをダウンロードしてインストールする。
https://nodejs.org/ja/download/

インストール後に ‘node -v’コマンドを実行して、目的のバージョンのnode/npmコマンドが正しく動作することを確認しましょう。node.jsのバージョンが期待したものと違うとsquoosh-cliが正しく動作しない場合があります。

# node -v

v16.16.0

$ npm -v

8.11.0

(*)2022.8.6時点でのLTS版はv16.16.0で、このバージョンで動作することを確認しています。最新版の18.7.0ではsquoosh-cliはコマンド実行中にエラーとなり動作しないことを確認しているため、このバージョンは使用してはいけません。

squoosh-cli のインストール

下記コマンドを実行し、squoosh-cliをインストールする。

$ sudo npm i -g @squoosh/cli

インストールが完了したら、下記コマンドを実行してsquoosh-cliが正しく実行できることを確認すること。

$ squoosh-cli -h

Usage: squoosh-cli [options] <files...>

Options:
  ...

ImageMagickのインストール

下記コマンドを実行してインストールする。

$ brew install imagemagick

ブラウザ上でsquooshで変換する場合は縦画像は縦画像として表示されそれを変換しますが、squoosh-cliで変換するとExifの回転情報は参照しないためか横向きの画像になってしまいます。正しい方向で表示されるようにはImageMagickを使用してExif情報を読み取り、変換前に画像を回転させる必要があります。

これで自動化に必要なソフトはインストール完了です。

変換用スクリプトサンプル

下記はExifのrotation情報を参照して画像を回転させたのち、800×800のサイズに収まるように画像ファイルをjpegファイルへ変換するスクリプトのサンプルです。

#!/bin/zsh

export PATH=$HOME/.nodebrew/current/bin:$PATH
export PATH=/opt/homebrew/bin:/opt/homebrew/opt/coreutils/libexec/gnubin:$PATH
export PATH=/opt/homebrew/Cellar/imagemagick/7.1.0-45/bin:$PATH

for file in "$@"
do
	#Fullパスへ変換
	file_fullpath=`ls $file(:a)`

	#変換ファイル出力先
#	output_directory=$(dirname "$file_fullpath") #出力先を変換元ファイルと同じフォルダにする場合
	output_directory=${HOME}/Downloads #出力先を固定する場合

	#変換ファイルSuffix
	suffix="_resize"

	#変換ファイルサイズ
	max_dimension=800

	filename_extention=$(basename "$file_fullpath")
	filename="${filename_extention%.*}"
	extention="${file##*.}"

	#file_rotate="${output_directory}/${filename}_rotate.${extention}"
	file_rotate="/tmp/${filename}_rotate.${extention}"
	file_squoosh="${output_directory}/${filename}_rotate_squoosh.${extention}"
	file_output="${output_directory}/${filename}${suffix}.${extention}"

	orientation=`identify -format "%[EXIF:orientation]" $file_fullpath`
	case $orientation in
		8) rotate=270;;
		3) rotate=180;;
		6) rotate=90;;
		*) rotate=0;;
	esac
	convert $file_fullpath -rotate +$rotate $file_rotate

	width=`identify -format "%[width]" $file_rotate`
	height=`identify -format "%[height]" $file_rotate`
	param_resize="{enable:true,"
	if [ $width -gt $height ]; then
		param_resize+="width"
		if [ $max_dimension -gt $width ]; then
			max_dimension=$width
		fi
	else
		param_resize+="height"
		if [ $max_dimension -gt $height ]; then
			max_dimension=$height
		fi
	fi
	param_resize+=":${max_dimension}}"
	squoosh-cli --mozjpeg '{}' --resize ${param_resize} -s "_squoosh" -d "${output_directory}" "$file_rotate"
	mv $file_squoosh $file_output 
	rm $file_rotate

	/usr/bin/osascript -e 'display notification "'"${filename_extention//\"/\\\"}"'" with title "Squoooshで圧縮しました"'
done

至高の酢豚

調理道具

  • ボウル大(肉を馴染ませる)
  • ボウル小(合わせ調味料を混ぜる)
  • フライパン中(豚肉を炒める)

材料(6人分)

  • 豚ロース     550−600g ※とんかつ用の厚手のものを使うこと
  • 卵        2個
  • 塩        小さじ1/2
  • コショウ     適量
  • 片栗粉(肉の衣用)大さじ10(100cc)
  • 油        大さじ6
  • ニンジン     1本(200g)
  • タマネギ     1個(240g)
  • ピーマン     6-8個(240g)
  • ニンニク     2片(10g)

【合わせダレ】

  • ケチャップ   大さじ10(100cc)
  • しょうゆ    大さじ1
  • 酢       大さじ1と1/2
  • 創味シャンタン 小さじ2 ※もしくは鶏ガラスープ大さじ2
  • 砂糖      大さじ2
  • 水       大さじ6(90cc)
  • 片栗粉     小さじ2

下準備

【具材】

  • 玉ねぎを2つに割って手で剥がし、長辺が5cm程度の三角形になるように乱切りにする
  • 人参を縦に半分に割って、斜めに厚さ5mmに切る
  • ヘタを押してピーマンの種とわたをとり4当分に切る
  • ニンニクを粗微塵にする

【肉】

  • 豚肉を一口大に切ってボウルに入れる
  • ボウルに入れて、卵2個、塩小さじ1/2、黒コショウ適量、片栗粉大さじ10を加えて混ぜる

【合わせダレ】

  • 合わせダレの材料をボウル小に入れて混ぜる

調理

【豚肉を炒める】

  1. フライパンに油大さじ6を入れて中火で温める
  2. 豚肉をフライパンに入れ焼き目を入れる
  3. キッチンペーパーに移す

【野菜を炒める】

  1. 豚肉を炒めたフライパンににんじんを入れて、中火で両面を炒める
  2. 玉ねぎを入れて、少し透き通るまで炒める
  3. ピーマンを入れて、少しテカリがでてしなるまで炒める
  4. ニンニクを入れて、香りが立つまで炒める

【酢豚にする】

  1. 合わせ調味料をボウルで一旦混ぜて、フライパンに入れる
  2. 肉を入れる
  3. ケチャップの酸味を少し飛ばして盛り付ける

メモ

  • パイナップルを入れるか、リンゴジャムを合わせるとより美味しくなります

参考レシピ

とうもろこしの茹で方

調理道具

  • フライパン大

材料(3-5本分)

  • とうもろこし 3-5本
  • 水      200cc
  • 塩      小さじ1/2

下準備

  • とうもろこしの皮を剥ぐ

調理

  1. フライパンに水、塩、とうもろこしを入れる
  2. 強火で着火し、水が沸騰するまで待つ
  3. 沸騰したら弱火にして5分茹でる
  4. ひっくり返して2分茹でる
    ※茹で上がっているところとそうでないところで色が違うので、ここを見て正確に反転させる
  5. ザルにあげて食べる

メモ

  • お湯に浸したまま放置するとシワシワになって固くなるため、必ずザルにあげること
  • 熱いうちにラップで包むとシワシワにならないです

至高のビビンバ

調理道具

  • フライパン大(ナムル、キムチを炒める)
  • 丸底フライパン(肉を焼く、ビビンバを焼く)
  • ボウル大中小

材料(3人分)

ご飯と卵

  • ご飯 800g(4合)
  • 卵  4個

ナムル

  • 豆もやし 250g(一袋) ※なければ普通のもやしでも可
  • ニラ   1束(100g)
  • にんじん 120g(2/3本)
  • にんにく 2片
  • キムチ  240g
  • サラダ油 少量(野菜を炒める時に使う)
  • ごま油  大さじ2
  • 味の素  12振り

  • 合い挽き肉 320g
  • 醤油    大さじ4
  • みりん   大さじ4
  • 酒     大さじ4
  • 砂糖    大さじ3
  • 黒胡椒   適量

タレ

  • コチュジャン  大さじ4
  • 砂糖      大さじ1.5
  • 酢       大さじ1.5
  • おろしにんにく 1片小さめ分

下準備

【野菜とご飯】

  • ニラを洗ってを3cmの長さに切る
  • もやしをザルで洗って手で短く折っておく
  • 人参を千切りにする
  • キムチを3cm四方程度の大きさに切る(入れ物の中でハサミで切るといい)
  • ご飯を温めておく
  • 卵を黄身と白身に分けておく

【タレ】

  • 小皿にコチュジャン大さじ4、砂糖大さじ1.5、酢大さじ1.3、小さめのニンニク1片をすりおろして混ぜる

調理

【ナムルを作る】

  1. フライパン大に油大さじ1.5を引いて温める
  2. にんじんを入れて、しなっとするまで炒める
  3. もやしを入れて、しなっとするまで炒める
  4. 火を止めてニラを予熱で炒める
  5. ボウル大に移して、ごま油大さじ2、味の素12振り(4つまみくらい)を入れて混ぜる

【キムチ】

  1. フライパン大にごま油を入れる
  2. 水分が飛ぶ程度にキムチを炒める

【肉】

  1. 丸底フライパンを温める
  2. 合い挽き肉をフライパンに入れて、焼き目が着くまで炒めて火を止める
  3. 醤油大さじ4、みりん大さじ4、酒大さじ4、砂糖大さじ1.5を入れる
  4. 味の素12振り、黒胡椒を適量入れる
  5. おろしニンニク2掛けをすりおろしを入れる
  6. 火をつけてタレが煮詰まるまで炒める

【ご飯】

  1. 丸底フライパンにゴマ油大さじ2を入れて温める
  2. ご飯を入れて軽く炒める。
  3. 卵の白身4個を入れて混ぜ、フライパンの底にご飯を貼り付ける
  4. ご飯の上に、ナムル->肉の順に乗せる
  5. 肉を囲むようにキムチを乗せる
  6. 黄身を肉の上に乗せる

【食べる】

  1. ご飯に焦げ目がついたら火を止めて混ぜる
  2. 皿に取り分けて、お好みの量のタレをかける(味が濃いので量は調整する)

メモ

  • 食感の点で、もやしは豆もやしが良さそうです

参考レシピ

Synology NASでL2TP VPNサーバーを設定する

Synology NASをバックアップするにあたり、FreeFileSyncを使ってSMB経由でミラーリングバックアップしています。SMB経由であればローカルドライブと同様にFreeFileSyncを使えるので、簡単にミラーリングバックアップができ、大変重宝しています。

一方、地震や火災などに備えて実家においてあるHDDにバックアップする場合、家庭内LANにVPNでSMBでアクセスできるようにしないとFreeFileSyncでバックアップすることはできません。

このVPNサーバーをSynology NASに設置したところ設定に引っかかるところがあり、原因を探るのに時間がかかったので、再度同じことをしないように全体の設定をメモしておきます。

Synology NASにVPNサーバーを立てる

  1. DiskStationで’VPN Server’をインストールする
  1. VPN Serverの’L2TP/IPSec’の項目を以下のように設定する
  1. VPN Serverの’特権’で接続時に使用するアカウントにチェックを入れる

ルーターのポートフォワーディングを設定する

Global IPを割り当てているルーターに対し、下記のようにルーターのポートフォワードを設定する。フォワード先のIPアドレスはLAN内に置いたSynology NASのIPアドレスを設定すること。

VPNクライアントを設定する

Windows

  1. Windowsの’設定’から’ネットワークとインターネット>VPN>VPN接続を追加する’を選択する
  1. 下記のように設定する。’サーバー名またはアドレス’欄にはルーターのWAN側に当てられているFQDNドメインかIPアドレスを設定する。事前共有キーはSynology側で設定したものと同じものを入力すること

  1. LAN内にあるVPNサーバーに接続できるようにレジストリを追加する。

    デフォルトのWindows設定ではLAN内にあるVPNサーバーにアクセスできないようになっています。この制限を解除するには、レジストリエディタで下記パス’HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent’にあるAssumeUDPEncapsulationContextOnSendRuleの値をDword:2に変更する必要があります。

Mac

  1. システム機能拡張から’ネットワーク’を選択し、下記をクリックしてVPN(L2TP over IPSec)を選択する。
  1. ①にルーターのGlobal IP/Global Domainと接続用アカウントを入力し②を選択して、認証設定ウィンドウを表示してパスワードと事前共有鍵を入力して、設定を完了させる。

Android/iOS

iOS/AndroidでVPNを必要とする場面はあまりないです。しかし標準VPNクライアントを使って接続できるようにしておくと、SimpleComicなどのSMB対応クライアントを使用してアプリから家庭内NAS内のファイルを操作できるので結構便利です。

また、海外にいる際に日本でのみ閲覧可能なサイトにもアクセスできるようになるので、設定しておくといいです。

Androidの設定例
iOSの設定例

参考になれば幸いです。