Androidアプリのビルドが終わったらにゃーんと猫の声が聞こえるようにする

Androidアプリのビルドはターミナル派でしょうか、それともAndroid Studio派でしょうか。 最近はInstant Runや、接続されているデバイスの情報から不要なリソースを削ることでビルドの高速化されるなど、Android Studioでのビルドは魅力的なところが多いのですが、私は依然ターミナル派です。*1

いままで作ったコマンド

これまで、ターミナルで快適に開発ができるように、便利なコマンドを開発しては公開してきました。

techlife.cookpad.com techlife.cookpad.com

中でも特に気に入ってるものの1つがnotifier-pluginです。

tomorrowkey.hatenablog.jp

notifier-pluginとは

Androidアプリのビルドって結構長いですよね。規模によってはフルビルドで3~4分かかってしまうアプリも少なくないんじゃないでしょうか。 ビルドの待ち時間が長いとついついTwitterでハイハイワロスワロスと糞ツイートが捗ってしまいます。いつのまにかTwitterに熱中してしまってビルドが終わっても気づかずに10分以上Twitterやってたみたいな経験はないでしょうか。
そこで開発したのがnotifier-pluginで、ビルドが終わったタイミングで音声で教えてくれたり、通知センターで教えてくれたり、決まった音楽を流すことができます。 導入方法はbuild.gradleに書いて、設定ファイルを1つ追加するだけです。

iTerm2

話は変わりますが、私は快適なターミナル生活のためにiTerm2を使っています。
iTerm2はMacのターミナルをもっと便利にするアプリケーションで、決まったショートカットを押すとシュッとターミナルを出すことができるところが気に入ってます。そのiTerm2が最近version 3になりました。ただシュッとするためだけに使ってきたiTerm2ですが、これを機に機能を調べているとTriggerという機能があり、これを使えばプラグインすらいらねーんじゃねと思って使ってみました。

iTerm2でビルドがにゃーんと分かる

Triggerの設定をしましょう。

Preferences > Profiles > $YOUR_PROFILE > Advanced > Triggers > Edit

f:id:tomorrowkey:20160609154345p:plain

+ボタンから新しいトリガーを設定します。

f:id:tomorrowkey:20160609154350p:plain

正規表現で一致したテキストが出力されると何らかのアクションを起こすことができます。

Gradleビルド成功/失敗時のログは次のようになります。

# 成功時
BUILD SUCCESSFUL

# 失敗時
BUILD FAILED

よって正規表現を次のように定義しました。

^(BUILD (SUCCESSFUL|FAILED))$

起こすアクションはコマンドの実行です。 次のコマンドを実行するように定義しました。

say -v 'Alex' \1

Macにプリインされているsayコマンドを使い、Alexがビルド結果を教えてくれます。 正規表現で一致したテキストをアクションで使用しています。そのへんのルールはここに https://www.iterm2.com/documentation-triggers.html あります。

にゃーんと鳴いてねーじゃねーかと思いますが、任意の音声を再生するならこんな感じでしょうか。

afplay ~/Downloads/meow.mp3

これでにゃーんと鳴きます。

通知センターで表示しながらAlexに喋らせるならこんな感じでしょうか。

echo 'display notification "\1" with title "Gradle"' | osascript; say -v 'Alex' \1

まとめ

Gradle pluginを使わずにビルドが終わったことを音などで知らせることができました。これはAndroidアプリのビルド以外にも時間がかかる処理に応用ができてなかなか便利ですね。 またnotifier-pluginはGradle pluginとして動作するので、Android Studio経由のビルドでも音を鳴らすことができるので、そちらもぜひご活用ください。

*1:Instant Runがまだ不安定な部分があり、完全に導入しきれてないなどの理由がありますが、多くは語りません