[プログラミング]SonarQubeでC#のコードを解析する(Windows)

SonarQubeをWindows環境で使ってC#コードを解析するに書かれている内容の多くを参考にさせていただきました。
記事の日時が2013年なので今の状況と異なる点をセットアップしながらまとめました。

はじめに注意
* ココらへんの事柄は一年も経てば色々変わったりするので、古い情報はあんまり真に受けないこと。

私も書いておこう。

確認した環境

  • Win8.1 / 64bit
    • 主に一般ユーザ権限
  • SonarQube 5.2
  • Java 1.8
    • 本記事とは無関係の諸事によりjdkを使いました。
  • MySQL Community 5.7.10

まず必要なファイル

  • SonarQube

http://www.sonarqube.org/
Downloadから。


その他の環境は、SonarQubeのRequirementsを参考にしてください。
Java/DB/Web Browserについて書かれています。
以下は私がセットアップした時の環境です。DBMSは個人的な趣味*1によりMySQLにしました。

32/64bitの別は関係ないようですが、SonarQubeは32bit版のJVM上で動いているっぽいです。

Windowsではhttp://dev.mysql.com/downloads/installer/MySQL Installというオールインパッケージがありました。
Linux向けにもレポジトリが用意されているのが確認できます。

Getting Started

MySQLのセットアップ

SonarQubeが参照するデータは、このDBに蓄積されます。


お行儀よく、MySQLSonar用のユーザを作りました。
WorkbenchをインストールしてあればSidebarのUsers and PrivilegesからAdd Accountすることができました。

  • Login Name:sonar
  • Authentication Type:Standard
  • Administrative Roles:UserAdmin

にしました。

# Sidebarはデフォルトで左側に表示されていると思います。
# 表示されていなければViewメニューから表示できるようです。


それからsonarユーザが操作できるデータベースを管理者権限で作ってから、sonarユーザにはそのデータベースだけを操作できるように制限しておきました。
データベースの作成はツールバーのCreate a new schema ...から作成することができます。
SQLでやるならcreate databaseですね。
# create schemaはcreate databaseのシノニムだそうです。
# https://dev.mysql.com/doc/refman/5.6/ja/create-database.html
権限は上で書いたUsers...画面から設定することができます。ユーザ作成時にやるのがいいですね。
作った後でも変更可能です。
また、このデータベース内の全権限を与えておきました。

SonarQubeのセットアップ

http://docs.sonarqube.org/display/SONAR/Documentation/
のGetting Startedを順に進めていきます。
Requirementsは読んだと思うので、Installing SonarQubeを進めます。

上でダウンロードしたSonarQubeを適当なフォルダに伸長配置します。


conf/sonar.propertiesを開いて以下を編集します。

ユーザ名とパスワードはMySQLで作ったユーザ。

MySQLならコメントアウトするだけで使えるようになっています。
ただし、データベース名はsonarがデフォルトになっています。
違う名前で作った場合は、localhost:3306/の後ろのsonarを変更します。
MySQL以外のDBもテンプレがあります。


起動してみます。
bin\windows-x86-64かbin\windows-x86-32のどちらかのStartSonar.batを起動します。
Firewallを開くかをWindowsから聞かれますが開きます。

jvm 1    | 2015.12.30 01:18:33 INFO  app[o.s.p.m.Monitor] Process[web] is up

が表示されたら正常に起動完了しました。


もし下記のように途中で失敗して終了してしまった場合には、

2015.12.27 00:06:20 INFO   es[o.s.p.StopWatcher]  Stopping process
2015.12.27 00:06:20 INFO   es[o.elasticsearch.node]  [sonar-1451142364783] stopping ...
2015.12.27 00:06:20 INFO   es[o.elasticsearch.node]  [sonar-1451142364783] stopped
2015.12.27 00:06:20 INFO   es[o.elasticsearch.node]  [sonar-1451142364783] closing ...
2015.12.27 00:06:20 INFO   es[o.elasticsearch.node]  [sonar-1451142364783] closed
2015.12.27 00:06:20 INFO  app[o.s.p.m.TerminatorThread] Process[search] is stopping
2015.12.27 00:06:20 INFO  app[o.s.p.m.TerminatorThread] Process[search] is stopped

logs\sonar.logを見てみます。
私はFirewallを開いていなかったりMySQLの設定をしていなかったりしたので、失敗してスタックトレースが残されていました。


ところで私の環境では64bitのSonarQubeを起動すると以下の警告が表示されました。

jvm 1    | WARNING - Unable to load the Wrapper's native library 'wrapper.dll'.
jvm 1    |           The file is located on the path at the following location but
jvm 1    |           could not be loaded:
jvm 1    |             C:\<snip>\sonarqube-5.2\bin\windows-x86-64\.\lib\wrapper.dll
jvm 1    |           Please verify that the file is readable by the current user
jvm 1    |           and that the file has not been corrupted in any way.
jvm 1    |           One common cause of this problem is running a 32-bit version
jvm 1    |           of the Wrapper with a 64-bit version of Java, or vica versa.
jvm 1    |           This is a 32-bit JVM.
jvm 1    |           Reported cause:
jvm 1    |             C:\<snip>\sonarqube-5.2\bin\windows-x86-64\lib\wrapper.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform
jvm 1    |           System signals will not be handled correctly.

wrapper.dllが32bitなので64bitモデルのJVM上だと動かないよってことなんでしょうか。
でも結局64bitのJavaをインストールしていれば2つのフォルダのどちらでも動いたので、32bitにフォールバックしているんですかね。(32の方を起動すれば上の警告は表示されませんでした。)

SonarQubeが起動した後は...

さて、SonarQubeはWebサーバを同梱しています。起動した後はhttp://localhost:9000/にアクセスすれば、ウェルカムページを見ることができます。

右上のLog inからadmin/adminでログインできることを確認しておきます。
# 設定した記憶がありませんが、デフォルトなんでしょうね。


長くなったので、コード解析をするのは次回にします。
(追記)⇒書きました。(d:id:pneumaster:20151230:1451480090)

*1:http://db-engines.com/en/rankingで上位だったので。。。