用例集
コンパイル時にライブラリをロードしたい
コンパイル時にライブラリをロードして property に設定すると、トップレベルのスクリプトに使用しているライブラリをすべて埋め込んで、実行時にライブラリや ModuleLoader との依存性がなくなります。
他の Mac へのコピーや配布する際に有用です。しかし、再コンパイルするまでライブラリが更新されないので、常に最新のライブラリを使用したい場合は、次の「実行時にライブラリをロードしたい」を参照してください。
property SimpleTextLib : module
property _ : boot (module loader) for me
- ライブラリを設定したい property で、module コマンドを実行します。
- 「 boot (module loader) for me 」がライブラリを読み込みます。property の定義におくことによりコンパイル時に実行できます。
- モジュールを設定したい property より後ろに、置かなければなりません。
実行時にライブラリをロードしたい
実行時にライブラリをロードすると、常に最新のライブラリを使うことができます。
次のサンプルコードのように、「 boot (module loader) for me 」 を property の定義部ではなく、run ハンドラもしくは open ハンドラの中で実行するようにしてください。
property SimpleTextLib : module
boot (module loader) for me
ローカル変数にライブラリをロードしたい
tell (module loader)
set SimpleTextLib to load("SimpleTextLib")
end tell
tell SimpleTextLib
end tell
コンパイル時に property にロード、実行時にローカル変数にロード
property SimpleTextLib : module
property loader : boot (module loader) for me
tell loader
set SimpleListLib to load(module "SimpleListLib" with reloading)
end tell
- 「コンパイル時にライブラリをロードしたい」と同じようにして、コンパイル時に property SimpleTextLib にライブラリを設定します。
- コンパイルに時に生成した loader スクリプトを property loader にとっておきます。
- 実行時に loader スクリプト の load ハンドラを使って、ライブラリ SimpleListLib をロードします。
- load コマンドの引数の中で、module コマンドの reloading パラメータ は必ずファイルからロードすることを明示します。
- load("SimpleListLib") だと、2回目以降の実行では、最初の実行でロード/キャッシュされた SimpleListLib が返ってきます。ファイルからの読み込みを保証するには、reloading パラメータが必要です。
ライブラリの中から別のライブラリを使いたい
あるライブラリの中から別のライブラリ使いたいとします。ライブラリの中でもトップレベルのスクリプトと同じように、module コマンドを設定した property を用意します。このライブラリがロードされる時に、property にライブラリが自動的に設定されます。
property SimpleTextLib : module
on run
boot (module loader) for me
end run
テストのために単体で作させたいときは、実行時に「 boot (module loader) for me 」を実行すれば良いでしょう。
バンドルの中のライブラリをロードしたい
AppleScriptObjC アプリケーションなどのアプリケーションバンドル内のライブラリをロードする例です。ライブラリは Resources フォルダの 「Script Libraries」 フォルダの中にあると仮定しています。
property LibInBundle : module
tell (module loader)
prepend_path(path to resource "Script Libraries")
boot for me
end tell
loader スクリプトの prepend_path コマンドで、ライブラリの検索場所に Resources/Script Libraries フォルダを追加してから boot コマンドによってライブラリのロード及び設定を行います。
このようなことをするよりも、コンパイル時にすべてのライブラリを property に埋め込んでしまうのが ModuleLoader の流儀です。もしくは、 OS X 10.9 で導入された AppleScript Libries を使うのが良いでしょう。
上のサンプルは ModuleLoader の柔軟性を示すものです。