ごちゃペディア

はなまるデジタル創作紀行(DTM、TAS、いろいろな技術)

GitHubへのコミットをIRCにリアルタイム通知するには?

GitHubリポジトリにコミットしたとき、CIA.vcを利用してIRCにメッセージが飛ぶようにします。簡単、無料です。

GitHub の設定

  1. リポジトリの Admin ページを開く (管理者アカウントが必要)
  2. Service Hooks をクリックして、一覧からCIAを選択
  3. Active にチェックを入れて、Update Settings で変更を保存

これだけ、じつに簡単です。ほかにも Twitter などとも連携できるようです。

CIA.vc の設定

アカウントを持っていなければ、CIA.vc - Register an Account から登録してください。アカウント名やメールアドレスなど、若干の基本的な情報を聞かれるだけで簡単、無料です。また、アカウント名以外はあとから変更できます。

アカウントが準備できたら、ログインして CIA.vc - Your Account ページを開きましょう。

まず、通知メッセージを流したいチャンネルを追加します。左側のメニューから Bots → Add bot... とクリック、サーバとチャンネル名を入力して Add します(例:Freenode, TASers)。

追加されたチャンネルが一覧に表示されるのでクリック、Filter by project を選択して入力欄にプロジェクト名を入力してください(たとえば https://github.com/snes9xgit/snes9x の場合であれば snes9x と入力する。また、複数のプロジェクトの状況を監視したければ改行区切りで入力する)。Save を押して変更を保存すれば、これで指定のIRCチャンネルにコミット情報が通知されるようになります。

高度なフィルタリング (forkの考慮)

上記の方法でプロジェクトを追加すると、forkによる派生版の情報もIRCに流されます。派生リポジトリが本家のアップデートをマージすると、その分のコミット情報もすべて流れてきます。いくつか派生版があって、それらすべてがこまめに本家リポジトリの更新を取り込んでいるとすると、IRCに同じ情報が何度も流れてきて非常に不都合です。

状況を改善するには、Filter by project の代わりに Custom filter を選択して、より細かなフィルタリングを行います*1。フィルタリングの記法は CIA.vc - Advanced Filtering で説明されています。難しくはないので、内容に関しては割愛します。

以下にフィルタの例を示します。snes9xgit/snes9x の gocha さん以外からのコミットと、snes9x-rr の gocha さんからのコミットだけを通知しています。

<or>
  <and>
    <match path="project">snes9x</match>
    <or>
      <and>
        <find path="url">github.com/snes9xgit/snes9x</find>
        <not><match path="author">gocha</match></not>
      </and>
      <and>
        <find path="url">github.com/snes9x-rr/snes9x</find>
        <match path="author">gocha</match>
      </and>
    </or>
  </and>
</or>

<formatter medium="irc"/>
<formatter name="IRCProjectName"/>

なお、特定の人のコミット情報は http://cia.vc/stats/author/gocha のようなURLから閲覧可能です。Link をたどるとコミット情報を記した XML データを閲覧することができます。フィルタの作成にあたっては、一度どのようなデータが含まれているか眺めてみると役に立つことでしょう。

*1:Filter by project と Custom filter の併用はできない。乗り換える場合は <match path="project"> を記述して同等の効果を得るようにする。