LoginSignup
24
22

More than 5 years have passed since last update.

AppleScript / JavaScript for Automation (JXA) を使ってMacに通知を出す

Last updated at Posted at 2015-09-06

JXAって?

OSX YosemiteからAppleScriptがJavaScriptで代替できるようになりました。これをJavaScript for Automation(JXA)というらしいですが、解説が少なくて大変です。
とりあえず通知くらい出せれば応用が利きそうなので書いてみました。

Macの通知センターに通知を出す

アプリケーションから"スクリプトエディタ"を起動して以下のようなJavaScriptファイルを作ります。

notify.js
var app=Application.currentApplication();
app.includeStandardAdditions = true;
app.displayNotification('はろーわーるど', {
    withTitle: 'ほげほげ', 
    subtitle: 'ふがふが', 
    soundName: 'Glass'
});

[▶]ボタンを押すか、Command(⌘)+Rで実行すると通知が出ます。
(言語設定をAppleScriptではなくJavaScriptにするのを忘れずに!)

ちなみに音はシステム環境設定 > サウンド > サウンドエフェクトにあるものから選べます。存在しない場合はデフォルトの音がなるようです。音量もここで選べます(通知音量が0になってて音が鳴らずにはまった)。

アプリケーションと連携させる

これだけだとつまらないので、iTunesの中からランダムに一曲とってきて通知するサンプルを作ってみます。

itunes_notify.js
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で実行します。

スクリーンショット_2015-09-06_15_38_12.png

残念ながら、アイコンの表示を変えることはできないようです。アルバムのアートワークにできればよかったのですが。

コマンドラインで実行

コマンドラインで実行することもできます。上のファイルを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に用意されています(いずれも英語)。

24
22
0

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
24
22