9章
コード品質を上げる
CI(継続的インテグレーション)
guard
ローカルで自動テストを行う。
GitHub Actionsについていろいろ。Elasticsearchと連携したり。ちょっとよくわからなかった。
Gemの定期update
Dependabotを用いると自動でPRを作ってくれる。
|
|
- PR上からCIの実行結果を確認
- リリースノートを読んで差分を把握
- アプリケーションで影響が出そうな機能の当たりをつけ、重要な差分や機能については事前に手動でテスト
静的解析
RuboCop
rubocop [ファイル名]
- 静的解析する
rubocop -a
- 自動修正する
- 臨むコードに書き換えるとは限らないため、事前にファイルをcommitしておいて差分を確認すべし
- すべての検出項目に対応しているわけではない
rubocops -l
- Lint copsのみ実行する
- このような一部のcopsのみ検査するオプションがある
cop
検査するさまざまなルール
詳しくはCops :: RuboCop Docs
コードの該当行に# rubocop:disabel [cop名]
コメントを書くことで検査をスキップできる
ルール名 | 概要 |
---|---|
Layout cops | インデントやスペースの有無を検査します |
Lint cops | バグの可能性があるコードを指摘しますruby -w のワーニング + 独自の静的解析検査 |
Metrics cops | クラスの長さやメソッドの長さなど、コードの複雑さを測定します |
Naming cops | メソッド名や定数名など、名前に関する検査をします |
Security cops | 脆弱性につながる可能性がある問題など、セキュリティ観点での検査をします |
Style cops | コーディング規約に沿っているかを検査します |
- ruby-style-guide/README.ja.md at japanese · fortissimo1997/ruby-style-guide
- satour/rails-style-guide-jp: 有志による Ruby on Rails 4 のスタイル・ガイドです。
Railsで使う場合
rubocop
の他にrubocop-performance
, rubocop-rails
(拡張Gem)を入れる。
- rubocop-hq/rubocop-performance: An extension of RuboCop focused on code performance checks.
- rubocop-hq/rubocop-rails: A RuboCop extension focused on enforcing Rails best practices and coding conventions.
Gitのコミット前フックを利用する
pre-commitフックでコミット前にRubocopの検査を実行できる。
|
|
RuboCopを段階的に導入する
bundle exec rubocop --auto-gen-config
を実行すると、.rubocop_todo.yml
が作成され、.rubocop.yml
にinherit_from: .rubocop_todo.yml
という記述が追記される。
.rubocop_todo.yml
には、検出した項目についてそれを抑制する設定が書いてある。
このファイルがあるとrubocopコマンド実行時にこの設定も適用される。=これ以上検出されなくなる。
.rubocop_todo.yml
を読んで、抑制したままでいい項目は.rubocop.yml
に移行する。
全部移行したら、inherit_from: .rubocop_todo.yml
の記述と.rubocop_todo.yml
を削除する。
Brakeman
Railsアプリケーションの脆弱性を静的解析する。
bundle exec brakeman
デフォルトでは検査しない項目もある。全て検査するためには-A
オプションを付ける。軽微な問題まで含める場合は-wl
オプションを付ける。
カバレッジ測定
パフォーマンス測定(APM)
- Skylight
- シンプルにパフォーマンスを測定して可視化
- New Relic
- パフォーマンス測定の他に問題検知もする
- rack-mini-profiler
- Railsアプリのパフォーマンスを測定するGem。ローカルで動かせる
本書ではSkylightとrack-mini-profilerの導入について書いている。