1ヶ月ほどまえからギョーム外で Scala のコードベースに触れ始めまして、まず何かできることが無いかと探してコーディングスタイルをととのえることに着手することにしました。というのも、普段 Ruby で仕事をしており、RuboCop というコーディングスタイルのチェックをしてくれるツールが共同作業をする上でとても役に立っていたからです。
というわけで、Scala のコーディングスタイルチェッカーである Scalastyle の導入手順について書きたいと思います。
コーディングスタイルはツールに任せよう
コーディングスタイルを統一した方がよいのは説明不要かと思います。わざわざツールを利用するのは、次のような理由があるからだと思っています(雑に挙げます)。
- コーディングスタイルを文書にしておいても腐る
- 新規参加メンバーにコーディングスタイルの指摘をするコストが高い
- 人がコーディングスタイルのチェックをすると漏れがある
- 人がコーディングスタイルのチェックをするとお金がかかる
Scalastyle の導入手順
では Scalastyle の導入手順です。
sbt plugin の scalastyle-sbt-plugin を利用した方法が簡単だと思いますので、以降はこれを使って説明します。
といっても基本的には公式サイトに載っているとおりで、
-
project/plugins.sbt
に数行追加 -
sbt scalastyleGenerateConfig
を実行して設定ファイルを作成 -
sbt scalastyle
で実行
で完了です。
しかし、この通りに導入すると、ある程度の規模のプロジェクトでは warning が 1000 以上表示されると思います。無理です。心が折れます。
ですので、上の手順を終えた後は次の手順で実行していくのがよいと思います。
1. チェックしないようにする
まず、全てのコーディングスタイルルールのチェックを実行しないようにします。
config ファイル(scalastyle-config.xml
)内の check
要素の enabled
attribute を全て false
にすることで、コーディングスタイルのチェックを止めることができます。
- sed を使って変更する場合はこちら
sed -i -e 's/enabled="true"/enabled="false"/' scalastyle-config.xml
2. ひとつずつ有効にする
ひとつずつコーディングスタイルのルールを有効にしていきます。
- config ファイル内の
check
要素のenabled
attribute をtrue
にすることで、コーディングスタイルを有効にします
- コーディングスタイルにはパラメータを設定できるものがあります。例えば1行あたりの文字数をいくつまでに制限するか、といったものです。パラメータの詳細はこちらにありますので、プロジェクトに合わせて設定してください
-
sbt scalastyle
を実行します - コーディングスタイルに違反している行があれば訂正します
- (バージョン管理ツールを利用しているなら config ファイルと一緒に変更点をコミットします)
これを繰り返すことでプロジェクトに合ったコーディングスタイルを設定ファイルに落とし込めると思います。
3. コーディングスタイルに違反した場合にエラーになるようにする
以上の手順で、コーディングスタイルを定義し、そのスタイルに違反したものを発見できるようになりました。
しかし、定期的に Scalastyle が実行されるようになっていないと意味がありません。Jenkins など CI ツールでチェックしたいところです。
しかし、デフォルトの設定ではコーディングスタイルに違反しても sbt scalastyle
の exit status は 0 になっています。これでは CI するとき不便です。
これを解決するためには2つの方法があります。
1つ目は、scalastyle
の実行時に w
オプションを渡す方法です。アンドキュメンテッドのようですが、ここらへんに書いてあるように、sbt "scalastyle w"
と実行することで、コーディングスタイルに違反があった場合に exit status が 1 になります。
2つ目は、すこし強引ですが warning となっているルールを error に変更する方法です。
つまり config ファイル内の check
要素の level
attribute を全て error
にしてしまう方法です。これにより、sbt scalastyle
を実行して、コーディングスタイルに違反があった場合に exit status が 1 になります。
- sed を使って変更する場合はこちら
sed -i -e 's/level="warning"/level="error"/' scalastyle-config.xml
どちらかの方法を利用して CI を回してチェックし続けましょう
まとめ
ざっくりですが、心の折れない Scalastyle の導入手順を紹介しました。
リンク
- 公式サイト: http://www.scalastyle.org/
- GitHub: https://github.com/scalastyle