インストール|ModuleLoader 独自の機能

AppleScript Libraries と一緒に使う

AppleScript Libraries について

AppleScript Libraries は OS X 10.9 から導入された OS に標準搭載の AppleScript のライブラリシステムです。

/Library/Script Libraries

~/Library/Script Libraries

に保存されたスクリプトファイルをライブラリとして扱うことができます。

ライブラリを使用する側のスクリプトでは、

use LibraryName : script "LibraryName"
LibraryName's sample_handler()

もしくは、

というようにして、ライブラリ SampleLib を読み込み、その中で定義されている sample_handler を実行することができます。

いずれの場合も、ライブラリ "SampleLib" は、スクリプトの実行時に読み込まれます。

以上、最低限の AppleScript Libraries の紹介です。詳細は、AppleScript Language GuideScript Libraries を参照してください。

ModuleLoader について

ModuleLoader は AppleScript Libraries とは独立したライブラリシステムです。しかし、AppleScript Libraries の補助として使い始めると良いでしょう。ModuleLoader を使えば、は AppleScript Libraries ではできない、次のことができるようになります。

ただし、スクリプティング定義を含んだライブラリは扱えません。

コンパイル時にライブラリの読み込みを完了させる

AppleScript Libraries の use 構文を使うと、実行時に property にライブラリを読み込んでいることになります。ModuleLoader を併用すると、コンパイル時に読み込み、ライブラリも含んだ一つのスクリプトことができます。

use 文による、ライブラリの指定の後に一つ property を追加して、その値の定義部分で 「script "ModuleLoader"'s setup(me)」を実行します。スクリプト "ModuleLoader" は、setup ハンドラの引数に与えられたスクリプトオブジェクトの use 文を解釈して、ライブラリの読み込み及び property の設定を行います。

use scripting additions
use SimpleTextLib : script "SampleLibs/SimpleTextLib"
property _ : script "ModuleLoader"'s setup(me)

SimpleTextLib's replace_text("Do your task", "your", "my")
-- result : "Do my task"

コンパイル時にライブラリを読み込むことにより、そのスクリプトはライブラリ及び ModuleLoader.scptd がインストールされていないコンピュータでも動作させることができます。配布に都合が良いスクリプトやアプレットを簡単に作れます。

バンドルの中にライブラリを含める方法もありますが、必要なライブラリをもれなく整えるより、自動的にコンパイル時にロードしてしまう方が手軽で確実です。

ただし、スクリプティング定義ファイル(sdef ファイル)を含んだライブラリを扱うことができません。sdef ファイルで定義されたコマンドの実行は、ライブラリが Script Libraries フォルダの中に無いと実行できません。

また、バンドルリソースをライブラリを扱えません。それらは、「property _ : script "ModuleLoader"'s setup(me)」の後ろに配置するようにしてください。

(* load at compile-time *)
use LibHasResource_before : script "SampleLibs/LibHasResource"
property _ : script "ModuleLoader"'s setup(me)

(* load at run-time *)
use LibHasResource_after : script "SampleLibs/LibHasResource"

log LibHasResource_after's text_in_resources() -- work
log LibHasResource_before's text_in_resources() -- error

ライブラリを強制リロード

AppleScript Libraries では読み込んだライブラリはアプリケーションが管理する AppleScript コンポーネントインスタンスにキャッシュされます。そのため、ライブラリに変更を加えても、実行の際に変更されたライブラリがロードされないことがあります。例えば、スクリプトエディタでは、スクリプトの再コンパイルをしないと、ライブラリのリロードは行われません。

スクリプトエディタで、ライブラリを使ったスクリプトを開発しているといます。ファイルシステム上でライブラリに変更を行って、スクリプトエディタで開発中のスクリプトを再度実行します。このとき、ライブラリの変更は反映されません。スクリプトエディタで無駄な編集をおこなって、わざわざ再コンパイルを行わないとライブラリは再読み込みされません。

ModuleLoader を使えば、ライブラリのロードのタイミングを完全にコントロールできます。すなわち、「script "ModuleLoader"'s setup(me) 」をスクリプトの実行の際に実行すれば、ライブラリの確実なリロードが行えます。

use SimpleTextLib : script "SampleLibs/SimpleTextLib"

script "ModuleLoader"'s setup(me) -- force relaoding
SimpleTextLib's replace_text("Do your task", "your", "my")
-- result : "Do my task"
インストール|ModuleLoader 独自の機能