とよぶ

歌いながらコード書いてます

CircleCIを活用した歌詞添削運用フローの自動化

この記事は CircleCI Advent Calendar 2015 - Qiita の21日目の記事です。

これまでの歌詞添削フロー

僕はプログラマーをやる傍ら、音楽活動をやっています。
最近は作詞作曲に手を出し始めているんですが、作詞に関してはボーカルの先生のレビューがあります。

歌詞はGithubのプライベートリポジトリで管理していて、その先生には毎週あるボーカルレッスンの際に歌詞を見ていただいています。

しかし、毎週ボーカルのレッスンまでレビューを待ってると、歌詞作成から時間がかるし、スピード感が出ません。 やっぱりレビューはオンライン! そしてフローも自動化!

それってCircleCIできるよ!

要件

  • 先生にあれこれ登録してもらうのを避ける(学習コストの最小化)
    Githubだけは登録していただきますw
  • 自分がGithubに歌詞をpushしただけで先生に通知する

まあ一般的なソースコードレビューのフローですね。

本当はSlackとかに登録してもらえば一番楽なのですが、先生にはGithubすら登録してもらうのが申し訳ないくらいなので、 とりあえず今回はレガシーですがメールで通知する形にしますw 全体の動きとしては以下のとおりです。

  1. Githubに歌詞をpush
  2. CircleCIが実行される
  3. mailutilsをinstallしてmailコマンドで先生にレビューを依頼
  4. 先生がPull Requestにコメントをすれば自分専用のSlackを通じて通知される
  5. 歌詞を直して再度push
  6. レビュー(を繰り返す)

実装

まずはcircle.ymlを準備します。

なんか上のほうが繁盛していますが、やってることは以下です。

  1. mailutilsをインストール
  2. Gmail経由でメールを送る設定を追加
  3. postfixを再起動
  4. 特定のブランチへのpushであればメールを送信

はじめに、mailutilsをインストールしようとすると、postfixがインストールされるのですが、 インストール時に設定確認が行われるので、CircleCIだと処理が止まります。

なので、preseedを用いた自動化をしましょう。 CircleCIを使いこなすには、そこそこの自動化スキルが必要ですが、
あえてCircleCIを選択することによって、自分の自動化スキルをあげるのです

( ・´ー・`)どや

次に、幾つか環境変数が用いられていると思いますが、CircleCIに限らず、センシティブなデータは全部環境変数にしてしまいましょう
環境変数にしておけばセキュリティリスクを減らすことができます。
CircleCIにおける環境変数の設定は、
Project Settings -> Environment variables for リポジトリ
の箇所で設定できます。
今回は自分のGmailアドレス、パスワード、レビューしていただく先生のメールアドレスを環境変数にしています。

最後に、deploymentの箇所で、review/〜〜〜のフォーマットに合うブランチへのpushの場合にメールを送信します。 このようにブランチ名に規則性をもたせることで、自分の作業上ブランチ名をある程度自由に設定することができ、無駄なビルドが走ることもありません。

これで楽しい楽しいレビューフローの出来上がりです!

f:id:takasing:20151221121027j:plain

先生!!!(`;ω;´)

TODO

今回時間がなくてできませんでしたが、やれなかったことを書いてみました。

  • メールの本文を日本語にする
    文字化けしましたw
  • Pull Requestのリンクを貼り付ける
    CircleCIからGithubAPIを叩いて一緒にPRのリストを本文にリンク付きで入れるとかですかね
  • 先生向けのGithubのドキュメントを整備

まとめ

作業時間の殆どはpostfixまわりでハマったところでしたねw
ていうかSlackにも登録してもらえばいいんじゃないの!!!?

次はラスボスの id:a-yamada さんです。