1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Hello World!初めてのコードスキャンを実行してみよう

Last updated at Posted at 2025-12-01

「コードの品質管理(静的解析)を始めたいけれど、CI/CDパイプラインへの組み込みはまだ敷居が高い…」
「まずは手元でサクッと動かして、どんな風に分析されるのか見てみたい」

そんな風に思っていませんか?

今回は、「とにかくシンプルに、まずは動かす」ことをゴールに、Dockerを使ってSonarScanner CLIによる初めてのコードスキャンを実行してみましょう。複雑な設定ファイルは一切使いません。

今回のゴール

  1. 手元のソースコードをスキャンする
  2. SonarQubeの画面で結果(バグやコードスメル)を確認する

準備するもの

今回は環境を汚さないよう、全てDockerコンテナで実行します。

  • Docker Desktop (またはDocker Engine) がインストールされていること
  • スキャン対象のサンプルコード
    • 今回は例として、意図的に少し「行儀の悪い」Pythonコード (main.py) を用意しました。適当なフォルダを作って保存してください
# main.py
def hello():
    print("Hello World") 
    x = 10  # 使われていない変数(Issueとして検出されるはず!)

hello()

ステップ0:SonarQube Serverの起動

まずは、解析結果を受け取るためのサーバー(SonarQube Server)を立ち上げます。まだ起動していない場合は、以下のコマンドを実行してください。

docker run -d --name sonarqube -p 9000:9000 sonarqube:community

起動したら、ブラウザで http://localhost:9000 にアクセスします。

  • 初期ID: admin
  • 初期PW: admin
    (初回ログイン時にパスワード変更を求められるので、変更してログインしてください)

image.png


ステップ1:Tokenの生成とURLの確認

SonarScanner(CLI)がサーバーにデータを送信するためには、「認証トークン」と「接続先URL」が必要です。

1. プロジェクトの作成(手動作成)

まずはデータを受け入れる箱を作ります。

  1. SonarQubeのトップページから [Create a local project] をクリック
    image.png

  2. Project display nameに hello-world と入力(Project Keyも自動で入力されます)
    image.png

  3. [Next] をクリック

  4. "Follows the instance's default" を選択して [Create project] をクリック
    image.png

2. トークンの生成

プロジェクト作成後の画面、または右上のユーザーアイコン → [My Account][Security] からトークンを生成します。

  1. Generate Tokensの画面で、Nameに scanner-cli など適当な名前を入力
  2. Typeは [User Token] を選択
  3. [Generate] をクリック

image.png

⚠️ 重要: 生成された長い文字列(トークン)は必ずここでコピーしてメモしてください。画面を閉じると二度と表示されません!

3. Server URLの確認

通常、Docker Desktop(Windows/Mac)環境からコンテナへアクセスする場合、URLは以下になります。これもメモしておきましょう。

  • URL: http://host.docker.internal:9000

※ Linux環境の場合は http://localhost:9000 またはコンテナのIPアドレスを使用します。


ステップ2:SonarScanner CLIでスキャン実行

ここがメインイベントです!
設定ファイル(sonar-project.properties)を作らずに、コマンドライン引数だけでスキャンを実行します。

ターミナル(またはコマンドプロンプト)を開き、先ほど main.py を作成したディレクトリに移動してから、以下のコマンドを実行してください。

<あなたのトークン> の部分は、ステップ1でメモしたものに書き換えてください。

Mac / Linux / PowerShell の場合:

docker run \
    --rm \
    -e SONAR_HOST_URL="http://host.docker.internal:9000" \
    -e SONAR_TOKEN="<あなたのトークン>" \
    -v "$(pwd):/usr/src" \
    sonarsource/sonar-scanner-cli \
    -Dsonar.projectKey=hello-world

コマンドの解説:

  • --rm: スキャンが終わったらスキャナーのコンテナを自動で削除します(お掃除不要)
  • -e SONAR_HOST_URL=...: サーバーの場所
  • -e SONAR_TOKEN=...: 先ほどの認証キー
  • -v "$(pwd):/usr/src": ここが重要! 今いるフォルダ(ソースコードがある場所)を、コンテナの中の /usr/src に「マウント(同期)」させて、スキャナーがコードを読めるようにしています

実行結果:
最後に EXECUTION SUCCESS と表示されれば成功です!

15:18:43.168 INFO  Scanner configuration file: /opt/sonar-scanner/conf/sonar-scanner.properties
15:18:43.177 INFO  Project root configuration file: NONE
15:18:43.197 INFO  SonarScanner CLI 7.3.0.5189
15:18:43.203 INFO  Linux 6.17.8-orbstack-00308-g8f9c941121b1 amd64
15:18:44.303 INFO  Communicating with SonarQube Community Build 25.11.0.114957
15:18:44.306 INFO  JRE provisioning: os[linux], arch[x86_64]
15:18:46.263 INFO  Starting SonarScanner Engine...
15:18:46.265 INFO  Java 17.0.13 Eclipse Adoptium (64-bit)
15:18:47.520 INFO  Load global settings
15:18:47.629 INFO  Load global settings (done) | time=109ms
...
15:18:51.814 INFO  Analysis total time: 3.743 s
15:18:51.816 INFO  SonarScanner Engine completed successfully
15:18:51.861 INFO  EXECUTION SUCCESS
15:18:51.864 INFO  Total time: 8.699s

ステップ3:結果の確認

ブラウザに戻り、SonarQubeのプロジェクトページ (http://localhost:9000/dashboard?id=hello-world) をリロードしてみましょう。解析結果が表示されているはずです。

Issueを見てみよう

[Issues] タブをクリックしてみてください。
先ほどのサンプルコード main.py に対して、以下のような指摘が入っていませんか?

  • Remove this unused local variable 'x'.
    • (使われていない変数 x があるよ、という指摘)

image.png

Issueの詳細を確認すると、問題の場所、原因と修正方法も提示されています。

image.png

これが静的解析の第一歩です!
「動くけれど、品質的には良くないコード(Code Smells)」を自動で見つけてくれました。

まとめ

お疲れ様でした!これで「Hello World」完了です。
この仕組みさえ分かれば、あとはJenkinsやGitHub ActionsなどのCIツールに組み込む際も、「どこでコマンドを叩いているか」が変わるだけです。

まずは手元のプロジェクトで、色々なコードをスキャンして遊んでみてください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?