SBTでコンパイル完了後に通知する

普段Scalaで開発する時にはsbtのインクリメンタルコンパイルを使用するのですが、シングルディスプレイいっぱいにIntelliJを広げているといちいちターミナルを開いて確認しなければならないので、コンパイルが完了したら通知センターに通知を行う方法を考えました。

必要なもの

通知方法としてはGrowlをインストールするか、Macの通知センターを利用するかのどちらかとなります。
今回はMacの通知センターを使用しました。

Macの通知センターに手軽に通知を行うためにはAppleScriptAutomatorのアクションが必要となりますが、なんとMountain Lionは通知センターがあるにも関わらず、デフォルトではAppleScriptAutomatorのアクションをサポートしていないらしいです(Maverickだと対応しているみたいです)。

Mountain Lionはサードパーティのものを使う必要がありますが、幸い僕の使っているLaunchBarは通知センターに通知を行うAutomatorのアクションを持っているので、今回はこれを使用しました。

通知を行うAutomatorワークフローを作成

まずは通知センターに通知を行うAutomatorのワークフローを作成します。
message変数を引数に取って”Display in Notification Center”アクションに渡しているだけです。

作成したワークフローは以下に置いてあります。

SBTCompileFinishNotification.workflow.zip

作成したら /Applications ディレクトリにSBTCompileFinishNotification.workflowとして保存します。

iTerm 2のトリガーを設定

iTerm 2にはトリガーといってターミナルに出力される文字列がある正規表現にマッチした時に通知などのコマンドを実行したりする機能があります。

iTerm2#Triggers

iTerm2で特定文字列をハイライトやGrowl通知する

sbtのコンパイルが終わると以下の様な文字列が出力されます。

コンパイルエラー

[error] Total time: 2 s, completed 11/28/13 9:30 PM

コンパイル成功!

[success] Total time: 4 s, completed 11/28/13 9:31 PM

これらの文字列にマッチする正規表現とアクションを以下のようにトリガーとして設定します。

Regular Expression\\[(.*)\\] Total time: (\d+) s
ActionRun Command…
Parametersautomator -D message=”\1 \2 s” /Applications/SBTCompileFinishNotification.workflow

トリガー設定後sbtでコンパイルするとコンパイル完了後以下のように通知が飛んできます。