SideCI Blog

自動コードレビューサービスSideCIを提供している株式会社アクトキャットのコーポレートブログです。



Hamlを使っているならhaml-lintを使ってコードレビューを楽にしよう

Hamlというのは主にRuby on Railsで使われているマークアップ言語です。Railsで標準で採用されているテンプレートエンジンであるERBよりも少ない記述量で記載することが出来ます。HTMLはXMLがベースになっているので冗長的な書き方も多く、書くのが面倒に感じる方もいるでしょう。Hamlはインデントで構造を表すので慣れれば分かりやすく感じるでしょう。下記はHamlの例です。

%section.container
  %h1= post.title
  %h2= post.subtitle
  .content
    = post.content

HTMLは適当に書いてもそれなりに表示されてしまうため、更新を重ねていく内に徐々にメンテナンス性が悪くなっていきます。それはHamlについても同じでしょう。そこでHamlの内容を静的に解析し、修正すべきポイントを指摘してくれるhaml-lintを使ってみましょう。

haml-lintのインストール

haml-lintはRubygemsを使ってインストールできます。

$ gem install haml_lint

haml-lintの使い方

基本的な使い方はHamlファイルのあるディレクトリまたはHamlファイルを指定して haml-lint コマンドを実行します。そうすると修正すべきポイントが標準出力されます。

$ haml-lint .
custom_templating_extension.text.html.haml:3 [W] TrailingWhitespace: Line contains trailing whitespace
custom_templating_extension.text.plain.haml:5 [W] FinalNewline: Files should end with a trailing newline

後はこの指摘に従って修正していくだけです。

結果の出力フォーマットについて

デフォルトでは標準出力として指摘事項が出力されます。これを変更するには --reporter オプションを使います。例えば checkstyle と指定すると CheckStyle フォーマットで出力されます。

$ haml-lint --reporter checkstyle .
<?xml version="1.0" encoding="utf-8"?><checkstyle version="5.7"><file name="custom_templating_extension.text.html.haml"><error line="5" severity="warning" message="Files should end with a trailing newline" source="FinalNewline" /><error line="1" severity="warning" message="Line contains trailing whitespace" source="TrailingWhitespace" /><error line="3" severity="warning" message="Line contains trailing whitespace" source="TrailingWhitespace" /></file><file name="custom_templating_extension.text.plain.haml"><error line="5" severity="warning" message="Files should end with a trailing newline" source="FinalNewline" /><error line="1" severity="warning" message="Line contains trailing whitespace" source="TrailingWhitespace" /><error line="3" severity="warning" message="Line contains trailing whitespace" source="TrailingWhitespace" /></file></checkstyle>

さらに json も指定できます。

$ haml-lint --reporter json .
{"metadata":{"haml_lint_version":"0.26.0","ruby_engine":"ruby","ruby_patchlevel":"111","ruby_platform":"x86_64-darwin16"},"files":[{"path":"custom_templating_extension.text.html.haml","offenses":[{"severity":"warning","message":"Files should end with a trailing newline","location":{"line":5},"linter_name":"FinalNewline"},{"severity":"warning","message":"Line contains trailing whitespace","location":{"line":1},"linter_name":"TrailingWhitespace"},{"severity":"warning","message":"Line contains trailing whitespace","location":{"line":3},"linter_name":"TrailingWhitespace"}]},{"path":"custom_templating_extension.text.plain.haml","offenses":[{"severity":"warning","message":"Files should end with a trailing newline","location":{"line":5},"linter_name":"FinalNewline"},{"severity":"warning","message":"Line contains trailing whitespace","location":{"line":1},"linter_name":"TrailingWhitespace"},{"severity":"warning","message":"Line contains trailing whitespace","location":{"line":3},"linter_name":"TrailingWhitespace"}]}],"summary":{"offense_count":6,"target_file_count":2,"inspected_file_count":2}}

解析できる内容について

解析できる項目(Linter)は --show-linters オプションで確認できます。多数のLinterがデフォルトで用意されています。

$ haml-lint --show-linters
Available linters:
 - AltText
 - ClassAttributeWithStaticValue
 - ClassesBeforeIds
   :

解析する内容を制御するのは .haml-lint.yml というファイルになります。内容は例えば次のようになります。前述のLinterごとに有効、無効を切り替えたり、細かいパラメータを変更できます。

linters:
  ImplicitDiv:
    enabled: false
    severity: error

  LineLength:
    max: 100

Hamlはタグを書かないのでHTML構造こそ崩れづらいものの、idとクラスの書き順など自由度は高いフォーマットになります。その結果、書く人によって品質がバラバラになってしまいます。ぜひhaml-lintを使って可読性の高い、メンテナンスしやすい状態を維持してください。

SideCIではhaml-lintをサポートしています。チームで開発されているのであれば、SideCIを使って自動コードレビューできる仕組みが便利です。長期的にメンテナンスできるシステムを維持するためにもぜひ使ってみてください。

SideCIは無料トライアルも可能です。ぜひお試しください。