Reras-factoryReras-factoryガジェットとかAppleとかいろいろ【PowerShell】Squoosh-cliでフォルダ内の画像を圧縮するスクリプトを書いたWeb2022/01/1Websquoosh-cliでフォルダ内の画像をまとめて処理したい!画像を圧縮するには、TinyPngやimageminなどを始め多くのツールが存在します。個人的にはCLIでまとめてサクッと処理したいので、今まで仕事ではimageminを使用してきました。最近になって流行りの『Squoosh』のCLI版がnpmでリリースされているということで触ってみたのですが、どうやらファイル名を直接指定しなければいけない模様。imageminではソース元にフォルダ名を指定すれば中身を全部圧縮してくれていたのでどうしたものかと考えた結果、画像の枚数分同じ処理をさせるスクリプトを書くことにしました。PowerShellでフォルダ内のファイルを検索しSquoosh-cliを実行するnpmからsquoosh-cliをインストールします。npm対象ファイルを探すまずソース画像が存在するディレクトリと、書き出し先のディレクトリを変数として定義します。それぞれConvert-Path関数でカレントディレクトリの絶対パスにフォルダ名を連結しています。ソース画像のディレクトリにGet-ChildItemに-Fileオプションを付けて、フォルダ内のファイルを検索します。-Fileファイルの個数分ループする変数itemListにファイルの一覧が格納されているので、itemListにforeachしてファイルの個数分同じ処理を行います。fileName変数を作成し、ソースフォルダにファイル名を連結した文字列を格納しておきます。$item.Name}拡張子で処理を振り分ける次はループ内で実行する処理を書くわけですが、今回処理対象とするjpgとpngは同じエンコーダが使えないので拡張子で振り分けて別のコマンドを実行する必要があります。そのためGetExtentionメソッドを使用して$fileNameから拡張子文字列を抽出し、jpegではmozjpeg、pngではoxipngを使用するよう振り分けます。$fileName}ここからはオプションですが、圧縮後はソースフォルダをクリーンにしたいので$target_Dirの中のファイルを削除します。File!'完成したソースコードforeachとRemove-Itemをforeachの中に入れると以下のようになります。