LoginSignup
13
16

More than 5 years have passed since last update.

MacのJavaScript for Automation(JXA)のライブラリを作る

Last updated at Posted at 2015-04-28

以前はsegmentation faultで落ちて動かなかったので放置してました。
ふと思い出して使ってみたら動くようになってたのでメモ。

OS X 10.10.3

作ってみる

Script Editorを開き、適当に関数を作ります。

sample.scpt
function greeting(){
  return "ぷいにゅー"
}

~/Library/Script Libraries/に保存して終わりです。
このフォルダが無い場合は作成します。
「sample」という名前で保存しました。

使ってみる

ライブラリの参照をLibrary関数から得ることができます。
ファイル名を指定します。拡張子(.scpt)はいりません。

この参照から、そのライブラリの関数を使うことができます。

lib = Library("sample")
lib.greeting()
//=> "ぷいにゅー"

関数の外の処理

関数の外はライブラリの参照を得た際に実行されます。
トップレベルで変数を宣言する際、ライブラリを使う側には影響ないのでvarはつけてもつけなくてもいいです。

sample.scpt
app = Application.currentApplication()
app.includeStandardAdditions = true

app.displayDialog("そと")

function disp(){
  app.displayDialog("なか")
}
lib = Library("sample") //この時点で「そと」というダイアログが表示される
lib.disp() // 「なか」というダイアログが表示される

スクリプトエディタを使わないでライブラリを作る

ライブラリはプレーンテキストのJavaScriptでは駄目です。
scptにコンパイルされている必要があります。

プレーンテキストからコンパイルする場合はosacompileを使います。

「sample2.scpt」として「sample2.js」をコンパイル
$ osacompile -l JavaScript -o sample2.scpt sample2.js

-o xxxは出力するファイル名です。省略するとa.scptという名前になります。
拡張子の補完はされないので必ず.scptをつけます。

AppleScript

ライブラリがAppleScriptで書かれていてもJXAから使用できます。逆も可。

apple.scpt
on versionOfMac()
    system version of (system info)
end versionOfMac
lib = Library("apple")
lib.versionOfMac()
//=> "10.10.3"

超絶注意

戻り値が浮動小数点数の場合、整数に強制変換されるっぽい
・ライブラリの保存後、なぜか変更が反映されるまでしばらく時間がかかる

参考

JavaScript for Automation Release Notes

13
16
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
16