SonarQube for IDE(旧SonarLint)で実現するリアルタイムSAST解析 | コードセキュリティ | DevSecOps

リアルタイム静的コード解析ツール「SonarQube for IDE(旧称 SonarLint)」の概要について解説します。

SonarQube for IDE は、コードを書いているその瞬間に静的解析をかけるエディタ拡張機能です(旧称 SonarLint)。コミットも push も CI の完了待ちも要りません。しかもそれが、拡張機能を入れたチーム全員の手元で、同じ基準で動作します。

この記事では、この拡張機能が何を見つけてくれるのかを、実際に問題を仕込んだ Python コードで確かめます。セキュリティ、バグ、保守性——種類の違う指摘が、ファイルを開いた数秒後に同時に並びます。


SonarQube for IDE とは何か

SonarQube for IDE は、SonarSource 社が提供するエディタ拡張機能です。以前は SonarLint という名前で知られていました。多くのメジャー IDE に対応しています。

役割を一言でいうと、コードレビューで指摘される問題を書いているその場で教えてくれるツールです。バグ、セキュリティ上の問題、読みづらさにつながる書き方を、入力しながら赤い波線で示します。

使い方は「入れて、開く」だけ

  1. IDE に「SonarQube for IDE」をインストールする
  2. ソースファイルを開く

以上です。数秒後には、問題のある行に赤い波線が引かれ、「問題(Problems)」タブに一覧が出ます。

💡一般的なリンターとの違いは?💡

セキュリティ、バグ、コード品質を同時に解析する

一般的なリンターが主に「書式」や「構文ルール」の統一を目的とするのに対し、SonarQube for IDEは、セキュリティ、バグ、コード品質のすべてを検知します。例えば「Zip Bomb」のようなバグは、一般的なリンターでは検知できません。

② 複数言語を一つの拡張機能で全てカバーする

一般的な開発環境では、言語ごと(JSならESLint、PythonならRuffなど)、あるいは用途ごと(構文チェック、セキュリティ用のBanditなど)多数の拡張機能を組み合わせる必要があります。一方、SonarQube for IDE は、多数の言語に対応しており、「バグ・セキュリティ・保守性・秘密情報の検知」までこの拡張機能1つで完結できます。ツールの導入・管理の手間を劇的に減らし、環境をシンプルに保てるのは非常に大きな強みです。

では、SonarQube for IDE の機能と特徴について詳しく見ていきます。


特徴 1:リアルタイム SAST 解析

SAST 解析エンジンが手元にあるので、コードをどこかへ送って結果を待つ工程が存在しません。だから解析はキーを打つ速度に追いつきます。書いた瞬間に指摘が出て、直して保存すればその場で消えます。

「指摘 → 修正 → 消える」が数秒で一周するのが、このツールの体験の中心です。

指摘が出るのはまだ自分しか見ていないコードの上です。同じ問題を、レビューで指摘されてから直す場合と比べてみてください。

手戻りのコストは、見つかるのが遅いほど跳ね上がります。リアルタイム解析の価値は、ここにあります。

特徴 2:全員の手元に同じ基準(ルール)が入る

拡張機能を入れた人には、誰でも同じルールセットが入ります。ここが「個人の便利ツール」で終わらない理由です。

コードレビューの品質は、どうしてもレビュアーによってばらつきます。誰が見ても指摘する問題もあれば、その日の忙しさによって見逃される問題もあります。チーム全員が SonarQube for IDE を入れている状態では、誰がどのファイルを書いても、同じ基準(ルール)解析がかかります


実際に何を検知するのか

ここからは、意図的に問題を仕込んだ Python コードで動きを見ていきます。

仕込んだ問題は 5 つ。秘密情報の漏洩、攻撃の入り口、テストの機能不全、読みづらいコードと、性格の違うものを並べてあります。

#検知される問題種別
1API キーがソースに直書きされているセキュリティ
2DB のパスワードがソースに直書きされているセキュリティ
3ZIP を上限なしで展開している(Zip Bomb)セキュリティ
4いつも成功してしまう assert(テストコード)バグ
5制御構文のネストが深すぎる(if が 5 段)保守性

ここで見てほしいのは件数ではなく、指摘の種類がまたがっていることです。秘密情報を探すツール、バグを探すツール、コードの書き方を整えるツールを別々に入れなくても、1 つの拡張機能がまとめて面倒を見ています。1 件ずつ見ていきます。

① ② 認証情報がソースに直書きされている

API_KEY = "aB3xY9zQ7mK2pL5nR8tV4wC6dF1gH0jS"
DB_PASSWORD = "kR7vQn2mXt9Bz4Lw"

この行は、打ち終わる前に波線が引かれます。変数名が API_KEY だからではありません。文字列の中身のエントロピー(ランダムさ)を「秘密の値」と判定しています。

秘密情報のハードコードは、一度コミットしてしまうと Git の履歴から完全に消すのが難しい種類の問題です。コミット前に気づけること自体に価値がある典型例といえます。

③ いつも成功してしまう assert(テストコード)

assert (result["rank"] == "S", "管理者で高得点なら S になるはず")

括弧が作っているのはタプルです。空でないタプルは常に真なので、この assert は絶対に失敗しません。テストは実行され、PASS し、CI も緑になってしまいます。

テストが緑である限り、CI もコードレビューも素通りする種類のバグです。括弧を 2 文字消して保存すれば、波線はその場で消えます。

④ ZIP を上限なしで展開している(Zip Bomb)

zipfile.ZipFile(archive_path).extractall(UPLOAD_DIR)

展開後のサイズを確認せずに extractall() を呼ぶと、細工された ZIP でディスクを食い潰されます(Zip Bomb)。数十 KB のファイルが展開後に数十 GB になる、というものが作れます。

この指摘は文字列の一致では出せません。zipfile.ZipFile(...) が返すオブジェクトの型を解決したうえで、そのオブジェクトに対する extractall() の呼び出しだと理解して出しています。コードの構造と型まで追いかけている、ということです。

⑤ 制御構文のネストが深すぎる(コードスメル)

try:
    if role == "admin":
        if age >= 18:
            if country == "JP":
                if score >= 80:

動きはします。ただ、条件が 1 つ増えるたびに読み手の負担が跳ね上がり、修正のときにバグを埋め込みやすくなります。早期リターン(ガード節)で段数を減らすのが定石です。

バグでもセキュリティ問題でもない、あとから効いてくる読みづらさまで拾ってくれるのが、この手のツールを入れておく効果です。


既定のルールセット「Sonar way」が、チームの最低ラインになる

いま見た 5 件を判定したルールは、すべて拡張機能の中に最初から入っています。Python の解析エンジンには 435 個のルールが同梱されていて、そのうち 398 個が最初から ON。これが Sonar way という既定のルールセットです。

残りの 37 個が OFF なのは、直すべきかどうかがチームによって変わるルールだからです。

  • ZIP の展開サイズ上限チェック —— 外部からアップロードされる ZIP を扱うなら必須ですが、社内の信頼できるファイルしか読まない環境では過剰になりえます。
  • 制御構文のネストの深さ) —— 何段まで許すかは、チームの好みそのものです。

裏を返すと、既定で ON になっている 398 個はどのチームでも「これは直すべき」と言えるものだけが選ばれています。だから、何の設定も、社内での合意形成もなしに配れます。

これが「最低ライン」の中身です。コーディング規約を作って周知して守らせる、という工程を踏まなくても、チーム全員がいきなりこの水準から書き始められます。導入コストの低さは、この製品のかなり大きな特徴だと思います。



まとめ

  • SonarQube for IDE は、解析エンジンをエディタに内蔵した SAST 解析機能(旧 SonarLint)
  • 使い方は入れて、開くだけ。アカウントもサーバーも設定ファイルも要らない
  • だから待ち時間がなく、入力しながら指摘が出る。コードは外に出ない
  • セキュリティもバグも保守性も1 つの拡張機能がまとめて拾う
  • 修正コストが一番低い瞬間に分かる (シフトレフト)
  • 既定の Sonar way が、設定ゼロでチーム全体の最低ラインになる
  • サーバーに繋げば、全開発者にまったく同じ品質基準・セキュリティ基準を効かせられる

「テストは緑なのに何も守っていない」ような問題は、CI もレビューもすり抜けます。そういうものを拾える場所が、書いているエディタの中にある——これが SonarQube for IDE のいちばん分かりやすい価値だと思います。


SonarQubeの導入・運用設計のご相談

貴社の開発環境や組織の成熟度に合わせた「段階的なSAST導入」や「Quality Gateの設計」について、お困りのことがございましたらお気軽にご相談ください。

クリエーションラインでは、SonarQube を活用した開発プロセスの改善・セキュリティ強化の支援を行っています。

👉 [SonarQubeの導入・活用について問い合わせる]

参考リンク

よくある質問(FAQ)

SonarLint と SonarQube for IDE の違いは?

同じ製品です。SonarLint が SonarQube for IDE に名称変更されました。SonarQube ファミリーとして名前が統一された形で、機能が別物になったわけではありません。

ソースコードは外部に送信されますか?

送信されません。解析エンジンは拡張機能に同梱されていて、解析は開発者の PC 上で完結します。ネットワークに接続していない状態でも動作します。

SonarQube サーバーがないと使えませんか?

サーバーなしで使えます。拡張機能を入れてファイルを開くだけで、既定のルールセットによる解析が始まります。この記事で紹介した機能は、ほぼすべてサーバーなしの状態のものです。サーバーと接続するなら、組織全体に同じセキュリティ基準を配布することができます。また、カスタムルールを追加することができます。

SonarQube サーバーに繋ぐと何が変わりますか?

解析の走る場所は変わりません(引き続き手元の IDE です)。変わるのはチーム全員のルールが揃うことです。サーバー側で 1 回決めた基準が各自の IDE に降りてきて、誰の環境でもまったく同じ指摘が出るようになります。また、カスタムルールを作成し、配布することができるようになります。公式ドキュメントも参照ください。

対応している言語は?

Java、JavaScript / TypeScript、Python、C#、C / C++、PHP、Go、Kotlin、Ruby、HTML、CSS、Secrets(認証情報の検出)など、多数の言語に対応しています。対応状況は更新されるため、最新は公式ドキュメントを確認してください。

対応している IDE は?

VS Code、IntelliJ IDEA などの JetBrains 製 IDE、Visual Studio、Eclipse に対応しています。

ESLint や Ruff のような一般的なリンターと何が違いますか?

セキュリティ、バグ、コード品質を解析を SonarQube for IDE は、1つで完結します。一般的なリンターを使用すると、言語ごと(JSならESLint、PythonならRuffなど)、あるいは用途ごと(構文チェック、セキュリティ用のBanditなど)多数の拡張機能を組み合わせる必要があります。

SonarQubeの導入・運用設計のご相談

貴社の開発環境や組織の成熟度に合わせた「段階的なSAST導入」や「Quality Gateの設計」について、お困りのことがございましたらお気軽にご相談ください。

クリエーションラインでは、SonarQube を活用した開発プロセスの改善・セキュリティ強化の支援を行っています。

👉 [SonarQubeの導入・活用について問い合わせる]

新規CTA