flycheckとbrakemanでRailsプロジェクトのオンタイムな脆弱性チェック

Railsアプリの脆弱性を調べてくれるbrakemanが割と好きなんだけどJenkinsが動いてない環境だと繰り返しチェックし辛かったり、新しく設定するのが毎回大変だったりする。

ならflycheckを使ってファイルの保存時にチェックしたら問題を埋めた端から修正できるじゃない。という事で設定してみた。(flycheckは設定してある前提)

(add-hook 'ruby-mode-hook 'flycheck-mode)
(flycheck-define-checker ruby
  "A Ruby Syntax cheker/A Ruby on Rails vulnerability checker using brakeman."
  :command ("~/.emacs.d/scripts/rb-audit.sh" source-original)
  :error-patterns *1
  :modes (enh-ruby-mode ruby-mode))

rb-audit.shはここ

上記のコマンドを適切な位置に置いて、コマンド中のrbenvを初期化してる部分が環境によっては問題があるので修正すると以下のような具合に。これなら新しく何かを設定する必要がない。ただし、開いていないファイルはチェックしないので、Jenkinsが設定できるならした方がいい。

でも以下の点がダサい。もう少しいいやり方がある気がする...

  • RailsなファイルとただのRubyなファイルのチェックが混在しててダサい
  • elispで閉じてなくてダサい
  • desktop.elを併用すると起動時に多くのファイルをチェックしすぎてエラーになるのがダサい
  • flycheckがコピーする一時ファイル(source)を使ってなくてダサい
    • 保存したファイルをそのままチェックしてるため、チェック中に修正、保存するとたぶん問題がある
    • でもこれはRails.rootから見る必要があるので仕方ない

便利な時代になったなぁ。

*1:error line-start (file-name) ":" line ":" (message) line-end) (error line-start "SyntaxError in " (file-name) ":" line ": " (message) line-end) (warning line-start (file-name) ":" line ":" (optional column ":") " warning: " (message) line-end