はじめに
今まで知ってはいたが、使ったことがなかったので
AppleScriptを勉強がてら使ってみました。
今回は、試しに暗号化zipを作るためのAutomatorワークフロー(アプリ)を
作ってみたいと思います。
※Apple Silicon搭載 MacでRosettaなしでも動作すると思います。
ステップ
1. Automatorで新規アプリを作成
AutomatorはMac上の様々な操作を自動化するためのツールです。
まずは、Finderでファイル選択をさせるUIを表示します。
「ファイルとフォルダ」の「Finder項目の選択を求める」をドラッグ&ドロップして、
左のペインに表示します。
次に、「ユーティリティ」の「AppleScriptを実行」をドラッグ&ドロップして、
左のペインに表示します。
2. AppleScriptを記述
「AppleScriptを実行のブロック」の中に下記のようなコードを記述します。
on run {input, parameters}
set filePath to item 1 of input
set fileName to name of (info for filePath)
set isFolder to folder of (info for filePath)
# ダイアログを表示して、パスワード文字列の入力を受け付ける
display dialog "zipパスワードを入力してください(記号不可)" default button 2 default answer ""
set tmpText to result
set passText to text returned of tmpText
if isFolder then
# フォルダの場合
tell application "Terminal"
activate
set win to do script "rm -rf ~/Desktop/archive.zip && cd " & quoted form of POSIX path of filePath & " && cd ../ && zip -P='" & passText & "' -r ~/Desktop/archive.zip './" & fileName & "' && exit"
repeat
delay 0.1
if not busy of win then exit repeat
end repeat
quit
end tell
else
# ファイルの場合
tell application "Terminal"
activate
set win to do script "rm -rf ~/Desktop/archive.zip && zip -j -P='" & passText & "' ~/Desktop/archive.zip '" & POSIX path of filePath & "' && exit"
repeat
delay 0.1
if not busy of win then exit repeat
end repeat
quit
end tell
end if
return
end run
ポイント説明
input受け取り
「Finder項目の選択を求める」ブロックで選択されたファイル情報がAppleScriptのinputで受け取レます。
パスワードテキスト受け取り
display dialog "zipパスワードを入力してください(英数字のみ、記号不可)" default button 2 default answer ""
この記述で、AppleScriptから簡単な入力を求めるダイアログを表示することができます。
コマンド呼び出し
内部ではzipコマンドを呼び出して、
ディレクトリかファイルかを判断して、それぞれ処理をしています。
最後に
AppleSilicon版Macでも動作確認済みです。
※Rosettaなしでも動作可能です。
TODO
- この方法でzipしても、Windowsで日本語文字の含まれるファイルをunzipすると文字化けします。
- パスワード入力時の注意として、記号が使えないという点がありますが、適切にエスケープすれば、使えるようになると思います。