AppleScript の新機能 (1) - ライブラリ

2013 年で 20 周年なんだってね。AppleScript。気づかなかったよ。だからというわけなのかどうか知らないけれど、OS X Mavericks 上の AppleScript 2.3 においていくつかの重要な機能が追加されました。

そのうちのひとつが、AppleScript Library。今までなかったのが不思議なぐらいなんだけど、やっとライブラリを簡単に取り扱える機能が言語ベースでサポートされました。

とは言うものの、あくまで機能としてサポートされただけで、最初から使えるスクリプトが付属しているわけではなく、ライブラリは自分で拡充していくしかないのですが。

なかなか手厳しい意見があったりもしますが、ともかく既存のスクリプトをライブラリとして手軽に活用できる環境が整いました。これをどう使うかはあなた次第。使い方は簡単。まずは使ってみましょう。

すでに AppleScript を活用していて自身でスクリプトを使い回している人なら、ユーザーの Library フォルダ以下に Script Libraries というフォルダを作成しましょう(~/Library/Script Libraries)。

このフォルダの中に既存のスクリプトを移動、または保存します。スクリプトはなんでもいいです。拡張子が scpt でありさえすれば(バンドル形式のスクリプトについては別途取り扱います)。

ここでは、次のようなスクリプトを保存してみましょう。

Script Editor で開く

on finderSelection()
    tell application id "com.apple.Finder"
        return selection
    end tell
end finderSelection

on filterByExtension(targetWindow, ext)
    tell application id "com.apple.Finder"
        return files of targetWindow whose name extension is ext
    end tell
end filterByExtension

on selectItems(theseItems)
    tell application id "com.apple.Finder"
        ignoring application responses
            set selection to {}
            set selection to theseItems
        end ignoring
    end tell
end selectItems

on remove_filetype(the_file)
    tell application "Finder"
        set creator type of the_file to missing value
        set file type of the_file to missing value
    end tell
end remove_filetype

なんということもない Finder でよく使うハンドラの集まりです。このスクリプトを Finder Utilities という名前で保存します。

ライブラリスクリプトを Script Libraries にスクリプト形式で保存

新しいスクリプトを作成します。

Script Editor で開く

tell application id "com.apple.Finder"
    set theseItems to script "Finder Utilities"'s finderSelection()
    if theseItems is {} then return

    set fileList to {}
    repeat with thisItem in theseItems
        set theWindow to container of thisItem
        set ext to name extension of thisItem

        if ext is not "" then
            set fileList to fileList & script "Finder Utilities"'s filterByExtension(theWindow, ext)
        end if
    end repeat

    script "Finder Utilities"'s selectItems(fileList)
end tell

Finder で選択しているファイルと同じ拡張子を持つファイルを全て選択するスクリプトです。Finder での並び順がバラバラだったりするのでちょっと重宝します。

実行するとなんの問題もなく動きます。当然ですね。では、解説。

先ほど Script Libraries に保存したライブラリスクリプトを他のスクリプトで利用するには次の書式を使います。

script "スクリプトファイル名"

スクリプトファイル名には拡張子は必要ありません。

script "Finder Utilities"

このような感じですね。ハンドラの呼び出しは通常の参照と同じです。finderSelection() というハンドラを呼び出したいなら、

finderSelection() of script "Finder Utilities"

または、

script "Finder Utilities"'s finderSelection()

となります。

AppleScript に慣れている人なら戸惑うこともないでしょう。もちろん、引数も通常どおり渡せます。

あっけないぐらい簡単にライブラリを利用できます。この書き方は冗長なので次のようにすることも可能です。

property FinderUtilities : script "Finder Utilities"

FinderUtilities's finderSelection()

これも新しく追加された use を使って次のように書くこともできます。

use FinderUtilities : script "Finder Utilities"

FinderUtilities's finderSelection()

これらの書式すら冗長なら parent に指定することもできます(なんでもかんでも parent に指定するのは、どうかと思いますが)。

property parent : script "Finder Utilities"

finderSelection()

It's Amazing!! Let's biginning the AppleScript!!!

ってそれほどでもないか。

まぁ、既存のスクリプトを手軽に扱えるようになったのはいいことでしょう。いろんな意見もあることでしょうが、こういうものはないよりはましです。気になること(例えば、ライブラリスクリプトからライブラリを利用できるのか?等)もあるでしょうが、そういったことはまた次回にでも。Coming Soon!!

0 件のコメント :

コメントを投稿