JXA本体及び、アプリケーション操作以外でも、多くの機能拡張方法が用意されている。
ライブラリ(Libraryオブジェクト)
"~/Library/Script Libraries/"にスクリプトを保存しておくと、Libraryオブジェクトを使ってスクリプトを呼び出すことができる。
次のように書けば、toolbox.scptファイルに記述したlog関数を呼び出せる。
toolbox = Library('toolbox')
toolbox.log('Hello world')
標準機能拡張(StandardAdditions.osax)
JXAには、StandardAdditions.osaxという命令の集合体が標準で用意されている。ライブラリパネルにあるので、詳細は用語説明を参照。
これらの命令を使うにはアプリケーションの属性includeStandardAdditions
をtrueにすればいい。
デフォルトはfalseなので、StandardAdditionsを使う前に、必ずtrueにすること。
app = Application("com.apple.finder")
app.includeStandardAdditions = true
app.activate()
app.displayDialog( "ハローワールド" )
ここでは、displayDialog()
(注1)が、StandardAdditionsに含まれる命令。includeStandardAdditions = true
を忘れているとエラーとなる。
スクリプト専用アプリケーション(System Events.app)
他に、幾つかの「起動しても画面に表示されず、スクリプトから操作するためにあるアプリケーション」が存在する。
特に、System Eventsに多くの機能が集中しており、スクリプトで操作できない場合に人の入力を真似るGUI Scriptingなど有用な機能が含まれる。
次のスクリプトは、キーボードショートカットをスクリプトから発生させて、アプリケーションの操作をしている。
Application("com.apple.textedit").activate()
delay( 1 ) // ちょっと待つ(注2)
app = Application( "System Events" )
app.keystroke( "a",{ using: "command down"} )
コマンドラインシェル(doShellScript)
doShellScript()
を使えば、shシェルのShellスクリプトが使えるので、コマンドラインでできることは、ほぼなんでもできる(注3)。
Mac OS XにはPerlやRubyなどの多くの言語が入っているので、それらの機能も使えるということだ。
app = Application.currentApplication()
app.includeStandardAdditions = true
app.doShellScript( "whoami" )
API呼び出し(ObjCオブジェクト)
さらにJXAはObjCオブジェクトを使って、Mac OS XのAPIにアクセスできる。
こうなると本当になんでもありだが、凝ったものを作りたい場合は、通常のアプリケーション開発環境であるXcodeを使ったほうが楽だ。
せいぜい数個のAPIを呼び出すと「楽ができる」という場合に使うのが良いだろう。
ObjC.import('Cocoa')
$.NSBeep()
Cocoa API以外にも、stdioとかの低レベルなライブラリもインポートできて驚く(注4)。
他に、Refオブジェクト、Automationオブジェクトなども用意されている。詳細はJavaScript for Automation Release Notesを。