GithubとSlackとCircleCIとCodeClimateとci-bundle-updateでぼっち開発環境を作ってみた

GithubとSlackとCircleCIとCodeClimateとci-bundle-updateでぼっち開発環境を作ってみた
LINEで送る
Pocket

先日公開した日本語解析API(+α)を使用して日本語の文書校正を効率化してみるにて、

と色々なツールを試してみたので、そのまとめを残したいと思います。

目次

  1. 完成図
  2. リポジトリを作る
  3. Githubの通知をSlackに送る
  4. Pull Requestが来たらCircle CIのテストを走らせる
  5. masterにマージされたらCode climateのチェックを走らせる
  6. Circle CIで走らせらせたテストのカバレッジをCode climateに送る
  7. ci-bundle-updateで毎日bundle updateを実行してPull Requestを送る
  8. まとめ

完成図

完成図

雑ですがアイキャッチ画像に書き足してみました。
Slackに通知を飛ばすのは書くまでもなく、矢印が煩雑になるだけなので割愛しました。

やりたいことは目次に分割しているので、1つずつお話したいと思います。

リポジトリを作る

大前提です。ちゃちゃっと作ってしまいます。
リポジトリの作成にはhubコマンドを使用しています。

ついでに連携する各サービスのアカウントも作成しておきます。

Githubの通知をSlackに送る

https://{slackのチーム名}.slack.com/services/new
を開くと、各種サービスとの連携ができます。

スクリーンショット 2015-09-06 22.38.37

Githubの設定を行います。
特に詰まることはなく、画面に従えば問題なく設定できるかと思います。

Pull Requestが来たらCircle CIのテストを走らせる

Circle CIは、テストを走らせたりデプロイしたりするCI系サービスです。 似たサービスとしてTravis CIWerckerがありますが、
それらは使ったことがあったので、今回は使ったこと無いCircle CIを使ってみました。

Circle CIにログインし、Githubに登録したリポジトリをCI対象として登録します。

そしてリポジトリにCircle CIの設定を行います。
ドキュメントはこちらです。

YAMLファイルでもRubyのバージョンを指定できるそうなのですが、.ruby-versionの方が汎用的かと思いそちらを使用しています。

連携が完了していると、pullリクエストを作成した時に以下のようになると思います。

スクリーンショット 2015-09-06 22.53.13

少し待って

スクリーンショット 2015-09-06 22.53.33

となればビルドに成功した、ということになります。

今後Circle CIとの連携を増やしていきますが、基本はこれです。
ビルドに通らない場合はだいたいが設定ミスです。

ついでにSlackとの連携も済ませておきます。

スクリーンショット 2015-09-06 23.39.50

masterにマージされたらCode climateのチェックを走らせる

Code climateはコードの静的解析ツールです。
連携しているGithubのリポジトリ内のコードに静的解析をかけ、問題が有れば指摘してくれます。
対応している言語はRuby, PHP, Python, jsです。

Code climateにログインし、対象のリポジトリを有効にしておきます。
初回起動までが結構長いので、先にやっておくと良いです。

スクリーンショット 2015-09-06 23.02.36

初回の分析が終わるとこのような画面になります。
1ファイルD評価取って急いで直した履歴は見なかったことにして下さい。

全ファイルがA、GPAが4.0なら指摘事項なし、という意味になります。

次に、GithubのPull requestと連携させます。
まずGithubのPersonal access tokensを開き、Code climate用のアクセストークンを生成します。
名前は自分で分かる適当な名前、スコープはrepo:statusが選ばれていれば問題ないです。

生成されたトークンをコピーしておきます。
トークンが表示されている画面から 別画面に行くと2度とコピーできなくなる ので注意が必要です。

settingsの中にある「Integrations」タブを開き、「GitHub Pull Requests」を選択します。

スクリーンショット 2015-09-06 23.20.38

コピーしておいたアクセストークンを貼り付けて貼り付けて設定完了。
これでCircle CIのようにPull request時にコードのチェックがかかります。

と思ったのですが 、オープンソースのリポジトリは常にポーリングしているのでPR連携は提供してませんよ、とのこと。

Note: If you added your repository by clicking Add Open Source Repo, Code Climate will always check for new commits based a poll or when you manually trigger a refresh. We don’t yet support service hooks for these types of repositories.
GitHub Pull Request Integration
How do I install Code Climate’s Github service hook?

ついでにCode climateもSlackと連携させます。

スクリーンショット 2015-09-06 23.40.54

Circle CIで走らせらせたテストのカバレッジをCode climateに送る

ここまでの設定で、

  • pushした内容がテストに通ること
  • 静的解析で判別可能な良くないコード

は判定可能になりました。ついでなのでテストのカバレッジも出力してみたいと思います。

スクリーンショット 2015-09-06 23.43.18

Code climateのsettingsを開き、「Test Coverage」を選択します。
ドキュメントが出てくるので手順通りに進めます。

マニュアル内のCODECLIMATE_REPO_TOKEN=....となっている箇所をCircle CI側にも指定する必要があるのでコピーして貼り付けます。
Circle CIのプロジェクト設定の、「Environment variables」に設定します。

スクリーンショット 2015-09-06 23.45.38

Githubにプルリクエストを作ってマージし、Code climateにカバレッジが出れば成功です。

スクリーンショット 2015-09-06 23.48.32

さりげなく2重の丸に変わっているのがおしゃれでよいですね。

ci-bundle-updateで毎日bundle updateを実行してPull Requestを送る

YAPC::Asia Tokyo 2015にてesa.ioの中の人の素敵なプレゼンをお聞きし、
プレゼン中に出てきたci-bundle-updateがとても良いと思いました。

これから毎日bundle updateしようぜ?

ということで早速導入。
解説記事の内容でハマったところがあったので、改めて記事として手順を残します。

このように circle.yml の deployment section を変更します。
https://github.com/masutaka/masutaka-29hours/commit/0ba9ef03348568baaa5cf271d4f6e41305f8fdfe

とありますが、ここでハマりました。
./script/deploy-circleci.shなんて無いぞ・・・?Circle CIでのお決まりなのかな・・・?
と思いながらそのまま書いたら、案の定ビルドにコケました。なので以下のように修正

これでビルドが通るようになりました。 もう1個ハマりました。

環境変数 BUNDLE_UPDATE が指定されていたら、circleci-bundle-update-pr gem をインストールして、同コマンドを実行しています。この環境変数は後述するトリガーが設定してきます。

とあったので、Circle CI側にも環境変数の設定が必要なのか・・・?
と思って指定したらビルド通らなくなりました。

日本語読めよ という話なのですが、Circle CI側にはこの環境変数の指定は不要です。

他は特に詰まることは無かったので、解説記事さまを呼んでいけば設定完了すると思います。 これで毎日bundle updateして何かアップデートがあればPRが飛ぶようになりました。

ちなみに、Rubyのプロジェクトだけでなくnpm(Nodejs)やcomposer(PHP)など幅広く対応しているtachikoma.ioというサービスもあるようです。
しかし今回はRubyのプロジェクトなので、tachikoma.ioよりRubyに関して高機能なci-bundle-updateを使用しました。

tachikomaについては別途Nodeのプロジェクトで試している最中なので、また記事を書きます。

そういえば、npmのci updateはDavidではなくshrinkwrap使わないんですかね…、bowerにもshrinkwrapの機能が検討されているようなので、そちらも対応されたら対応するのかなー、なんて思っています。

まとめ

全部設定するとSlackがだいぶ賑わってきます。

スクリーンショット 2015-09-06 23.51.04

一人じゃんけん感はんぱねぇ・・・!

自分でPull request作ってマージしてブランチ消した途端Slackの通知が
スポポポポッ ってなって 「うん、知ってる。」 ってなる!!

意識高そうな感じでやってる感はすごく出るので、一人でも比較的モチベは保ちやすいかなと思います。
ぼっち開発環境第一弾、ひとまず完成です。

スクリーンショット 2015-09-06 23.54.55

LINEで送る
Pocket

  • masutaka

    > ./script/deploy-circleci.shなんて無いぞ・・・?Circle CIでのお決まりなのかな・・・?

    言葉足らずですみません。こちらは master でテストが成功したらデプロイする、このリポジトリの通常パスです。今回の件とは直接関係ありません。

    • いえ、こちらこそ理解が浅くてすみません。。。

      現在は解消しているので問題ありません!