こんにちは。PS/SLの佐々木寛太です。
今回はコードの静的解析ツールであるSonarCubeをDockerで動かしてNode.jsのプロジェクトをスキャンする手順を紹介したいと思います。
SonarCubeとは
SonarQubeはオープンソースの品質管理プラットフォームです。
- 重複コードの検出
- サイクロマチック数の計測
- 脆弱性のあるコードの検出
- バグを誘発しそうなコードの検出
- 指摘されたissueの管理
SonarCubeでは上記のようなポイントの解析をしてくれコードレビューの手間を一定省くことができます。
では早速SonarCubeの環境構築手順を紹介していきます。
大まかな手順は以下の通りです。
手順を記載する
手順1:SonarCubeをDockerで起動す
SonarQubeは公式イメージが公開されています。
https://hub.docker.com/_/sonarqube
今回はこちらのイメージを使用します。
docker run -p 9000:9000 --name sonarqube -d --restart always -it sonarqube:lts
docker psコマンドでstatus がUPになっていればOKです。
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0487914bc969 sonarqube:lts "bin/run.sh bin/sona…" About a minute ago Up About a minute 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp sonarqube
そうしたらlocalhost:9000, VM上で起動している人はvmのIp:9000でブラウザでSonarCubeを立ち上げます。
手順2:SonarCubeでプロジェクトの作成
まずログインを行いパスワードの変更を行います。
始めのログイン情報はユーザー名:admin パスワード:admin
です。
ヘッダーより “Projects” を押下します。
画面中央に “Add a project” ボタンが現れますので、それを押下します。
一番左の “Manually” を押下します。
プロジェクトを作成します。
- “Project Key”(プロジェクトの名前)を入力します。
- “Display name” は自動入力されます。
- “Set Up” ボタンを押下し、次に進みます
Project keyは任意のもので大丈夫です。
のちほど設定するSonar-scannerが、SonarQubeのアクセスするためのトークンを作成します。
ユーザー名(任意)を入力し、”Generate” ボタンを押下します。
トークンが生成されたらcontinueを押下します。
手順3:Sonar-scannerのインストール
トークン生成後解析する言語を選択します。
今回はnode.jsを解析したいのでotherを選択しOSはLinuxを選択します。
中央に、”Visit the official documentation of the Scanner to download the latest version, and add the bin directory to the PATH environment variable” とありますので、リンクから、公式のSonar-scannerのDocumentへ遷ります。
Documentの “Linux64-bit” のリンクをコピーします。
ではSonarCubeのコンテナからSonar-scannerをダウンロードします。
SonarCubeのコンテナにログインする
docker exec -it -u root sonarqube bash
以下コンテナ内で実行するコマンド
必要なライブラリをインストールしていきます。
apk update apk upgrade apk add wget unzip vim git
インストールが終わったら、Sonar-scannerのzipファイルを wget
でダウンロードします。
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.7.0.2747-linux.zip
インストールしたzipファイルを解凍します。
unzip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.7.0.2747-linux.zip
sonar-scannerコマンドが使えるように .bashrc
ファイルにPATHの設定をします。
vim ~/.bashrc
export PARH="$PATH:/opt/sonarqube/sonar-scanner-4.7.0.2747-linux/bin"
設定し終えたら、.bashrc
ファイルを再読み込みします。
source ~/.bashrc
手順4:コード解析準備
- sonarqubeコンテナに解析したいソースコードを置く
- ディレクトリは/opt/sonarqube
- 解析するディレクトリに入る
- sonarqubeのコンテナに入りnode.jsをインストールする
ローカルからDockerコンテナにファイルをコピーはこんな感じでできます。
docker ps コンテナIDを調べる docker cp ./node-practice.js <コンテナID>:/node-practice/node-practice.js
手順5:sonarqubeのコンテナにnode.jsをインストールする
nvmをinstallする
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
nvmでnodeをinstall
nvm install 14.16.0(使用したいnode.jsのバージョンを入れる)
nvm use 14.16
*上記のコマンドはSonarCubeのコンテナ内で実行する
手順6:コードの解析
解析するソースコードのあるディレクトリに移動しSonarQubeの画面に表示されているSonar-scannerコマンドをコピペして実行します。 EXECUTION SUCCESSという表記が出たら解析完了です。
手順7:解析結果を確認
SonarCubeの画面に戻ると解析結果が表示されています。
本記事では環境構築方法なので解析結果の詳細については言及しませんが、以下の画像のように、結果の詳細が表示され、リスクや解決方法まで提示してくれコードの品質やセキュリティリスクを自動的に検出することができます。
SonarCubeの詳細な設定や解析結果の見方については別記事で投稿します!
是非自身のプロジェクトを一度SonarCubeでスキャンしてみてください。