長い処理が終了した時に成功/失敗を音で知らせてくれるコマンドをつくった
きっかけ
テストコマンド・ビルドコマンドなど、長くかかるコマンドってありますよね??
僕はよく待ってる時間に他のことを始めて、
とっくに終わっていることにしばらく気づかないことがよくあります。
実行したコマンドが成功していればまだいいんですが、
失敗しているのに気づかず
「あーーー、再トライしなきゃいけなかったのに、時間無駄にしてしまった〜」
となることが非常に多いです。
なので、コマンドの終了ステータスが0かどうかをチェックして、
成功時には👍な音・失敗時には👎な音を鳴らすようにしてみました。
対象動作環境
- macOS
- zsh
実装
音を鳴らす
macOSには afplay
というコマンドがデフォルトで入っているので、
成功時用の success.mp3
と 失敗時用の failure.mp3
を用意して、
success() {
afplay /path/to/success.mp3
}
failure() {
afplay /path/to/failure.mp3
}
と定義することで、まずは成功音を鳴らすコマンド・失敗音を鳴らすコマンドができました。
あるいは、macであればsay
コマンドで読み上げができるので、
success() {
say "success"
}
failure() {
say "failure"
}
のような感じでもいいかもしれません。
直前のコマンドの終了コードに応じて、鳴らす音を変える
僕はあまりシェルに詳しくないのですが、どうやらこちらの記事によると、シェル変数$?
には直前のコマンドの終了コードが入っているようです。
なので、
notify() {
if [ "$?" = 0 ]; then
success
else
failure
fi
}
これで、鳴らしわけが出来ました。
使い方
あとは、
なんらかのコマンド; notify
と指定することで、そのコマンドが終わった時に、
お知らせしてくれるようになります🎉
発展
僕は頻繁に使うコマンドには短いエイリアスを積極的に貼っていきたい派なので、
alias -g N='; notify'
N
という文字に通知を押し込めました。
これで、たとえばテスト待ちの場合であれば、
npm test N
あるいはビルド待ちであれば、
npm run build N
で手軽に通知を貼れるようになりました。
自分なりの主な使いみち
ちょうど最近githubの公式cliツールgh に github actionsの監視オプションができたので、
gh run watch N
と実行すると、
このように、インタラクティブにwatchしたいアクションが選べるので、
あとは放置しておけば、成功・失敗を音で知らせてくれて、
とても便利になりました!
まとめ
自分なりにテンションのあがる音を見つけていくのもまた一つの楽しみになりました🎙
Discussion
とても有用な記事ありがとうございます 🎼
say
コマンドは声が選べるので、自分好みの声を選択するのも良さそうですねエラーメッセージなどを読み上げてくれるようにするのも良さそうです