ModuleLoader Reference|Not Frequently Asked Questions

用例集

コンパイル時にライブラリをロードしたい

コンパイル時にライブラリをロードして property に設定すると、トップレベルのスクリプトに使用しているライブラリをすべて埋め込んで、実行時にライブラリや ModuleLoader との依存性がなくなります。

他の Mac へのコピーや配布する際に有用です。しかし、再コンパイルするまでライブラリが更新されないので、常に最新のライブラリを使用したい場合は、次の「実行時にライブラリをロードしたい」を参照してください。

use SimpleTextLib : script "SampleLibs/SimpleTextLib"
-- property SimpleTextLib : "@module" -- same meaning to the above
property _ : script "ModuleLoader"'s setup(me) -- load library at compile-time.

SimpleTextLib's replace_text("How now brown cow", space, "-")
-- result : How-now-brown-cow

実行時にライブラリをロードしたい

実行時にライブラリをロードすると、常に最新のライブラリを使うことができます。素直に AppleScript Libraries を使えば良いでしょう。

ModuleLoader を使う必要がある場合は、次のサンプルコードのように、「 script "ModuleLoader"'s setup(me) 」 を property の定義部ではなく、run ハンドラもしくは open ハンドラの中で実行するようにしてください。

property SimpleTextLib : "@module"

script "ModuleLoader"'s setup(me) -- load library at runtime.
SimpleTextLib's replace_text("How now brown cow", space, "-")
-- result : How-now-brown-cow

ローカル変数にライブラリをロードしたい

tell script "ModuleLoader"
set SimpleTextLib to load("SimpleTextLib")
end tell

tell SimpleTextLib
-- do somehting
end tell

ライブラリの中から別のライブラリを使いたい

あるライブラリの中から別のライブラリ使いたいとします。ライブラリの中でもトップレベルのスクリプトと同じように、module コマンドを設定した property を用意します。このライブラリがロードされる時に、property にライブラリが自動的に設定されます。

property name : "SimpleListLib"
property SimpleTextLib : "@module"

on replace_text_in_list(a_list, target, replacement)
set new_list to {}
repeat with a_text in a_list
tell SimpleTextLib
set end of new_list to replace_text(a_text, target, replacement)
end tell
end repeat
return new_list
end replace_text_in_list

on run -- test code
script "ModuleLoader"'s setup(me)
replace_text_in_list({"cain", "cine"}, "c", "p")
end run

テストのために単体で作させたいときは、実行時に「 script "ModuleLoader"'s setup(me) 」を実行すれば良いでしょう。

バンドルの中のライブラリをロードしたい

AppleScriptObjC アプリケーションなどのアプリケーションバンドル内のライブラリをロードする例です。ライブラリは Resources フォルダの 「Script Libraries」 フォルダの中にあると仮定しています。

property LibInBundle : "@module"

tell script "ModuleLoader"
prepend_path(path to resource "Script Libraries")
setup(me)
end tell

run LibInBundle -- "I'm LibInBundle"

ModuleLoader スクリプトprepend_path コマンドで、ライブラリの検索場所に Resources/Script Libraries フォルダを追加してから setup ハンドラによってライブラリのロード及び設定を行います。

このようなことをするよりも、コンパイル時にすべてのライブラリを property に埋め込んでしまうのが ModuleLoader の流儀です。もしくは、 OS X 10.9 で導入された AppleScript Libries を使うのが良いでしょう。

上のサンプルは ModuleLoader の柔軟性を示すものです。

ModuleLoader Reference|Not Frequently Asked Questions