AppleScriptでパスワード付きzipを生成してみた(AppleSilicon搭載Macでも動作)


はじめに

今まで知ってはいたが、使ったことがなかったので
AppleScriptを勉強がてら使ってみました。

今回は、試しに暗号化zipを作るためのAutomatorワークフロー(アプリ)を
作ってみたいと思います。

※Apple Silicon搭載 MacでRosettaなしでも動作すると思います。

ステップ

1. Automatorで新規アプリを作成

AutomatorはMac上の様々な操作を自動化するためのツールです。
まずは、Finderでファイル選択をさせるUIを表示します。
「ファイルとフォルダ」の「Finder項目の選択を求める」をドラッグ&ドロップして、
左のペインに表示します。

次に、「ユーティリティ」の「AppleScriptを実行」をドラッグ&ドロップして、
左のペインに表示します。

2. AppleScriptを記述

「AppleScriptを実行のブロック」の中に下記のようなコードを記述します。

zipper
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で受け取レます。

パスワードテキスト受け取り

dialog
display dialog "zipパスワードを入力してください(英数字のみ、記号不可)" default button 2 default answer ""

この記述で、AppleScriptから簡単な入力を求めるダイアログを表示することができます。

コマンド呼び出し

内部ではzipコマンドを呼び出して、
ディレクトリかファイルかを判断して、それぞれ処理をしています。

最後に

AppleSilicon版Macでも動作確認済みです。
※Rosettaなしでも動作可能です。

TODO

  1. この方法でzipしても、Windowsで日本語文字の含まれるファイルをunzipすると文字化けします。
  2. パスワード入力時の注意として、記号が使えないという点がありますが、適切にエスケープすれば、使えるようになると思います。