こんにちは、Railsエンジニアの鈴木(信)です。
先日31歳になったんですが、やはり30歳を超えたあたりから衰えたというか、何か体に変化があったように思います。 自身の健康はもちろんですが、コードの健康(品質)のことも気になる年頃になりました。 そこで今回は弊社で利用しているコード解析ツールをご紹介します。
brakeman - セキュリティ
brakemanは、簡単なXSSやインジェクション系の脆弱性を検出してくれるgemです。
もちろんこれだけで完全に安心という訳ではありませんが、弊社ではJenkinsのBrakeman Pluginを使って、継続的にモニタリング、修正しています。
使い方
$ brakeman $ brakeman --only-files=path/to/specific_file
simplecov - テストカバレッジ
RSpecなどのテストツールと組み合わせて、テストの網羅性を計測することができます。
使い方
rails_helper.rb
if ENV['COVERAGE'] require 'simplecov' require 'simplecov-rcov' SimpleCov.start 'rails' do add_filter '/vendor' end SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter end
$ gem install simplecov simplecov-rcov $ COVERAGE=1 rspec
coverage/rcov/index.html
にカバレッジレポートが生成されます。
rubocop - コーディングスタイル
rubocopはコーディングスタイルの違反を検出してくれるだけでなく、長すぎるメソッドや複雑すぎるロジックを検出して、コードの保守性を維持してくれるスグレモノです。
最初から導入していれば良いですが、途中から使いはじめると大量の警告が出てしまうと思います。
インデントやスペースの過不足など、修正方法が自動的に決まるものについては、自動修正が効きます。
$ rubocop --auto-gen-config # 検出されたスタイル違反からrubocop-todo.ymlを自動生成。.rubocop.ymlで読み込んで一時的に無視できる $ rubocop -a path/to/file.rb # 自動修正できるものを自動修正
また、git diffに対してだけrubocopを適用する、rubocop-gitというgemもあります。 途中からの導入はこちらの方が使いやすいかもしれません。
pre-commit - コーディングスタイル
過去に新サービスを立ち上げる際、エンジニアとしてやって良かった 9個の事という記事でもご紹介しました。
pre-commitはgitのpre-commit hookを利用して、余計なスペースや消し忘れのデバッグコードをコミットしてしまうのを防いでくれるgemです。 デフォルトでは無効ですが、rubocopを実行することもできます。
使い方
$ pre-commit install $ pre-commit disable yaml checks rubocop
bullet - パフォーマンス
bulletはN+1問題(ループでSQLが大量に実行される問題)を検出するgemです。
反対に、includes(:association)
でeager loadingしたけど、実際にはassociationが使われていないというのも検出してくれます。
警告が発生したときの出力は、エラーを発生させたり、JavaScriptでalertを発生させたり、ログに出力したりと色々オプションがあります。
使い方
ログに出力する例です。
config/environments/development.rb
Your::Application.configure do config.after_initialize do Bullet.enable = true Bullet.bullet_logger = true Bullet.stacktrace_includes end end
プログラマの健康
そもそもですが、コードを書く人間が健康でないと、健康なコードを書くことすらままなりません。
最近ではオライリー社からヘルシープログラマという本が発売予定であったり、Googleでの健康に対する取り組みが紹介されたりと、IT業界の健康への意識が高まっています。
プログラミングという仕事は夢中になっているとつい長時間労働になりがちですが、まず健康であることが、健康なコードを書くための第一歩、ということですね。
最後に
マネーフォワードでは、心身共に健康なエンジニアを募集しています! 健康な肉体で健康なプログラミングを!
【採用サイト】 ■『マネーフォワード採用サイト』 https://recruit.moneyforward.com/ ■『Wantedly』 https://www.wantedly.com/companies/moneyforward
【公開カレンダー】 ■マネーフォワード公開カレンダー
【プロダクト一覧】 ■家計簿アプリ・クラウド家計簿ソフト『マネーフォワード』 https://moneyforward.com/ ■家計簿アプリ・クラウド家計簿ソフト『マネーフォワード』 iPhone,iPad ■家計簿アプリ・クラウド家計簿ソフト『マネーフォワード』 Android ■クラウド型会計ソフト『MFクラウド会計』 https://biz.moneyforward.com/ ■クラウド型請求書管理ソフト『MFクラウド請求書』 https://invoice.moneyforward.com/ ■クラウド型給与計算ソフト『MFクラウド給与』 https://payroll.moneyforward.com/