📑

coverband入れるよ

2025/02/07に公開

Daily Blogging48日目

ついにこの時が来たか
グッバイデッドコード

前に紹介したcoverbandをプロダクションコードに入れることになりました
まだマージ自体はしてないけどとりあえず開発環境に入れたのでその備忘録

入れるのは超簡単

これをGemfileに追記して

gem "coverband"

これをapi.rbに追記するだけ

mount Coverband::Reporters::Web.new, at: "/coverage"

最後に環境変数で接続先のRedisのURLを設定すればOK

はい簡単っ!

mountって何???

ちょっと待って何そのルートの書き方
調べてみると、coverbandはRailsエンジンと呼ばれるものらしい
公式によると

Railsのエンジン(engine)は、ホストとなるRailsアプリケーションに機能を提供するミニチュア版Railsアプリケーションとみなせます。この場合、ホストとなるRailsアプリケーションは、実際にはエンジンに「ターボをかけた」ようなものにすぎず、Rails::ApplicationクラスはRails::Engineから多くの振る舞いを継承します。
すなわち、エンジンとアプリケーションは、細かな違いを除けばほぼ同じであると考えられます。本ガイドでもこの点をたびたび確認します。エンジンとアプリケーションは、同じ構造を共有しています。

すごくざっくりいうと、導入先のRailsアプリケーションに入れられるミニRailsアプリのこと。
ミニと言ってもRailsアプリなので、普通のRailsアプリみたいにcontrollerやルーティングがあるらしい。

この導入したミニRailsアプリのルーティングを導入先のRailsアプリケーションでも有効化するためにmountをする必要があるんだとかないんだとか

設定をちょっと追加する

coverbandの設定ももちろん色々いじれる。
下記のファイルを作って設定を記述していく
config/coverband.rb

今回はこんな感じ

Coverband.configure do |config|
  config.logger = Rails.logger

  # 集計除外ファイル
  config.ignore = ["config/.*",
                   "bin/.*",
                   "client/.*",
                   "packs/.*",
                   "test/.*",
                   "spec/.*",
                   "lib/.*"]

  # coverbandのログ出力の有無
  config.verbose = false

  # ブラウザ上で集計をクリアできる
  config.web_enable_clear = true

  # 計測の間隔
  # 短いとRedisへの負荷が高くなる
  config.background_reporting_sleep_seconds = 300
end

ignore

計測する必要ないファイルとかもあったのでそれは除外対象に追加
この対象が多いと計測結果のデータサイズが肥大化していくので、選定は必須かなと

web_enable_clear

/coverbandにアクセスしたときに表示される計測結果画面上に、
データをクリアするためのボタンを表示するかどうかを決める

background_reporting_sleep_seconds

どれくらいの間隔で集計していくかを秒数で設定する。
これは正直適正値がわからないので、公式が推奨している数値を採用

集計結果の格納

coverbandの計測結果は、Redisに格納される。
正直データ量がどれくらいになるのかが不透明なので、今回はcoverband用に新しくRedisを立ててそこにデータを格納していく。
ちなみに、公式的にはAWSのRedisのインスタンスタイプは小さめのタイプでも十分だって言ってる。

Redisの中の...

Redisといえば内部に幾つかのdbを持っているが、coverbandのデータはdb[0]に格納されてた。
dbを選ぶ設定はぱっと見で見つけられなかったので多分変えられない??

キャッシュクリア

web_enable_clear=trueにするとブラウザ上からcoverbandのキャッシュをクリアできるようになる。
このキャッシュクリアで一体何がクリアされるのかというと、db[0]に格納されたcoverbandというキーに紐づいたデータだけがクリアされる。
なのでdb[0]に他のデータが格納されていた場合でもそれらに影響が及ぶことがない。

まとめ

とりあえず1ヶ月間計測してみて、どれくらいのデータを計測できるのか確認してみる。
計測しておしまいにならないように、デッドコードをどのタイミングでどう扱うかなどはチームで話していきたい。
※coverbandを導入した企業によっては、計測結果を基にCI/CDでデッドコードを削除する仕組みを作ったりしているらしい

Discussion