

[Squoosh](https://squoosh.app/) は、最近その使い勝手の良さでWEB制作界隈で話題となっている Googleが提供する画像圧縮サービスです。WEBサービスとしての使い方は[ココ](https://bryog.com/squoosh-howto/) が参考になりました。
しかし、WEBサービス版では複数画像の一括変換は出来ません。このエントリーは、業務などで大量のJPGをWEBPに変換したいなどのニーズに対する、とりあえずの方法をメモです。
まず Node.js が必要です。ここでは Windows / Mac ともにNode.jsがインストールしてあるという前提で話を進めます。Mac はデフォルトでインストールしてあるらしいので、それで動くのであれば、とりあえずそれでいいです。
Windowsにせよ Mac にせよ、Node.jsをちゃんと使うのであれば Node のバージョンが管理できるようにインストールする [win](https://zenn.dev/longbridge/articles/30c70144c97d32) [mac](https://qiita.com/mii-chan/items/f3291ae8bbbf788c8aa3)必要があります。
##### サンプル画像をダウンロード
では、実際に自分のデスクトップで Squooshをつかった画像圧縮変換を試してみましょう。まずはサンプルの画像を[ココ](https://www.chaordic.co.jp/memorandum/sample/img.zip) からダウンロードしてデスクトップに展開してください。サイズが違うJPGとPNGの画像が合計6枚入っています。
img/
bird-2000x1333.jpg
cat-640x427.jpg
dog-640x427.jpg
frog-1920x1159.jpg
frog-7001629_960_720.png
frog-illust-1598x1920.jpg
次に、ターミナルを立ち上げて、先ほど展開した「img」に移動します。
> cd /Users/*****/Desktop/img
##### コマンドラインで変換
次にMacの場合は以下のコマンドを実行してみてください。(※Windowsでは上手くいかなかったので、次に紹介する「Squoosh CLI」を使った方法を試してください)
> npx @squoosh/cli --webp '{"quality":75,"target_size":0,"target_PSNR":0,"method":4,"sns_strength":50,"filter_strength":60,"filter_sharpness":0,"filter_type":1,"partitions":0,"segments":4,"pass":1,"show_compressed":0,"preprocessing":0,"autofilter":0,"partition_limit":0,"alpha_compression":1,"alpha_filtering":1,"alpha_quality":100,"lossless":0,"exact":0,"image_hint":0,"emulate_jpeg_size":0,"thread_level":0,"low_memory":0,"near_lossless":100,"use_delta_palette":0,"use_sharp_yuv":0}' -d ./ ./*.jpg
imgフォルダの中にJPGファイルと同じ数だけ「.webp」のファイルが出来ていれば、とりあえず成功です。
このコマンドはWEBサービスのsquooshで得た圧縮設定に、ディレクトリにあるJPGファイルすべてを指定する**「 -d ./ ./*.jpg」**を組み合わせたものです。**「 -d ./ ./*.jpg」**を**「 -d ./ ./*.png」**にするとPNGが実行対象になります。
圧縮設定のコマンドは [SquooshのWEBサービス版](https://squoosh.app/) の以下のボタンを押すと発行されます。SquooshはWebPに限らず、以下8種類の圧縮方法(AVIF/Browser JPEG/Browser PNG/JPEG XL/MozJPEG/OxiPNG/WebP/WebP v2)が用意され、パラメータを任意に設定できますので、好みの設定を探すことができます。
https://www.chaordic.co.jp/memorandum/user/chaordicdesign/img/53/0001.png
**npx** というコマンドは、モジュールのインストール、実行、アンインストールまでをパックで実行してくれる、「とりあえず試してみる」にはとても良いコマンドです。ただモジュールをインストールしておけば、それだけ変換にかかる時間も減るので、これからずっと使うという方は **「Squoosh CLI」** をインストールしてください。
##### [Win] GitBashをインストールする
一括で変換するためには「*(ワイルドカード)」というUNIXコマンド特有のファイル指定の方法を使用します。Mac は下でUNIXが動いているので何もする必要はありませんが、Windowsの場合「[GitBash](https://gitforwindows.org/)」というアプリをインストールしてそれに対応しているようです。デフォルトの設定でとりあえずインストールしてしまいましょう。
##### Squoosh CLIを使う
npm でSquoosh CLIをインストールします。
> npm i -g @squoosh/cli
インストールできたらHELPを確認してみます。
> squoosh-cli -h
windowsの場合、GitBashをインストールしたとしても、そのままではワイルドカードが使えないようなので、以下に示すシェルスクリプト「img.sh」をつくり、変換したい画像と同じディレクトリに置いて実行します。実行はダブルクリックです。
**img/img.sh**
squoosh-cli --webp '{"quality":75,"target_size":0,"target_PSNR":0,"method":4,"sns_strength":50,"filter_strength":60,"filter_sharpness":0,"filter_type":1,"partitions":0,"segments":4,"pass":1,"show_compressed":0,"preprocessing":0,"autofilter":0,"partition_limit":0,"alpha_compression":1,"alpha_filtering":1,"alpha_quality":100,"lossless":0,"exact":0,"image_hint":0,"emulate_jpeg_size":0,"thread_level":0,"low_memory":0,"near_lossless":100,"use_delta_palette":0,"use_sharp_yuv":0}' -d ./ ./*.jpg
squoosh-cli --webp '{"quality":75,"target_size":0,"target_PSNR":0,"method":4,"sns_strength":50,"filter_strength":60,"filter_sharpness":0,"filter_type":1,"partitions":0,"segments":4,"pass":1,"show_compressed":0,"preprocessing":0,"autofilter":0,"partition_limit":0,"alpha_compression":1,"alpha_filtering":1,"alpha_quality":100,"lossless":0,"exact":0,"image_hint":0,"emulate_jpeg_size":0,"thread_level":0,"low_memory":0,"near_lossless":100,"use_delta_palette":0,"use_sharp_yuv":0}' -d ./ ./*.png
2022-07-04 14:27:09
ソースコードは自由にお使いください。また、何らかの不利益が生じたとしても一切責任を負いません。