雑草SEの備忘録

東大を卒業し、SEとして働くことになった。備忘録的に作業を綴る。

RailsリポジトリをTravisCI, CodeCov, CodeClimateと連携

Ruby on Railsエンジニア2年目で初めて本格的にRails newをして諸々の初期設定をしたので備忘録的に作業を綴ります。

CIツールはCircleCIなどいくつかありますが、今回はTravisCIを利用させていただきました。

TravisCIの設定

language: ruby

rvm:
 - 2.3.1
services:
 - postgresql
bundler_args: '--without development --deployment'
cache: bundler
before_script:
  - cp config/database.travis.yml config/database.yml
  - bundle exec rake db:create
  - bundle exec rake db:migrate
script:
  - bundle exec rspec spec
  • config/database.travis.ymlを追加します。↑のbefore_scriptのところでcpしているファイルですね。
test:
  adapter: postgresql
  database: travis_ci_test
  username: postgres
  • Travis CIのバッチをREADME.mdに追加したい場合は追加してください。
[![Build Status](https://travis-ci.org/[your_account]/[your_repository].svg?branch=master)](https://travis-ci.org/[your_account]/[your_repository])

CodeCovの設定

gem install travis

travisのgemをインストールします。Gemfileに書いてbundle管理下にしても良いかと思います。

group :development do
   gem 'travis'
end
  • spec/spec_helper.rbを修正。(rspecを使っている場合)
require 'simplecov'

SimpleCov.start 'rails'

if ENV['CODECOV_TOKEN']
  require 'codecov'
  SimpleCov.formatter =  SimpleCov::Formatter::Codecov
end

RSpec.configure do |config|
  (省略)
  • coverageディレクトリができるので、git管理から外しておくと良いでしょう。
/coverage
  • CodeCovに行ってGitHubでSignUpし、自分のリポジトリを追加します。
    • Repository Upload Tokenが出てくるのでコピーしておきます。
  • travisコマンドでCODECOV_TOKENを暗号化します。
    • Gemfileに追加した場合、bundle execが必要な場合あります。
travis encrypt CODECOV_TOKEN=[Repository Upload Token]
  • そうすると次のような意味不明な文字の羅列が出てくるのでそれをコピーし、
secure: "zaZ/DaFV・・・"
  • .travis.ymlに追加します。(本当はもっと長い。ターミナルの横幅にもよるが、100文字ぐらいで6行ほど)
env:
  global:
    - secure: "zaZ/DaFV・・・"
  • これでGitHubにpushしてテストが終わると自動的にCodeCovに情報が通知され、カバレッジが見れるようになります。
  • バッジをREADEME.mdにつけたい方は、以下のようなコードを埋め込んでください。CodeCovの画面上からも取得できます。
[![codecov.io](https://codecov.io/github/[your_account]/[your_repository]/coverage.svg?branch=master)](https://codecov.io/github/[your_account]/[your_repository]?branch=master)

CodeClimateとの連携

  • カバレッジの取得だけでよければCodeCovでいいかと思います。逆に、カバレッジ以外のメトリクスも欲しければCodeClimateを利用して、CodeCovは必要ないでしょう。今回は欲張り的に2つ入れてみたいと思います。
  • カバレッジを取得しないのであれば、CodeClimateのサイトに行きGitHubでSignUpし、自分のリポジトリを追加すれば良いです。
  • バッチをREADME.mdに追加したい場合は、以下のような感じで。
[![Code Climate](https://codeclimate.com/github/[your_account]/[your_repository]/badges/gpa.svg)](https://codeclimate.com/github/[your_account]/[your_repository])
  • カバレッジを取得したい場合は、CodeClimateの右下にあるTest Coverageのところからトークンを取得し、CodeCovと同じように暗号化します。
travis encrypt CODECLIMATE_REPO_TOKEN=[token]
  • .travis.ymlに追加する。
env:
  global:
    - secure: '・・・' # CodeCov用
    - secure: '・・・' # CodeClimate用
  • .travis.ymlにCodeClimateに送信するコマンドを追加します。
after_success:
  - bundle exec codeclimate-test-reporter

以上、一通り作業を終えてから振り返り的にメモをしているので抜け漏れがあるかもしれませんがその際はご指摘お願いします。