インフィニットループ 技術ブログ

2013年02月06日 (水)

著者 : ono

PythonでGit/Subversionコミット情報をSkypeに送るスクリプト書いた

こんにちは。onoでございます。
今回は、内製ツールを紹介したいと思います。
弊社では業務のやりとりにSkypeチャットを利用しています。
なのでコミットされた内容もついでに流れてくれるとありがたいよね、という理由でちゃちゃっと作りました。
「◯◯のため△△修正したファイルをpushしました、確認お願いします」とか毎回書くのは避けたい、のが本音です。
このツールは、GitSubversionのコミット情報をローカルで監視しつつSkypeで通知するのが仕事です。
初稼働はかれこれ1年以上前で、最初にGit版をつくり、続いてSubversion版を別スクリプトに切り出してたのを、1本にまとめたことをきっかけに今回のエントリとなりました。
さっそく、実際に通知された例を挙げていきます。

Skype表示例

Gitのコミット通知

Subversionのコミット通知

こんな感じで表示されます。
またGitSubversionに加えてgerritのオープンログを見に行って通知するモードもあるのですが、”gerrit query”が有効であること」に依存しているのが要注意な点です。

gerritの通知

この手のツールはおそらく他にもあると思いますが、
私の場合、リポジトリ本体が手元にないという制限された環境が、自作した理由の1つです。

動作環境

Python:
2.7.2
※他バージョンは未確認
Required modules:
ConfigParser, Skype4py, xml.etree.ElementTree
はい、Pythonなのです。
弊社はPHP採用が圧倒的に多いのですが、数時間でこういったツールつくりあげるならPythonで手っ取り早く、という個人的趣向でこうなりました。

使い方

初期設定

$ python ./cinotifier.py init {svn,git,gerrit}


Skype chat name: 通知先のSkype窓名(グループ窓名である必要があります)
Repository directory path: リポジトリへのPATH
gerrit版は設定内容が異なります、が割愛します

開始

$ python ./cinotifier.py start {svn,git,gerrit}

※予めSkypeクライアントを起動&ログインしておいてください

終了

$ python ./cinotifier.py stop {svn,git,gerrit}

ctrl+cで強制終了、もしくは実行時に&付きで後ろに回してる場合はstopコマンドで終了できます。

その他・注意事項等

  • 標準では1分に1回チェックする(設定ファイル「global.interval」を書き換えで変更可能)
  • 実行者のSkypeクライアントにAttachしてるので予めクライアント起動の必要がある
  • CronやDaemon対応してない
  • upなりfetchなりを実行しているので、実開発用のリポジトリを指定するのは避けましょう

実行者自身の発言となるので、Skype未読対象にならず気づきにくいという難点はありつつも、チーム運営上では貢献できます。

ソースコード

https://github.com/maosanhioro/cinotifier
使ってみると結構便利!なはずですので、機会があればご利用ください。

追記

Macの64bit環境下でのPythonの場合、pip経由のSkype4pyはSegmentation faultを引き起こして落ちます。
これは既知の問題らしく、根本解決とは違う気がしますが32bit化させることで対応可能なようです。

$ python ./cinotifier.py check

上記で簡易チェックができます。
64bitだった場合は、力技で解決する方法が出力されますのでご参考までに。

続・追記

かつては社内有志によって、他言語実装によるforkが乱立した時期もありましたがそれも収束し、現在はレビューアー指定、レビュー依頼及び結果通知を担当し、実行者依存することがなくなった拡張版ともいえるバージョンが独立Botとして稼働してます。

ブログ記事検索

このブログについて

このブログは、札幌市・仙台市の「株式会社インフィニットループ」が運営する技術ブログです。 お仕事で使えるITネタを社員たちが発信します!