コフス技術ブログ

macOSでコンテキストメニューからファイルをAES256パスワード付きZIP圧縮を行うAutomatorのワークフロー作成

この記事はにメンテナンスが行われています。

パスワード付きZIP圧縮操作をmacOSデフォルトappのAutomatorを用いて、ファイルを右クリックで表示されるコンテキストメニューから行うワークフロー作成の流れです。

パスワードはAES256(Advanced Encryption Standard 256ビット長暗号鍵)で暗号化したいので、暗号化と復号化に対応したCUI版の7zip(p7zip)を用いることにします。

動作確認環境

$ sw_vers
ProductName:    macOS
ProductVersion: 11.2.3
BuildVersion:   20D91

$ brew -v
Homebrew 2.7.7

準備

Homebrewp7zipをインストールします。

brew install p7zip

インストールの際、以下のメッセージが出て失敗する場合はxcode-select --installを先に実行します。

Install the Command Line Tools:
  xcode-select --install

権限の設定

システム環境設定 -> セキュリティとプライバシー -> プライバシーへ移動し、フルディスクアクセスの項目にFinderを追加しチェックをONにします。
※ FinderのPATH:/System/Library/CoreServices/Finder.app

Automatorでワークフローの作成

Automator(/System/Applications/Automator.app)を開き、新規書類ボタンをクリックし書類の種類はクイックアクションを選択します。

続けてアクション -> ライブラリ -> シェルスクリプトを実行と進み、シェルスクリプトを実行を右ペインにD&Dし追加します。

画像

右ペインのそれぞれの設定値は以下を参考に指定します。

項目名 設定値
ワークフローが受け取る現在の項目 ファイルまたはフォルダ
検索対象 Finder.app
入力 すべての選択項目
イメージ アクション
カラー ブラック

シェルスクリプトを実行の項目の設定値も以下を参考に指定します。

項目名 設定値
シェル /bin/bash
入力の引き渡し方法 引数として

シェルスクリプトは以下を入力し保存します。保存時にファイル名の指定ができますが、この時指定した文字列がコンテキストメニューに表示されるため分かりやすい適当な名前を入力します。

password=$(osascript -e ' text returned of (display dialog "パスワードを入力して下さい:" with title "AES256パスワード付きZIP圧縮" default answer "" buttons {"OK"} default button 1) ')
if [ "$password" != "" ];then
  password="-p"${password}
fi

/usr/local/bin/7z a -ssw -mem=AES256 -mx=9 -tzip ${password} -scsWIN -xr\!.DS_Store "$1".zip "$@"

最後の行で7zを用いてAES256でZIP圧縮していますが、-scsWINオプションを付けることでWindowsでの文字化け防止が期待でき、-mem=AES256の指定ではAES256以外にZipCrypto, AES128, AES192の指定も可能です。
-mx=9では圧縮レベルを指定でき、[0 | 1 | 3 | 5 | 7 | 9]の中から選択が可能です。数字が大きくなると圧縮レベルも高くなります。

7zのPATHについて

最後の行の/usr/local/bin/7zのPATHはHomebrewのインストール先で変わるため、環境に合わせて変更する必要があります。
HomebrewのインストールPATHの取得はbrew --prefixで可能です。

実際の使用様子

ZIP圧縮中はメニューバーに回転した歯車が表示され、処理が完了すると歯車が消えます。ファイルの数量によって処理時間は大きく左右されるので歯車の様子で都度進捗具合を確認するといいでしょう。

画像

AES256で圧縮済みのZIPの展開について

macOSではプリインストールアプリのアーカイブユーティリティ.appを使用して展開ができますが、Windows OSではネイティブのZIP展開ではAES256に対応していないため失敗します。

Windows OSで展開する場合はexe版の7Zipをインストールして7Zip経由で展開すると正常に展開可能です。(※AES256に対応したアーカイバであれば7Zipである必要はありません。)


参考:Command Line Version User's Guide