こんにちは、吉岡(@yoshiokatsuneo)です。
昔はソフトウエア開発というとローカルのPCでやることが多かったですが、近年のWebサービス開発では、クラウド上で動作するサービスの利用が欠かせなくなっています。
たとえば、GitHubなどのソースコード管理サービスは広く普及していますし、デプロイ向けサービスのHeroku、継続的インテグレーションサービスのCircleCIといったものも多く使われてます。クラウド開発環境のPaizaCloudもそうですね。
こうしたクラウドサービスを使えば、個別のPC環境に依存せずに、すぐに必要なサービスが使えます。また、インストールやアップデートなどといった環境構築に関する手間も省けます。
さて、クラウド上で開発をサポートするサービスには、静的コード解析をクラウド上で行ってくれる自動コードレビューサービスというものもあります。
継続的に複数人でサービスを開発していこうと思ったら、コードの品質維持が欠かせません。そこで、人力でコードレビューをしたり、IDEやコード解析ツールを利用したりする必要が出てきます。
ただ、人力でやろうとするとエディタやIDEなどは好みがわかれますし、環境はPCによって違いが出る場合もあります。
そんなときは自動コードレビューサービスを利用すれば、複数人がそれぞれ好みの開発環境を使いつつ、コードの品質を上げることができます。
今回は、この自動コードレビューサービスから、SideCI、Codacy, Scrutinizer, Hound の4つを実際に使ってみたので、使い方や感想を書いてみました。
※なお、コード解析ツールはサービスや製品の開発を目指するためのツールです。コンパイラなどとは異なり、すべてのメッセージを受け入れて完璧を目指そうというものではありません。メッセージなどはあくまでも改善のためのヒントとしてとらえて、必要があれば改善して、必要がなければ無視したり設定を変更したりすることになります。
特に開発初期は品質よりも速度を重視するケースも多く、途中から完璧を目指そうとすると挫折してしまうこともあり得ますので、まずは変更箇所の品質を確保していくなどといった柔軟な対応も必要になります。
Gitレポジトリの準備
どのサービスもGitレポジトリと連携し、プルリクエストを作成したときに自動的にレビューが行えるようになっています。まずは、テスト用にRailsのレポジトリをGitHubに作成しましょう。ここでは、"rails_test"というプロジェクトを作成しました。
次に、ローカルでRailsのプロジェクトを作成し、作成したGitHubレポジトリにプッシュしておきましょう。scrutinizer用の設定ファイルも作成しておきます。
$ rails new rails_test $ cd rails_test $ bundle install $ rake db:migrate $ echo -e "build:\n environment:\n ruby: 2.4\n" > .scrutinizer.yml $ git init $ git remote add origin https://github.com/ユーザ名/rails_test.git $ git add . $ git commit -m "first commit" $ git push origin master
SideCI (おすすめ度: ★★★)
最初は、自動コードレビューサービスSideCIを試してみましょう。
SideCIは自動コードレビューに特化したサービスです。今回紹介する4つの中では唯一日本語に対応しており、UIや解析結果の一部を日本語で表示できます。
まずは、以下のSideCIのURLを開きます。
「GitHubでサインイン」をクリックし、GitHub認証でログインします。
ログインしたら、画面上部の「レポジトリ追加」ボタンをクリックし、レビューするレポジトリの"レポジトリを設定"ボタンを押しましょう。
「自動コードレビューの設定」画面が表示されます。ここで利用する言語を選択しましょう。今回は、"Ruby on Rails"と"Ruby", "JavaScript", "CSS"を選択してみます。
設定したら、"自動コードレビューを開始する"ボタンをクリックします。
プロジェクトが作成され、プロジェクト管理画面が表示されます。
メニューのプロジェクト設定を見てみましょう。解析ツールでは利用するツールを選択でき、Ruby関連は6個のツールから複数選択できます。
翻訳では、解析結果メッセージの言語が選べます。日本語になるように「日本語」を選択し、設定ボタンを押します。
Slackとの連携やSSH設定ができるのも便利ですね。
それではコード解析をやってみましょう。コード解析はGitHubのプルリクエストに対してやることができます。
SideCIでは、テスト用のプルリクエストを作成してくれる便利な機能があるので利用してみたいと思います。
プロジェクトの"概要"ページに戻って、「デモ用のプルリクエストを作る」ボタンを押します。
プルリクエストがGitHub上に作成され、自動的に解析が始まります。GitHubのプルリクエスト上でも解析されていることがわかりますね。
しばらくすると解析が終わり、GitHubのプルリクエスト上で状態がわかります。
(今回は4つのツールを同時に試したので、4つの状態が表示されています。)
解析時間は、シンプルなHound(後でご紹介します)に次いで速く、1分程度で終わりました。SideCI上でもステータスが完了になっています。
クリックして、結果をみてみましょう。
結果が表示されました!
8個の解析ツールで同時に解析されています。「ぼっち演算子」のように、日本語で表示されているメッセージもありますね。
指摘結果を直してコミット・プッシュすると再度解析が始まり、メッセージがなくなります。きれいになると気持ちいいですね。
SideCIは国産サービスということもあり、日本語対応に強いというのが一つの特徴です。特にコード解析のようなツールは、わかりやすさや使いやすさが、みんなに積極的に使われるか、適切にメッセージを判断できるか、といったことにもかかわってくるので、日本語圏で開発をするなら大きな利点かと思います。コード解析以外の機能はないですが、そのぶん使いやすいし解析速度も速いですね。
Codacy (おすすめ度: ★★)
Codacyもクラウド上で自動コードレビューができるサービスです。
Codacyはレポートの数の推移をグラフ表示したり、ダッシュボードでプロジェクトの様子を確認したりすることもできます。またクラウドサービスだけではなく、独自のサーバ上で動作させるエンタープライズプランも提供しています。
それでは実際に使ってみましょう。Codacyのサイトを開きます。
"Sign Up"ボタン、"Sign up with GitHub"ボタンを押して、GitHub認証を使ってログインします。
プロジェクト一覧ページから"Add project"ボタンをクリックします。
プロジェクトを選択(クリック)することで、追加します。
準備ができました。SideCIのテスト用プルリクエストで、プルリクエストを作成して確認してみましょう。
自動的に解析がはじまりました。警告の内容はSideCIの場合と同じく4つですね。パネルを開くと詳しい説明が英語で表示されます。
問題を修正すると警告がなくなります。
ダッシュボードでは、プロジェクトの様子がブランチごとに確認できます。
コードスタイルの基準はデフォルトで厳しいのか、0%になってしまっていました。
Codacyはグラフ表示の見栄えがよいし、独自サーバへのインストールも可能だし、エンタープライズ用途で使いやすくなっているように感じます。
Scrutinizer (おすすめ度: ★)
Scrutinizerでは、継続的インテグレーションとコード解析ができます。
実際に試してみましょう。Scrutinizerのトップページを開きます。
"Sign In"をクリックし、"Login via GitHub"でログインします。
"Add Repository"をクリックし、レポジトリと言語を選択して追加します。
CIの機能もあるので、直後にビルドが始まります。
プルリクエストを作成してみましょう。SideCIのテスト用プルリクエストで、プルリクエストを作成して確認してみます。
自動的に解析が始まり、解析が終わると結果が表示されます。
ただ、ビルドは成功したのですが、解析には失敗してしまっているようです…。Rubyのバージョンの問題かもしれませんが、原因は調査できておらずわかりませんでした…。
Scrutinizerの場合、CIツールとコード解析の両方を1つのサービスでできるのは便利ですね。ただ、そのぶん複雑でわかりにくくなっているようにも感じました。
Hound(houndci.com) (おすすめ度: ★)
Houndは自動コードレビューに特化したサービスです。Rubyの開発やgemで有名なthoughtbotが提供しています。
HoundはRuby on Railsで書かれており、オープンソースとして公開もされているので、その気になれば自分でインストールすることも可能です。
実際に試してみましょう。Houndのサイトを開きます。
"Sign in with GitHub"ボタンを押して、GitHub認証でサインアップします。
レポジトリ一覧が表示されます。
解析するプロジェクトを選び、"Activate"ボタンを押します。なお、レポジトリを追加した場合は"Refresh repo list"ボタンで一覧を更新しておきます。
プルリクエストを作成してみましょう。SideCIのテスト用プルリクエストでプルリクエストを作成して確認してみます。
自動的に解析が始まります。解析結果は、HoundのサイトではなくGitHubプルリクエストのコメントとして表示されます。
Houndは、今回ご紹介する中で一番シンプルなツールです。結果はGitHub上にコメントとして表示されるので、Houndのサイトに移動する必要がなく、GitHub上で完結します。ただ、警告の数が多くなると大量のコメントがプルリクエスト上に表示されるので、ややわかりにくくなるかと思います。
また利用できる解析ツールは限られており、設定もすべて設定ファイルでやる必要があります。ソースが公開されているので、その気になれば自由にカスタマイズすることも可能です。
まとめ
Webサービスなどの開発をしていくと、徐々に品質をどのように確保していくかが重要になってきます。「これさえ使えば品質は完璧!」という魔法のツールはまだありませんが、自動コードレビューのようなツールを使えば、少ない労力で品質を向上させることも可能です。まずは、気になったものからぜひ試してみてください。
「PaizaCloud」は、環境構築に悩まされることなく、ブラウザだけで簡単にウェブサービスやサーバアプリケーションの開発や公開ができます。
「paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。
そして、paizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。
スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。