以前はsegmentation faultで落ちて動かなかったので放置してました。
ふと思い出して使ってみたら動くようになってたのでメモ。
OS X 10.10.3
作ってみる
Script Editorを開き、適当に関数を作ります。
function greeting(){
return "ぷいにゅー"
}
~/Library/Script Libraries/
に保存して終わりです。
このフォルダが無い場合は作成します。
「sample」という名前で保存しました。
使ってみる
ライブラリの参照をLibrary
関数から得ることができます。
ファイル名を指定します。拡張子(.scpt)はいりません。
この参照から、そのライブラリの関数を使うことができます。
lib = Library("sample")
lib.greeting()
//=> "ぷいにゅー"
関数の外の処理
関数の外はライブラリの参照を得た際に実行されます。
トップレベルで変数を宣言する際、ライブラリを使う側には影響ないのでvarはつけてもつけなくてもいいです。
app = Application.currentApplication()
app.includeStandardAdditions = true
app.displayDialog("そと")
function disp(){
app.displayDialog("なか")
}
lib = Library("sample") //この時点で「そと」というダイアログが表示される
lib.disp() // 「なか」というダイアログが表示される
スクリプトエディタを使わないでライブラリを作る
ライブラリはプレーンテキストのJavaScriptでは駄目です。
scptにコンパイルされている必要があります。
プレーンテキストからコンパイルする場合はosacompile
を使います。
$ osacompile -l JavaScript -o sample2.scpt sample2.js
-o xxx
は出力するファイル名です。省略するとa.scpt
という名前になります。
拡張子の補完はされないので必ず.scpt
をつけます。
AppleScript
ライブラリがAppleScriptで書かれていてもJXAから使用できます。逆も可。
on versionOfMac()
system version of (system info)
end versionOfMac
lib = Library("apple")
lib.versionOfMac()
//=> "10.10.3"
超絶注意
・戻り値が浮動小数点数の場合、整数に強制変換されるっぽい
・ライブラリの保存後、なぜか変更が反映されるまでしばらく時間がかかる