2019-06-19

【Git×Twitter】連携 & 通知してコミットの質を上げよう

いつも私は Git のコミットメッセージを適当に済ませてしまうのですが、git push するとツイートされる仕組みを導入したらコミットメッセージの質が格段に上がりました。

導入前

・Translating JS to C++ ...
・Translating JS to C++ now...
・Translating JS to C++ ... libuuid used.
・Merge pull request #8 from blue-hood/twiemoji  …
・Use Twemoji to display same font each OS.

導入後

・WebAssemblyのpthreadはcreateの数に上限があるらしいからお洋服買ってくる。
・Component は Sketch の unique_ptr にして高速化。for 文での参照渡しを徹底した。
・shared_ptr の循環参照を解消し、高速化のため weak_ptr ではなく生ポインタで代替しました。
・シミュレーション時は生ポインタと参照渡しを使って高速化した。
・C++ の高速化をする前にバックアップコミットします。

(英語から日本語に変わってるのはさておき、)コミットメッセージの内容が具体的になりました。また、Twitter を意識してかちょっと感情的なところもちらほらありますね。このような Git と Twitter の連携をサーバーレスで導入する方法を紹介します。

インストール方法

2019/03/30 gitwitter のレアケース対策をしました。

    Webhook は意外と不便

    Git と Twitter の連携でメジャーと思われるのは、Webhook を利用する方法です。GitHub や Bitbucket には、リポジトリへの push イベントごとに POST リクエストを投げてくれる機能があります。それを別途 Web サーバーで拾ってツイートします。いわゆるクラウドハブはこの機能を利用しているわけですね。

    しかし、クラウドハブを利用するには月額料金がかかったり、無料だとしても月ごとの使用回数に制限があったりします。また自前で Webhook を拾うには、サーバーが必要なのはもちろん HTTPS 通信をするためのドメインと証明書なども必要になります。Git の push をツイートするためだけに Webhook を利用するのは、ちょっとオーバーな気がします。

    また、実際に私が Webhook を導入してみて思ったのは、ツイートするかを毎回制御できないため不便だということです。たとえば、タイポを修正するだけのささいな push に対してもツイートされてしまい、手動で無駄なツイートを消すということがありました。タイムラインを荒らしてしまったと思いますね。

    サーバーレスで連携する

    そこで、Webhook を使わずクライアントで動かす連携アプリを作ることにしました。これならサーバーレスだしツイートするかも毎回決めることができます。ツイートする文章はシェルスクリプトで git log を呼び出したりして組み立てました。ツイートするには TwitterOAuth を使って Twitter REST API を叩く PHP スクリプトを書きました。使い方はこんな感じです。

    $ commit -m "gitwitter のテストです。"
    $ gitwitter
    

    インストール

    私が適当にスクラッチした tweet コマンドと gitwitter コマンドのインストール方法を紹介します。自分の GitHub アカウントでしかテストしてません、問題があったら MIT ライセンスなので自由に改変しちゃってください。

    tweet コマンド

    GitHub: Hato6502/tweet

    コマンドラインからツイートします。標準入力から読み込む汎用的な作りにしたので、Git との連携以外にも応用できるかもしれません。

    $ echo "tweet コマンドのテストです。" | tweet
    

    (1) /usr/local/src などにダウンロードします。

    # cd /usr/local/src
    # git clone https://github.com/Hato6502/tweet
    

    (2) Composer で依存パッケージをインストールします。

    # cd tweet
    # composer install
    

    (3) Twitter API の設定をします。

    # mv config.php.example config.php
    # nano config.php
    

    (4) コマンドのシンボリックシンクを張ります。

    # cd /usr/local/bin
    # ln -s /usr/local/src/tweet/tweet
    

    gitwitter コマンド

    Gist: Hato6502/gitwitter

    Git のコミットメッセージを収集してツイートし、git push します。直接 /usr/local/bin などに配置すればインストール完了です。push 先の URL などによって正常動作しない場合や、ツイート内容の調整をする場合は編集してください。引数を指定すると、そのまま git push の引数になります。

    git コマンドを使いこなすための参考資料集

    私自身 git コマンドは使いこなせていないのですが、今回のスクリプトを作るにあたって「まだリモートに push してないコミットを取得する方法」や「ログの出力形式を指定する方法」、「リポジトリ名ブランチ名ハッシュ値を取得する方法」などを調べました。git コマンドはシェル芸しやすいのでぜひ参考にしてみてください。

    余談

    当初 gitweet コマンドという名前にしようと思いましたが、同名の Web サービスが既にあったので gitwitter コマンドにしました 🙄

    この記事の執筆者

    hato6502

    hata  

    中学生の頃に 6502 という CPU からプログラミングの世界に入りました。 C/C++ で1から作ることも好きですが、最近は変化の激しい IT 業界をみて Web 系にシフトしつつあります。