大ちゃんの駆け出し技術ブログ

RUNTEQ受講生のかわいいといわれるアウトプットブログ

【無職に転生 ~ 就職するまで毎日ブログ出す_30】【Rails】simplecov

はじめに

こんにちは、大ちゃんの駆け出し技術ブログです。

タイトルにあるとおり【無職に転生 ~ 就職するまで毎日ブログ出す】というチャレンジをしています!!!!昨日までは就活するまで本気出すでしたが、これだとまるで就活後は頑張らないのかと思われてしまいそうで、、、大人気アニメのタイトルのまるパクリチャレンジです。

https://i.gyazo.com/3a02b7aae4e5e538130d4bb199b55dc7.png

RailsやらRubyやらSQLやらその他Webの知識やらが色々と抜け落ちているのを感じており、知識の定着のためにもアウトプットする機会を増やすためです。加えて、退職して文字通り無職に転生しましてプロニートになり、毎日時間に余裕ができたので引き締めるためにも毎日投稿を思い至りました!

【投稿内容】

  • SQLの難しい処理 (副問合せ、JOINとか複雑な処理が書けない)
  • Rails全般 (純粋に必要な知識が多すぎる、網羅的な理解が足りない)
  • Rubyのあまり使わないメソッドや記述方法 (あまり重要ではないけど特に)
  • Web知識全般 (クッキーやら、セッションやらなんとなくで理解しているものの自分の言葉で説明できない)
  • 書籍 (スタートアップ企業に勤めるので、自分が会社に与える影響やパフォーマンスを高めるためビジネス書を読んでいきます。)

本日やること

テスト解析ツール simplecovについて紹介します。導入も非常に簡単で使い勝手も保守が好きな自分としてはかなりいいと思っています。たいていテストは蔑ろにされがちですが、こちらを使っていかに自分たちのコードがテストされていないかを見てみるのもいいと思います。

RSpecを使っていることを前提とします。

概要

自分たちが書いたテストの結果どれだけ網羅できているか?意図した箇所が網羅されているか?など分析できるツールです。以下のような画面で走っているコードからテストのcoverage(どれぐらいテストが網羅されているか)を確認してくれます。

GitHub - simplecov-ruby/simplecov: Code coverage for Ruby with a powerful configuration library and automatic merging of coverage across test suites

https://i.gyazo.com/d7ac409413d92dbec50b1f34955d0606.png

導入方法

導入方法を紹介します。まずはいつも通りGemfileに記述します。開発環境とテスト環境でしか使わないため、プロダクション環境でgemを使うように指定しましょう。

group :development, :test do
  gem 'simplecov', require: false
end

インストールします。

$ bundle install

次にrspec_helper.rbに以下の記述を追加します。

require 'simplecov'
SimpleCov.start 'rails'

※ 記述する場所はRSpec.configureの外側にします。

# spec/rspec_helper.rb

RSpec.configure do |config|
  # rspec-expectations config goes here. You can use an alternate
  # assertion/expectation library such as wrong or the stdlib/minitest
  # assertions if you prefer.

・
・
・
end
require 'simplecov'
SimpleCov.start 'rails'

導入としては以上になります。最後にgitignoreに以下の記載をしましょう。

# .gitignore
/coverage/

使用方法

まずはrspecのテストを実行

$ bundle exec rspec

実行するとターミナルの1番下に下記のような表示が出るのがわかります。Coveage reportとあるようにどれぐらい網羅されているのかのレポートが作られたようです。

Coverage report generated for RSpec to /xxxxxx/xxxxx/xxxx/xxxx/xxxxx/xxxxxxx/ideee/coverage. 86 / 519 LOC (16.57%) covered.

https://i.gyazo.com/8a235d4e21d308be0ded7a574c8252f0.png

simplecovを導入後に実行するとcoverageディレクトリが作成されていることがわかります。先ほどgitignoreでディレクトリを追加したのはこのためです。ディレクトリの中にindex.htmlがあることを確認できると思います。

https://i.gyazo.com/c007ac394fe6d91563105e15381fbcd6.png

このindex.htmlをブラウザ上で開くとテスト解析結果が確認できます。

https://i.gyazo.com/d7ac409413d92dbec50b1f34955d0606.png

現在タブではALLと指定しているのですべてのファイルでのCoverageを確認していますが、ControllerやModelごとにテストの割合を確認することもできます。

注意: 100%を目指さない

simplecovで網羅率100%を目指すのはほぼ無理です。あくまでテストの割合があまりにも少ないファイルがないかを視覚的にわかるようにするツールです。主機能がどこであるかや会社の方針によってsimplecovの活用方法は大きく異なると思うので、網羅率100%を目指す必要はまったくありません。

参考記事

simplecovでRspecのテストを書くが楽しくなった話 - Qiita