用例集|更新履歴

Not Frequently Asked Questions

ライブラリってなに?

他のスクリプトから読み込まれて(ロードされて)使われるスクリプトファイルのこと。

コードを分割して、複数のプロジェクトでコードを供給することにより、より高機能なものを、より少ない手間で作ることができるはず。

ModuleLoader では、スクリプトファイル(.scpt ファイル)、スクリプトバンドル(.scptd ファイル)、スクリプトアプリケーション、テキスト形式のスクリプト(.applescript ファイル)をライブラリとして扱うことができます。ライブラリ側のコードに特別な配慮は何にもいりません。スクリプトエディタで保存した物は全部ライブラリになります。

load script コマンドより何がいいの?

ロードするライブラリの管理が楽になって、ロードのためのコードが最小限にできます。具体的には、

などができます。

一つ二つのスクリプトをロードするなら、load script でもそんなに苦にならないかもしれません。でも、5つくらいのモジュールをロードして、さらにそれらが別のモジュールに依存するなんて状況になると、load script ではやってられなくなります。

とにかく、モジュール/ライブラリのロードには、load script コマンドではなく、ModuleLoader か AppleScript Libraries をご検討ください。

ライブラリの置き場所は?

デフォルトでは、ホームディレクトリもしくはルートディレクトリ以下の、

です。このフォルダ以下にスクリプトファイルを置けば、名前を指定するだけでライブラリとしてロードできるようになります。サブフォルダの中も探しに行きます。

ライブラリの置き場所のカスタマイズはこちらを参照してください。

現在設定されている、ライブラリの置き場所は module_paths ハンドラで調べることができます。

ライブラリの場所を追加したい。

まずは、Local Loader の利用を考えてください。自由に移動できるライブラリの置き場所を作ることができます。

スクリプトの実行中に一時的にモジュールの場所を追加したい場合は、loader スクリプトの set_additional_paths ハンドラ、prepend_path ハンドラを使ってください。

同じライブラリが複数回ロードされた場合

"boot (module loader) for me" の実行によって、同じライブラリがトップレベルもしくは、どこかのライブラリで複数回ロードされた場合、それらは同じ実体を共有します。これによって、スクリプトのサイズを最小限に保つことができます。また、ライブラリを経由してのライブラリ間でデータをやり取りすることができます。

具体的な例を次に示します。まず、ロードされるライブラリです。

property _message : "hello"

on set_message(msg)
set my _message to msg
end set_message

on say_message()
return my message
end say_message

このライブラリ "ShareMessage" を別々の property に2回ロードしてみます。そして、片方に property の変更を行う操作をします。すると、もう一方の property のスクリプトオブジェクトにも、変更が反映されるため同じ実体を共有していることがわかります。

property ShareMessage1 : "@module ShareMessage"
property ShareMessage2 : "@module ShareMessage"
script "ModuleLoader"'s setup(me)

log ShareMessage1's say_message() -- result : "hello"
log ShareMessage1's say_message() -- result : "hello"

ShareMessage1's set_message("hey")
log ShareMessage1's say_message() -- result : "hey"
log ShareMessage1's say_message() -- result : "hey"

-- ShareMessage1 and ShareMessage2 share same substance.

同じ名前のスクリプトファイルとスクリプトバンドルとソースコードファイルとアプリケーションがある場合

Script Libraries フォルダの中に、

のがある場合、上記の順番の優先度で読み込まれます。

用例集|更新履歴