Mac OS X に SonarQube 導入 - UnityのC#コーディング規約チェック

[f:id:kenzo0107:20140620233131p:plain]

環境

  • Mac OS X 10.9.3 (Marvericks)
  • SonarQube 4.3.1
  • SonarRunner 2.4

概要

  • C#のコーディング規約チェック管理ツールを導入します。

導入手順

①SonarQube, SonarRunnerをダウンロード

以下SonarQube公式サイトより
SonarQube, SonarRunnerをダウンロードして下さい。
※フォルダはどこに配置しても構いません。

http://www.sonarqube.org/downloads/

※2014.06.20現在、SonarQube4.2, MySQL5.6 では起動しないことを確認しています。
Homebrewでのインストールはバージョンが古いアプリケーションをDLする可能性があり、
動作保証が取れない場合があります。

②MySQL MacOSにインストール

以下ブログが非常にわかりやすかったです。

http://blog.hyec.jp/2014/02/mac-os-x-mavericksmysql.html

念の為、懸念箇所はここ!

1
2
3
4
...
Installing MySQL, administrator password required ...
Password:(ログインユーザのパスワードを入力)
...

上記で入力したパスワードを元にパスワードファイルが作成されます。

※ちなみに「seaside99」(九十九里浜)と入力しました。

ファイルを開くと「seaside99」でなく文字化け?という文字列が並んでいますが、
これがrootアカウントのパスワードです
[f:id:kenzo0107:20140621002405p:plain]

MySQLインストールが完了できたでしょうか?
以下実行し、MySQLを起動しましょう。

1
sudo /usr/local/mysql/support-files/mysql.server start

③SonarQube用のDatabase作成

    1. 以下実行し、MySQLにログイン
1
/usr/local/mysql/bin/mysql -u root -p(MYSQL_PASSWORD記載のパスワード)
    1. 「sonar」データベース作成
      以下実行でデータベース「sonar」作成
1
CREATE DATABASE sonar;

以下実行し、Databaseに「sonar」が追加されていることを確認する。

1
SHOW databases;

実行結果

1
2
3
4
5
6
7
8
9
10
11
mysql> SHOW databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sonar |
| test |
+--------------------+
5 rows in set (0.00 sec)
    1. 「sonar」ユーザを作成し、全権限を委譲
      ・ID:sonar PW:sonar のユーザ作成
1
CREATE USER 'sonar'@'localhost' IDENTIFIED BY 'sonar';

・sonarユーザに全権限付与

1
GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'localhost';

・権限反映

1
FLUSH PRIVILEGES;

・設定完了したので終わり

1
2
mysql> exit;
Bye

④sonar.properties編集

1
vim (SonarQubeのパス)/conf/sonar.properties

※「4.2」ディレクトリはバージョンなのでバージョンアップ時は変更してください。

以下Sonarが参照するMySQLのDB設定の為、「sonar.jdbc.url」のコメントアウトを外して有効化してください。

1
2
# Comment the embedded database and uncomment the following line to use MySQL
<span style="color: #e2241a">sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true</span>

⑤sonar-runner.properties編集

1
vi (Sonar-Runnerのパス)/conf/sonar-runner.properties

以下SonarRunnerが参照するDB設定、アカウント情報についてコメントアウトを外し有効化してください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#Configure here general information about the environment, such as SonarQube DB details for example
#No information about specific project should appear here

#----- MySQL
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8

#----- Global database settings
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar

#----- Default source code encoding
sonar.sourceEncoding=UTF-8

#----- Security (when 'sonar.forceAuthentication' is set to 'true')
sonar.login=admin
sonar.password=admin

上記設定完了後、
SonarQubeを起動します。

1
2
3
4
5
6
7
8
$ (SonarQubeパス)/bin/macosx-universal-64/sonar.sh console
Running SonarQube...
wrapper | --> Wrapper Started as Console
wrapper | Launching a JVM...
jvm 1 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
jvm 1 |
jvm 1 | 2014.06.25 11:00:48 INFO Web server is started

以上で MySQL, SonarQube が起動している状態になりました。

⑥SonarQubeでのプラグイン設定

以下のようなページが表示されます。
右上のLoginリンク押下します。

    1. Loginします
      Login : admin
      Password : admin
    1. 規約チェックするプラグインを設定する
      Settingリンク押下します。

設定ページが表示されます。

Pluginをインストールします。
・C#
・ReSharper
・StyleCop
・Japanese Pack

各リンクを押下し、installボタン押下

上記全Pluginをインストールすると以下のように表示されます。

この状態では、まだインストールが完了していません。
一度、SonarQubeを再起動させる必要があります。

「sonar.sh console」を実行したターミナルで
一度Ctr+CでSonarQubeをストップさせると以下結果が出力されます。

1
2
3
wrapper  | INT trapped.  Shutting down.
jvm 1 | 2014.06.22 01:48:15 INFO Web server is stopped
wrapper | <-- Wrapper Stopped

再度「sonar.sh console」を実行させ
SonarQubeにアクセス

http://localhost:9000

アップデートセンター>Installed Plugins
先ほどのPluginがインストール済みであることが確認できます。
※日本語化されてます。
[f:id:kenzo0107:20140622015442p:plain]

⑦コーディング規約チェックをしたいプロジェクト決定

例として、以下にUnityプロジェクトを配置しているとします。
~/Desktop/UnityProject/

同階層に「sonar-project.properties」作成します。

1
$ vim sonar-project.properties

内容は以下を入力してください。
※sonar.sources=(Unityのcsファイル格納パスを指定してください)

1
2
3
4
5
6
7
8
9
10
11
12
13
# Project identification
sonar.projectKey=Unity:DemoApp
sonar.projectVersion=1.0
sonar.projectName=AppliName

# Info required for Sonar
sonar.sources=~/Desktop/UnityProject/Assets/Scripts

# Comma-separated paths to directories with sources (required)
sonar.language=cs

#----- Default source code encoding
sonar.sourceEncoding=UTF-8

⑧SonarRunner実行

例として、以下にSonarRunnerを配置しているとします。
~/Desktop/sonar-runner-dist-2.4/

sonar-project.properties作成した同階層で
sonar-runnerを実行

1
~/Desktop/sonar-runner-dist-2.4/bin/sonar-runner

ターミナルに以下が表示されると成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
INFO  - 37/37 source files analyzed
02:37:00.544 INFO - Sensor org.sonar.plugins.csharp.squid.CSharpSquidSensor@625cb0bb done: 1476 ms
02:37:01.246 INFO - Execute decorators...
02:37:05.536 INFO - Store results in database
02:37:05.839 INFO - ANALYSIS SUCCESSFUL, you can browse http://localhost:9000/dashboard/index/Unity:DemoApp
02:37:05.945 INFO - Executing post-job class org.sonar.plugins.core.issue.notification.SendIssueNotificationsPostJob
02:37:05.974 INFO - Executing post-job class org.sonar.plugins.core.batch.IndexProjectPostJob
02:37:06.539 INFO - Executing post-job class org.sonar.plugins.dbcleaner.ProjectPurgePostJob
02:37:06.552 INFO - -> Keep one snapshot per day between 2014-05-25 and 2014-06-21
02:37:06.553 INFO - -> Keep one snapshot per week between 2013-06-23 and 2014-05-25
02:37:06.554 INFO - -> Keep one snapshot per month between 2009-06-28 and 2013-06-23
02:37:06.554 INFO - -> Delete data prior to: 2009-06-28
02:37:06.560 INFO - -> Clean AppliName [id=371]
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
Total time: 24.508s
Final Memory: 6M/87M
INFO: ------------------------------------------------------------------------

SonarQubeにアクセスするとProjects項目に
sonar-project.propertiesで指定した
sonar.projectNameリンクが表示されているので
リンク押下

コーディング規約のチェックが表示されます。

まずここまで出来たらあとは規約のカスタマイズになります。
本件は以上までとします。

カスタマイズはメニューの
品質プロファイル> Sonar Way
と進み、設定変更してみましょう。

補足

元々UnityのC#コーディング規約チェック実施する為に導入を試みましたが、
C#だけでなくJava, PHP, Python等かなり守備範囲が広いです。

他ブログではWindowsが多く、推奨環境としてはWindowsですが
MacOS Xで利用したい場合を本記事はまとめました。

Jenkins用Plugin [Sonar Plugin]も用意されており
定期チェックや他Jobと組み合わせてキックが可能です。

Mac OS X に wget インストール

ターミナルから以下実行

curlコマンドで圧縮されたwgetモジュール(wget-x.x.x.tar.gz)をダウンロードする。

curl -Oオプション 出力をオリジナルのシステムと同名のファイルに保存する

1
sudo curl -O http://ftp.gnu.org/pub/gnu/wget/wget-1.13.4.tar.gz

解凍

1
sudo tar zxvf wget-1.13.4.tar.gz

ディレクトリ内へ移動

1
cd wget-1.13.4

Makefileを作成

Makefile … インストール対象となるシステム特有の機能/情報のチェック状況を記述している

1
sudo ./configure –with-ssl=openssl

–with-ssl=openssl
のオプションを付けないと以下のようなエラーが出てインストールできない
configure: error: –with-ssl was given, but GNUTLS is not available.

Makefileを元にソースファイルのコンパイル

1
sudo make

インストール

1
sudo make install

試しに以下実行して、「index.html」がDLされていればOK !

1
wget http://yahoo.co.jp

「購入しようとしたアイテムが見つかりませんでした」 GooglePlay

概要

2014.05.30時点でリリース前のドラフト版での課金テストができない仕様になりました。

その為、今までのようにテスト課金しようとすると
購入しようとしたアイテムが見つかりませんでした
と表示されるようになりました。

対応

ドラフト版 or ベータ版にapkをアップロードし
テスターにのみ公開する

2015/02/20 追記
apkをアップロードする場合はVersionに注意してください。
Version 1 (1.0) であとは課金テストが完了すればリリースする、
というアプリに対してapkアップロードすることが前提です。

ちょっと直したいなぁといって、
直して同じバージョンをアップロードしようとしても
アップロードできないので注意してください。

詳細

① アルファ版テスト ベータ版にAPKファイルをアップロードする。

※2015/02 追記 ベータ版公開でないと課金テストはできなくなったようです。

② テスターを登録する

  • 「テスターのリストを管理」リンク押下し、グループE-mailアドレスを登録し対象端末を招待する

③製品版にAPKファイルがアップロードされていないことを確認する

製品版にAPKファイルをアップロードしているとアプリが公開されてしまう!

④アプリを公開する

アルファベータ版として公開され、テスターだけにアプリが公開される。

無事購入テスト完了♪

Vagrant + Chef ⇒ LAMP環境構築

Vagrant + Chef ⇒ LAMP環境構築

目的

Vagrant と Chef を利用して LAMP 環境をローカルの仮想環境で実現する

経緯

同一サーバ上で作業している場合に
MySQL のバージョンアップしてパフォーマンステストしたりしたいなぁ
でも、他のみんなに迷惑かかっちゃうよ or サーバ買ってもらえないし、
というときなんかに
ローカル環境で試せるね

ってことで導入しました。

環境

  • MacOSX Marvericks
  • Vagrant
  • VirtualBox

前提

以下がインストールされていること

  • Vagrant
  • VirtualBox
  • Chef
  • knife-solo

↑ 最下の「あとがき」にあるドットインストールで導入手順を参考にしました。

1. knife-solo 初期化

1
$ knife configure

色々尋ねられますが、基本、[Enter]連打で問題ありません。

2. BOX 追加

BOX とは、仮想マシン起動の際にベースとなるイメージファイルです。

centos64 という名前で box を追加します。

1
$ vagrant box add centos64 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-i386-v20131103.box

※利用しているサーバ環境と合わせたい場合は、
お使いのサーバにログインして以下実行で環境情報を調べるのが良いでしょう。

1
$ uname -a

box は以下から URL を選べます。
http://www.vagrantbox.es/

3. 仮想環境 初期化

1
2
3
$ mkdir [vagrant用ディレクトリ]
$ cd [vagrant用ディレクトリ]
$ vagrant init centos64

成功するとVagrantfileができているのがわかります。

1
2
$ ls
$ Vagrantfile

4. Vagrantfile 修正

private network の設定をして
ローカル環境からアクセス出来る様にします。

MacOS → VirtualBox
へのアクセスです。

以下のようにコメントアウトを外すのみ!

1
2
#config.vm.network :private_network, ip: "192.168.33.10"
config.vm.network :private_network, ip: "192.168.33.10"

5. 仮想環境 起動

Vagrantfile のあるパスで以下実行

1
$ vagrant up

以下実行で「running(virtualbox)」を実行すると、起動中であることを確認できる。

1
$ vagrant status
1
2
3
4
5
6
7
8
Current machine states:

default running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.

以下実行でログイン

1
$ vagrant ssh

ログインした後、ログアウトしたい場合に以下実行

1
$ exit

6. ssh エイリアス作成

1
$ vagrant ssh-config --host [sshエイリアス] >> ~/.ssh/config

以下実行でアクセスできる。

1
$ ssh [sshエイリアス]

また、以下実行で ssh の config に書き込まれていることを確認できる。

1
$ cat ~/.ssh/config

7. Chef リポジトリ作成

以下のような構成が管理しやすいかなと思いますので、
以下のように作ります。

1
2
3
4
|
+--- [vagrant用ディレクトリ]
|
+--- [chef-repo]

[vagrant 用ディレクトリ]の1つ上の階層に移動しておいて
以下実行

1
$ knife solo init [Chefのリポジトリ名]

8. 仮想マシンを chef 対応させる

1
2
$ cd [Chefのリポジトリ名]
$ knife solo prepare [sshエイリアス]

9. cookbook 作成

1
$ knife cookbook create [cookbook名] -o site_cookbooks/

10. cookbook に構築する環境の設定記述

1
$ vim [Chefのリポジトリ名]/[cookbook名]/recipe/default.rb

11. 実行 recipe 指定

1
$ vim [Chefのリポジトリ名]/nodes/[sshエイリアス名].json
1
2
3
{
"run_list": ["recipe[[cookbook名]]"]
}

12. テンプレートを作成

1
$ vim [Chefリポジトリ名]\[cookbookの名前]\template\default\index.html.erb

index.html.erb の中身は自由に編集してください。

例として

1
<h1>Hello, World</h1>

13. cookbook を vagrant 仮想環境へ反映

1
$ knife solo cook [sshエイリアス名]

13. 設定した仮想環境の Web サーバへアクセスする

ブラウザで http://192.168.33.10 へアクセス

ブラウザに以下が表示されることを確認!

1
Hello, World

また、仮想環境にアクセスすると以下ファイルができていることを確認できるので
試してみてください。

1
2
3
4
5
$ vagrant ssh
$ cd /var/www/html/
$ ls

index.html

あとがき

ドットインストールで以下さらっておくととっつきやすいです。

PrivacyPolicy

個人情報の利用目的

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しております。
このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。この規約に関して、詳しくはこちらをご確認ください。

免責事項

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、必ずしも正確性・信頼性等を保証するものではありません。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。
当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。