技術ブログツールCI/CDGCPSonarQubeこんにちは。LS(リーディング・サービス)部の佐藤です。今回は、CI/CD環境構築シリーズの2回目として、静的解析ツールSonarQubeの導入を行ってみます。アジャイル開発などをしていると、どうしてもコードレビューが都度発生します。やることは山積み、レビュー対象も山積み、問題点も山積み、となると些かげんなりします。そこで出てくるのが、CI/CDです。省ける手間は極力省き、その分のリソースをより重点的に取り組むべきところに回しましょう。誰が見ても指摘できるようなことを、自動でチェックしてくれるようになります。業務的な問題点をチェックしてくれたりはしませんが、レビュー開始時点で一定の品質を担保してくれるようになるだけでも、とてもありがたいことではないでしょうか。今回、SonarQubeを導入するにあたり、以下のような構成にします。SonarQubeは、サーバー起動する必要があるので、Apacheが必要になります。ソースコードの解析結果をDB保存しますので、何かしらDBが必要になります。今回は、MySQLになります。導入手順は、こちらです。scannerを用意するスキャンした結果を、確認するそれでは、はじめていきたいと思います。Platform上にSonarQubeを構築するにあたり、Bitnamiで予め用意されているパックを、使用することとします。Bitnamiのパックでは、環境を構築するにあたり必要なものをすべて揃えてくれています。今回だと、SonarQubeのモジュールの外にApacheやMySQLなどですね。これらを、仮想サーバ上にボタン一つですべて配置してくれます。便利なので、ありがたく使わせていただきます。GCPのマーケットプレイスでSonarQubeを検索します。マーケットプレイスは、画像の以下の箇所から移動できます。ENGINE上で起動」を選択します。GCP上でSonarQube環境を構築するにあたり、使用するVMの構成等を決めることができます。裏でSonarQubeの起動に失敗するようになるので、注意してください。以上を終えると、SonarQubeを乗せたサーバーが起動します。panel」を押下して、アクセスしてみましょう。ログインに使用するユーザーIDとパスワードは、adminユーザーのものになります。登録するプロジェクトの言語タイプを選択します。アクセス用トークンは、払い出したタイミングでしか確認できないので、コピーして手元に保存してください。言語タイプは、後からでも変更可能です。以上で、SonarQubeの初期設定が完了しました。Scannerを用意するまずは、以下からScannerをダウンロードします。https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner解凍し、パスを通しておいてください。Scannerの設定をします。ダウンロードしたファイルの以下のパスに、「Sonar-scanner.properties」がありますので、そちらを編集します。encoding#sonar.sourceEncoding=UTF-8sonar.login=&amp;amp;lt;アクセス用トークン&amp;amp;gt;Bitnamiで作成したSonarQubeは、初期状態で80と443のポートが開いています。ここでは、80を使用しています。アクセス用トークンは、SonarQube初回アクセス時に生成したものになります。万が一控えていなかった場合は、SonarQube上で新しいアクセス用トークンを払い出してください。次に、SonarQubeで管理したいプロジェクトの直下に「sonar-project.properties」を作成します。sonar.projectKey=demo:irissonar.projectName=demosonar.projectVersion=1.0sonar.sources=./demo/srcsonar.java.binaries=./demo/targetそれぞれ以下のような内容です。SonarQube上での一意になるキーです。解析結果をDBに保存する際に使用されます。SonarQube上で表示する際に使用されます。プロジェクトのバージョンです。解析するソースの配置場所です。ソースのビルドファイルの配置場所です。Javaのプロジェクトを解析する場合にのみ必要です。注意しないといけないのは、sonar.projectKeyの扱いになります。SonarQubeは、解析結果をDBに保存しますが、その際にプロジェクトごとに認識キーを作成して保存します。以前の解析結果を、他のプロジェクトの解析結果が上書いてしまうことになります。以上で、Scannerの設定は完了になります。3.スキャンした結果を確認する「sonar-project.properties」の階層で、以下を実行します。SUCCESSとなることが確認できたら、GCP上のSonarQubeにアクセスして確認してみます。作成したプロジェクトについての解析結果が出ています。プロジェクト名を押下すると、より詳細なレポートを見ることができます。今回は、サンプルプログラムであるためちょっと貧相な結果ですが、このページでは以下のことを確認できます。バグの個数リファクタリング対象になりそうな場所カバレッジ重複したコードの割合また、コードの問題のある個所を、以下のように表示してくれます。この画像の例だと、他で使用していない変数があるという指摘が出ています。まとめ今回は、GCP上にSonarQubeを配置するための簡単な導入でした。常に一定の品質を保つことができます。コードのちょっとした問題点などの些末なものが取り除かれた状態でレビューを行えるため、レビュアーはより業務よりな観点でのレビューに注力することができるようになります。今回はローカルからスキャンを実行しましたが、この処理をコンポーネント化してGCP上に置いてしまえば、GCPでGitのDevelopブランチに対するコミットを検知し、コンポーネントを起動してスキャンを行い、その結果をSonarQube上で常時確認できる、というような流れの構築も可能ではないでしょうか。このように、CI/CD環境の構築を始めると、どんどん夢がふくらんでいくので、もしもこの記事を読んで興味がありましたら是非試してみてください。新卒3年目で、目下クラウド環境を勉強中です。MaterialsEN。