読者です 読者をやめる 読者になる 読者になる

Masteries

技術的なことや仕事に関することを書いていきます.

github-pr-releaseが最高に便利だった件について

uiureoさんが開発されたnpmのパッケージ, github-pr-releaseが便利すぎて脳汁がドバドバ溢れでたので紹介します.

リリース時のチェックリスト

何かしらのリリースをする際, 大抵の場合「今回, どのような内容のリリースを行うのか?」についてチェックリストを作るのではないでしょうか.

そしてチェックリストを見ながら, ステージング環境などで動作確認を行い, リリースする内容が期待通り動作するかを確認したりするのではないでしょうか.

自分が開発に携わっているReactioの開発チームでは, これまでリリース時に手動でチェックリストを作っていたのですが, そもそも手動でチェックリストを作るということそのものが面倒ですし, 手動でチェックリストを作る場合, 本来リリースするのでチェックリストに入れるべき内容がチェックリストから漏れてしまう事があったりして, 非常に大変でした.

そこで, 上記のgithub-pr-releaseを使って, リリース用のPull Requestを作るようにしてみました.

このパッケージは, 雑に言えばGithubのPull Requestをまとめて, リリース用のPull Requestをまとめてくれるやつです. 通常, Pull Requestは1つの機能や修正単位で作るので, それをまとめれば勝手にチェックリストになる! という訳ですね.

コード

release  = require 'github-pr-release'
apiToken = process.env.HUBOT_GITHUB_API_TOKEN

release({
  token: apiToken
  owner: 'our_organization'
  repo:  'OurService'
  head:  'master'
  base:  'production'
  template: "./template/release.mustache"
}).then( (pullRequest) ->
  console.log('success!')
).catch( (err) ->
  console.log(err)
)

非常に雑ですが, こういう感じのコードで動きます(Coffeescriptです). これで, productionに対してmasterをマージするようなPull Requestを作成することができます.

また, テンプレート(./template/release.mustache)は, Reactioチームの場合次のようにしています.

Release {{version}}

# リリース内容

{{#prs}}
- #{{number}} {{title}} {{#assignee}}@{{login}}{{/assignee}}{{^assignee}}{{#user}}@{{login}}{{/user}}{{/assignee}}
{{/prs}}

# リリースチェックリスト

- [ ] Assigneeがステージング環境で機能を確認
{{#prs}}
    - [ ] #{{number}} {{title}} {{#assignee}}@{{login}}{{/assignee}}{{^assignee}}{{#user}}@{{login}}{{/user}}{{/assignee}}
{{/prs}}
- [ ] プロダクトマネージャがステージング環境で機能を確認
{{#prs}}
    - [ ] #{{number}} {{title}} {{#assignee}}@{{login}}{{/assignee}}{{^assignee}}{{#user}}@{{login}}{{/user}}{{/assignee}}
{{/prs}}
- [ ] プロダクトマネージャにリリースしてもよいか確認

で, 実際にGithubでどういうふうに見えるかというと, こういう感じです(以前Sandboxリポジトリで試した古いPull Requestなので, 上記のテンプレートと出力が異なっています).

f:id:papix:20151026123740p:plain

いい感じですね!

まとめ

というわけで, github-pr-release, 非常に良かったです. npmのパッケージになっているので, Hubotを使ったChatOpsとも相性が良いのもいいですね(実際, Reactioチームでも, Hubotからgithub-pr-releaseを使ってPull Requestを作っています).

というわけで, 引き続きChatOpsなどやりつつ, 業務の改善, 自動化を進めていきたいと思っていますので, 学びや気付きをブログで公開できればいいなーと思っております.

あわせてよみたい