TypescriptやJavaScriptを使用しているエンジニアでは、eslintを使って静的解析をしている人が多いと思います。もちろん、フロント部分はそれでいいと思います。
では、バックエンドはどうでしょうか。私もそこまで静的解析に強いわけではありませんが、Javaを使用している現場で長く使用しているSonarQubeについて紹介いたします。
対象
この記事をオススメしたい人
- 初心者含めた全てのエンジニア
- SonarQubeに対応した新しい言語を学ぶ
- レビューしてくれる人がいない
この記事をオススメしない人
- 環境構築の方法を知りたい人
- 導入方法を知りたい人
とりあえずすぐ使いたい人
sonarLintというプラグインが提供されています。
IDEとしては、以下のIDEに対応しています。
- Eclipse
- IntelliJ idea
- Visual Studio
- VS Code
また、IDEごとに対応できる言語が違うようです。
Typescriptが使えないものとかもあるので、サクっと使いたい時は気を付けてください。
こちらのプラグインを入れていると、ローカルでSonarQubeの静的解析を行うことができます。
毎回masterにPushしないと静的解析できない状態だと、CIが終わるまで修正が正しいかどうかが分からないので、こちらは必須です。
昔、PGRelief Jという静的解析ツールをプロジェクトで買っていたこともあるのですが、人数分のライセンスを買ってくれず…。
わざわざ構築していたCIサーバにログインして、CIサーバのローカルで確認していた時は無駄な作業が多かったです。
TDDでもそうですが、早期なフィードバックが大事なので、ローカルで確認できるということは重要なファクターです。
SonarQube(SonarCloud)とは
静的解析をしてくれるツール。
JavaやTypescript、その他にもgoやkotlinやRubyやPython等も静的解析できるので主要な言語はサポートしている。
上記のSonarLintで漏れた言語はこちらでキャッチする、というやり方もありだと思います。
なお、きり丸はJavaとTypescriptでしか使ったことが無いので、他の言語の静的解析の精度は良くわかりません。
MicrosoftとかApacheも使っているから、そこまで悪くはないのではないかと思ってます。
放置しているのが気になりますが。
昔は社内サーバーにSonqrQubeをインストールする必要もありましたが、dockerも提供されているので簡単に構築はできます。
静的解析ができる、という点以外にもメリットがあります。
Quality Gateという仕組みがあって、テストのカバレッジ率が低かったり、静的解析上で致命的なバグがあったときにNGを出す仕組みがあります。
これがあるおかげでSonarQubeをCI/CDに組み込むメリットがあります。
目検で見逃した怪しいバグがあったときに、品質チェックタスク以降のフロー(テストやデプロイ)を停止させることができます。
まぁ、たまに頭悪いバグを出されるときはありますけどね…。
リファクタリングで
「Nullチェック -> not Nullチェックに変更」
して早期リターンさせたら、後続でNullの可能性があります! って怒られたのはちょっと…。
重複チェックもかけてくれます。
紹介しておいてなんですが、あんまり個人的には使っていない機能です。
重複チェックにひっかかるような単純なロジックってそうそうないですし…。
DTOの変数名被りとか、正直どうでもいいところしか上げてくれないイメージです…。
sonarCloudというPublicなRepositoryであれば、静的解析してくれるサイトもあります。
私はもっぱら、sonarCloudを使用しているので、基本的に作成するリポジトリは全部Publicにしてます。
終わりに
SonarQubeに限らず、静的解析は必ずかける必要があると考えています。
特定の言語に特化していない分、SonarQubeは弱いのかもしれません。
これから学ぼうとしている新言語を低いコストで静的解析したい、とかそういうときには使えると思います。
sonarQubeに関しての本も出ているので、興味があれば購入してみるといいと思います。
- クリーンなコードへのSonarQube即効活用術Kindle版