くりにっき

フルスタックキュアエンジニアです

capistrano-around_chatwork を作った

最近は既存アプリで使ってる capistrano を2系から3系に上げる仕事をしているのですが、ChatWork通知周りのとある処理が汎用化できそうだったのでgemにしてリリースしました

github.com

どんなgem?

普通の通知系のgemは特定のtaskにフックさせて通知しますが、このgemはtaskの開始時と終了時にChatWorkに通知します。(beforeとafterを合体させたようなもの)

f:id:sue445:20150603215100p:plain

終了時にはtaskの処理時間もメッセージに含めることができます

使い方

Capfile

require "capistrano/around_chatwork"

config/deploy.rb

set :chatwork_api_token, "YOUR_API_TOKEN"
set :chatwork_room_id,   00000000

around_chatwork "deploy"

ChatWorkのAPI tokenと通知先の部屋IDを設定し、前後を通知で囲みたいタスクを around_chatwork に書くだけでokです。

chatwork_api_tokenchatwork_room_idcapistrano-chatwork と全く同じものなので、capistrano-chatworkを導入してる場合は同じ設定を共有できます

通知メッセージを編集したい場合は starting_messageending_message をいい感じに編集して下さい。

set :starting_message, -> {
  "[info][title][#{fetch(:stage)}] :task_name: @#{fetch(:user)}[/title]started[/info]"
}

set :ending_message, -> {
  "[info][title][#{fetch(:stage)}] :task_name: @#{fetch(:user)}[/title]done (:elapsed_time: sec)[/info]"
}

文中の :task_name::elapsed_time: はフックしたタスク名とタスクの処理時間に置換されます。

詳しいこと

capタスクの前後に動的にタスクを設定したい

capistrano 3系の仕組みはRake taskがベースなので下記が参考になります

Rake で任意のタスクの前後に別のタスクを実行する - HsbtDiary(2012-02-10)

実際のコードはこんな感じです。

https://github.com/sue445/capistrano-around_chatwork/blob/v0.1.0/lib/capistrano/around_chatwork.rb#L17-L35

*1