FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

コードをより良くするためのツール紹介

こんにちは! 新卒の濱と申します。

弊社では、開発言語としてScalaを採用しています。 私はScalaを使い始めて半年以上経ちましたが、コードレビューでは指摘されることが多く、未だに勉強の日々です。 コードレビューでは先輩や同僚が悪いところを指摘してくれるため、なぜこの書き方がダメなのか理解することができますよね。 しかし、独学でやるとなると自分の書いたコードが良いのか悪いのか判断しにくかったりします。

今回は、自分のコードをより良くするためのツールについて紹介したいと思います。

コーディングルールをチェック

静的解析ツールを利用する

Wikipediaによると、静的解析ツールとは以下を指すようです。

コンピュータのソフトウェアの解析手法の一種であり、実行ファイルを実行することなく解析を行うこと。 出典: Wikipedia 静的コード解析

静的解析ツールを用いることにより、Anyを使っていないか、0で割っていないか等、様々なことをコンパイル時にチェックしてくれます。

Webサービスの紹介

ここでは、Web上で静的解析できるサービスについて紹介します。

サービス内容としては、GitHubやBitbucketと連携→そのリポジトリを解析するという流れになっています。

Scala

codacy

codacy.com

対応言語: Scala, Ruby, Java, JavaScript, Python, PHP

デフォルトの静的解析ツール(Scalaの場合): ScalaHomebrew, ScalaStyle

ScalaHomebrew

  • ScalaHomebrewでは、セキュリティ関連やエラーを起こしやすいものを検出してくれます。
  • 例えば、セキュアにRSAを利用しているか、try-catchではなくutil.Tryを使っているかチェックしてくれます。

ScalaStyle

  • ScalaStyleでは、コードスタイルの問題に焦点を当てています。
  • 例えば、行の長さや適切か、whileループを使っていないかチェックしてくれます。

また自分で設定したい場合には、rootに設定ファイルを置くことで利用することができます。

使い方

  1. ログインする
  2. 解析するリポジトリを選択する
  3. 後は待つだけ!

複雑な設定をする必要もなく、簡単ですね!

Akkaの場合

いくつかのOpen SourceはCodacyでみることができます。 → Open Sourceはこちらから

その中にAkkaがあったので、試しにみてみました。

f:id:sa_hama:20161026135634j:plain:w500

▲ akka - Dashboard

Issuesを開くと、以下のようになっています。

ここにコーディングルールに引っかかったものが表示されるっぽいです。

f:id:sa_hama:20161026135636j:plain:w500

▲ akka - Issues

クリックすると、より詳しい内容を見ることができます。

f:id:sa_hama:20161026135637j:plain:w500

なぜダメなのか教えてくれるので修正しやすいですね!

【おススメ(Scala未対応)】

以下はScala未対応ですが、同じように便利なWebサービスなので紹介したいと思います。

SideCI

sideci.com

対応言語: Ruby, PHP, JavaScript, CoffeeScript, Python, Go

SideCIでは、RuboCopを用いてコードを自動修正することができます。 修正漏れの防止や、修正にかかる時間の短縮に役立ちそうです!

また、「負債カンバン」(2016/11/4時点ではBETA)という機能もあります。 コードの品質だけでなく、どこからリファクタリングしたらいいか分からない人向けに投資対効果も可視化してくれるので、コードを修正する際の優先順位付けが決めやすく改善が捗りそうです。 現時点ではRubyしか対応していませんが、他の言語への対応も期待されますね。

参考: 自動コードレビューサービス「SideCI」にてコードの品質とリファクタリングの投資対効果を可視化する「負債カンバン」機能の提供を開始

プラグインの紹介

ビルドファイルやIDEに設定することで利用することができるプラグインについて紹介します。

scalaの場合、以下の5つが有名です。

特にWartRemoverは星の数が500以上もあるのですごいですね!(2016/10/26時点)

【静的解析ツールの比較】

Anyやvarを使っていないかといった基本的なことは、全てのツールで検出することが可能です。

参考程度に、自分がツールを選定する際の指標について紹介したいと思います。

  • 重要なものだけ検出したい
    • WartRemover
  • コードスタイルについてもチェックしたい
    • ScalaStyle
  • Akka frameworkについても検出したい
    • Abide
  • できるだけたくさん検出したい
    • Linter(検出数121: 2016/11/4時点)
    • Scapegoat(検出数107: 2016/11/4時点)

何を直したいのか、どのくらいのレベルで検出したいのかによって、使い分けられるといいですね!

他の人にレビューをお願いする

プログラムのロジック等、ツールでは得られない知見もありますよね!

そんなときは、以下のツールを用いて他の人にコードレビューしてもらいましょう!

1. Github

エンジニアの皆様にはお馴染みのGithubです。

GithubのプルリクやGistを使うと、簡単にコードの共有やコメントを付加することができますね!

github.com

2. Refactor.IO

こちらは、Githubよりも気軽に利用することができます。

プルリク出すまででもないけど、少し確認してもらいたいというときに使えそうです。

www.refactor.io

まとめ

今回、"コードをより良くするためのツール紹介"として以下のツールを紹介しました。

これらのツールを駆使して、より良いコードを目指しましょう!

最後まで読んでいただき、ありがとうございました!