PullRequestされたときChatworkに通知されるようにしてみた

Bitbucket 上で Pull Request やコメントをしたとき、任意の Chatwork グループチャットにポストしてくれるツールを作りました。

ソースは Github に。(Bitbucket 用のツールだけど)
https://github.com/ymm1x/BitbucketEventNotification

通知投稿されるタイミング

  • Pull Request を作成したとき
  • Pull Request にコメント、返信したとき(コードレビュー)
  • Pull Request を取り下げたとき
  • Pull Request をマージしたとき

通知表示のサンプル
(通知表示の例ですが一部塗りつぶしてあります。)

あまり多くの機能はつけていないので、運用してみつつ気が向いたときに欲しい機能を付け足していこうと思っています。

使用 API

作った経緯とか開発サイクルとか

今の携わっているプロジェクトでは A successful Git branching model に近いブランチ運用モデルを採用していて、ざっくり、以下のようなサイクルで開発しています。

  1. 開発用ブランチで開発やコード修正を行う
  2. Pull Request を作成し他のエンジニアがコードレビュー
  3. Pull Request の承認数 (Approval) が一定数に達したらメインブランチにマージ(祝)

最近の開発現場では割とありがちな流れだと思いますが、これまでの業務では開発が一段落して Pull Request を作成したことをチャットで毎回他のメンバーに知らせてレビューしてもらって…という流れがあったので、この流れをスムーズにできないかと思って作りました。

ちなみにこのツールは許可より謝罪な感じで、欲しいと思ってから上長に許可をとらずに作りました>< 最近、あったほうが便利だと思うものはすぐに作り始めるようにしています。

今日から実際に業務で使い始めてみてますが、便利ならそのまま使われるし、そうじゃなければ使われなくなるだけということで。

HipChat + hubot とかならもっと楽に実現できるのかな?

2015/08/19 03:21 – リポジトリの url が変更になったため更新しました。

SourceTree でハードリセットするときの警告メッセージが怖い

SourceTree で HEAD のポインタをハードリセットモード(全ての作業コピーの変更内容を破棄)で移動しようとしたらこんなダイアログが出た。

警告:破壊的な操作 ハードリセットモードでは、作業コピーとインデックスにあるローカルの変更を全て破壊します。何が起きるか分かっていますね?

「警告:破壊的な操作 ハードリセットモードでは、作業コピーとインデックスにあるローカルの変更を全て破壊します。何が起きるか分かっていますね?

恐ろしい・・・。俺はついに OK を押すことが出来ずに git reset –hard した。

DBテーブルの差分を出力するMySQL::diffをインストールする

二つの MySQL データベースを比較し差分 ALTER SQL 文を出力してくれる perl 製ツール、MySQL::diffのインストール方法です。

このツールは、稼働中のデータベースのテーブルスキーマを最新に更新する場合など使えます。

Usage: mysqldiff [ options ] <database1> <database2>

今回はサーバデプロイ時のスキーマ更新作業を自動化するためにインストールしてみました。上手く使うと DDL のスマートなバージョン管理に一役買ってくれると思います。

コマンドラインツールなので GUI で分かりやすく差分を出力したい場合には不向きです。そういった場合はこのツールよりも MySQLWorkbench を使ったほうが便利でしょう。

MySQL::diff のインストール

MySQL::diff は mysqldiff – search.cpan.org で公開されています。

インストール先を /usr/local/mysqldiff にしました。

wget http://search.cpan.org/CPAN/authors/id/A/AS/ASPIERS/MySQL-Diff-0.43.tar.gz
tar xzvf MySQL-Diff-0.43.tar.gz
mv MySQL-Diff-0.43 /usr/local/mysqldiff

/usr/local/bin/mysqldiff にシンボリックリンクをはります。

ln -s /usr/local/mysqldiff/bin/mysqldiff /usr/local/bin/mysqldiff

これでインストール完了と言いたいところなのですが、このままだとパスが通っておらず以下のエラーが起こります。

Can't locate MySQL/Diff.pm in @INC (@INC contains: /usr/local/mysqldiff/bin /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /usr/local/bin/mysqldiff line 112.
BEGIN failed--compilation aborted at /usr/local/bin/mysqldiff line 112.

このエラーを修正するために、ソースコードの冒頭に use lib 文を一行追記します。

vi /usr/local/mysqldiff/bin/mysqldiff
#!/usr/bin/perl -w
use lib '/usr/local/mysqldiff/lib';

=head1 NAME

また、CentOS の場合では CPAN で File::Slurp をインストールする必要がありました。

cpan
cpan > install File::Slurp

mysqldiff コマンドを空打ちしてみて、usage が表示されれば無事にインストール完了です。