JXAって?
OSX YosemiteからAppleScriptがJavaScriptで代替できるようになりました。これをJavaScript for Automation(JXA)というらしいですが、解説が少なくて大変です。
とりあえず通知くらい出せれば応用が利きそうなので書いてみました。
Macの通知センターに通知を出す
アプリケーションから"スクリプトエディタ"を起動して以下のようなJavaScriptファイルを作ります。
var app=Application.currentApplication();
app.includeStandardAdditions = true;
app.displayNotification('はろーわーるど', {
withTitle: 'ほげほげ',
subtitle: 'ふがふが',
soundName: 'Glass'
});
[▶]ボタンを押すか、Command(⌘)+Rで実行すると通知が出ます。
(言語設定をAppleScriptではなくJavaScriptにするのを忘れずに!)
ちなみに音はシステム環境設定 > サウンド > サウンドエフェクト
にあるものから選べます。存在しない場合はデフォルトの音がなるようです。音量もここで選べます(通知音量が0になってて音が鳴らずにはまった)。
アプリケーションと連携させる
これだけだとつまらないので、iTunesの中からランダムに一曲とってきて通知するサンプルを作ってみます。
var app = Application.currentApplication(),
iTunes = Application('iTunes');
app.includeStandardAdditions = true;
var allTracks = iTunes.playlists[0].tracks();
var randomTrack = allTracks[Math.floor(Math.random() * allTracks.length)];
app.displayNotification(
randomTrack.artist(),
{
withTitle: randomTrack.name(),
subtitle: randomTrack.album()
}
);
ふたたび、[▶]ボタンを押すか、Command(⌘)+Rで実行します。
残念ながら、アイコンの表示を変えることはできないようです。アルバムのアートワークにできればよかったのですが。
コマンドラインで実行
コマンドラインで実行することもできます。上のファイルをitunes_notify.js
と保存し、ターミナルで以下を実行します。
$ osascript -l JavaScript itunes_notify.js
ただ、コマンドラインからApplication.currentApplication()
を呼ぶと
warning: failed to get scripting definition from /usr/bin/osascript; it may not be scriptable.
という警告が出てしまいます。今のところ回避方法がわかりません。
まとめ
OSX Yosemiteから使えるようになったJavaScript for Automation (JXA) を使って通知を出す方法を書きました。
ドキュメントは JavaScript for Automation Release Notes を見るか、スクリプトエディタで ファイル > 用語説明を開く > StandardAdditions.osax
に用意されています(いずれも英語)。