実行時間の長いコマンドの終了をGrowlやメール通知するRubyスクリプト

こんにちは、株式会社CFlatです。

ビルドなどの処理時間が長いコマンドを実行したあとって、どうせ待つぐらいならはてブでも見るかとかyoutubeでも見るかとなって、大抵気がついたときにはコマンドもとっくに終わっているということになりがちです。
かといって、「もう終わったかな、、?終わってねえええ!」を繰り返すのも大変ストレスがたまります。そういったことにならずにコマンドの待ち時間を有効に使うためにはやはり終了を通知するのが賢いでしょう。

方法はいろいろあると思いますが、お手軽にRubyで書いてみようと思います。

ちなみに、通知が欲しいときは2パターンあると思っています。

  • Macからは離れずにブラウザで遊んだりしている場合、
  • Macから離れて何かしたい場合(ex 待ち時間に部屋の片付けでもしとくか〜)

前者はGrowlの通知、後者はメールでの通知がちょうどいいかなと考えました。

使い方

こうやって使います。Rubyスクリプトに実行したいコマンドを渡します。

# growl
$ growlnotifier [command] --option1 --option2
# mail
$ mailnotifier [command] --option1 --option2

ソース

Growl通知
#!/usr/bin/env ruby

commands = ARGV.join ' '
system "#{commands}"
system "growlnotify -s -t 'bash' -m 'finished commands - [#{commands}]'"

Growl通知のためには、Growl(有料)とGrowlNotifyが必要です。
GrowlはMacAppStoreから、GrowlNotifyはこちらから→http://growl.info/downloads#generaldownloads

メール通知
#!/usr/bin/env ruby

require "mail"

commands = ARGV.join ' '
system "#{commands}"

mail = Mail.new do
  from "youraccount@gmail.com"
  to "your_email"
  body "[#{commands}] finished"
end

mail.delivery_method :smtp, {
  address: "smtp.gmail.com",
  domain: "gmail.com",
  port: 587,
  user_name: "youraccount",
  password: "yourpassword"
  authentication: :plain
}

mail.deliver!