Capistranoでデプロイした時にGithubのどのPullRequestをリリースしたかをSlackに通知する

f:id:kimromi:20160709032809j:plain

上のような感じで、Capistranoでデプロイした時にどのPullRequestがリリースされたかをSlackに通知するGemを作りました。

github.com

Capistrano v3 のみ対応です。masterブランチにマージされた最新のPullRequestを取得して通知しますので、デプロイするときは一旦masterブランチに切り替えてgit pullしてからデプロイすると間違いないです。

@linyows さんが作ったcapistrano-github-releasescapistrano-slack_notificationに完全に依存しています。ありがとうございます!

セットアップ

Gemfile

gem 'capistrano-releases-notification'

Capfile

require 'capistrano/github/releases'        # 依存
require 'capistrano/slack_notification'     # 依存
require 'capistrano/releases/notification'

config/deploy.rb

# slack webhook
set :slack_endpoint, 'https://hooks.slack.com'
set :slack_path, '/services/xxxxxxxxx/yyyyyyyyy/zzzzzzzzzzzzzzzzzzzzzzz'

# slack通知設定
set :release_notify_channel, ['#general']   # 通知チャンネル名(複数指定可)
set :release_notify_mention, ['@kimromi']   # メンション(複数指定可)

# Github Enterpriseの場合
Octokit.configure do |c|
  c.api_endpoint = 'http://your.enterprise.domain/api/v3'
  c.web_endpoint = 'http://your.enterprise.domain/'
end

config/deploy/production.rb

# デプロイ終了後に通知する設定
after 'deploy:finishing', 'release:notify'

必要なstageで追加してください。

使いみち

メッセージやタイトルも編集できますので、我がムームードメインではカスタマーサービスチームにメンションを飛ばして何がリリースされたかを通知して共有するようにしています。下の例ではPullRequestの内容まで取得しています。

f:id:kimromi:20160709032819j:plain

set :release_notify_mention, ['@cs']
set :release_notify_title, 'ムームードメイン'
set :release_notify_message, -> {
  "リリースしました。 #{fetch(:release_notify_mention).join(' ')}"
}
set :release_notify_attachment, -> {
  pull_request = Octokit.pull(fetch(:github_repo), fetch(:pull_request_id))
  [
    pull_request.title,
    pull_request.html_url,
    '------------',
    pull_request.body[0, 200]
  ].join("\n")
}

お試しあれ〜

設計力が足りない

設計力が足りない。仕事の進め方にしても、コーディングにしても。もっと先を見据えて進めていかなければー。気まぐれに動いて行き当たりばったりなことばかりなので何においても先のことを考えて動くことを意識していこう。

エンジニアとしての目標

今日、エンジニアとしての次の半年の目標を立てました。その前にこの半年で気づいたことがあるのでメモ。

自分はエンジニアとして何がしたいのか?

この半年はムームードメインのユーザー登録数を向上させるという目標を立てました。結果的には大成功と思ってます。成果が出たこともそうですが、自分がどういうことをやりたいかがわかった気がしました。ガッツリエンジニアリングするのも楽しいのですが、サービスを継続させていくには利益が必要で、その利益を多く出すためにどうすればいいか考え、それを形にして成果を出していくのが好きなのだと感じました。ディレクション目線というか。

何のためにエンジニアがいるかをシンプルに考えると理由は2つかなと思いました。

  • 利益を出すためにサービスをつくり、修正する
  • 一緒に働いている人が働きやすい環境を技術を使ってつくる

最近のエンジニアは技術スキルも高く、コードを書けるのは当然で+αのものが求められていると感じます。サービスの利益追求や改善、提案することもできるようにならなければ生き残れない時代になってきていると思います。ペパボでもエンジニアの評価の基準として日々の仕事ができるのは当然で、プラスでエンジニアとして何ができるかが求められます。

プラスで何ができるかがエンジニアごとの個性になってきます。自分は何が得意で好きで、他のエンジニアにこれだけは絶対に負けないというものを持たないといけません。持っていなかったとしても、成長していった時にこれだけは負けないとするものを何にするのかを意識することが大事だと思いました。

エンジニアとして成長するためには勇気が必要

エンジニアとして成長していくためにはブログを書いたり、イベントで登壇したりアウトプットが非常に重要です。しかし自分も含めそれに慣れてない人間は最初飛び込むときには結構な勇気がいります。やらないならやらないでもエンジニアとしてぼちぼち食ってはいけるし、わざわざ大変な道を行かなくても・・と心のどこかで思ってしまいます、やっぱり。本音はアウトプットが大事だと頭ではわかっているけどやらないというエンジニアがほとんどだと思います。

この下半期は少しの勇気を持って取り組んでいこうと思っています。その先にはいいものが見えると信じています。