【せいてきかいせき】

静的解析 とは?

💡 「動かす前」にバグを見つける
📌 このページのポイント
静的解析 ― 実行せずにコードを分析 ソースコード .js .py .ts ... 実行しない 静的解析ツール ・構文チェック ・型チェック ・コーディング規約 ・脆弱性検出 問題なし ✓ 警告・エラー ! 静的解析 コードを読んで分析 早期にバグを発見できる 動的解析 実行して動作を確認 実行時のバグを発見
静的解析のイメージ
ひよこ ひよこ

リンターと何が違うの?

ペンギン先生 ペンギン先生

リンターは静的解析の一種だよ。リンターは主にコーディングスタイルや軽微なエラーを検出する。静的解析はそれに加えて、セキュリティ脆弱性SQLインジェクションXSSなど)、バグパターン、複雑度分析などより深い分析も含む広い概念なんだ

ひよこ ひよこ

具体的にどんなバグが見つかる?

ペンギン先生 ペンギン先生

null参照の可能性、使われていない変数、到達不能コード、リソースのクローズ忘れ、セキュリティ脆弱性(ハードコードされたパスワード、インジェクション脆弱性)、循環的複雑度の高い関数など。人間のコードレビューでは見落としがちなパターンを機械的に検出できるよ

ひよこ ひよこ

誤検知(false positive)が多いって聞いたけど?

ペンギン先生 ペンギン先生

確かにそこが課題だよ。ツールが「危険かもしれない」と報告しても実際には問題ないケースがある。誤検知が多すぎると開発者がアラートを無視するようになる。ルールの調整や抑制コメントの活用で誤検知を管理しつつ、重要なルールに絞って運用するのがコツだね

ひよこ ひよこ

おすすめのツールは?

ペンギン先生 ペンギン先生

言語による。JavaScript/TypeScriptならESLintPythonならPylint/RuffJavaならSpotBugs、C/C++ならClang Static Analyzer。言語横断ではSonarQubeが定番だよ。セキュリティ特化ならSemgrepやSnyk Codeがおすすめ。まずはCIに1つ入れてみることが第一歩だね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「静的解析」って出てきたら「コードを実行せずに問題を検出する分析手法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Static Analysis」 = 静的解析
💬 Static(静的=動かさない)Analysis(分析)。対義語はDynamic Analysis(動的解析=実行して分析)だよ
← 用語集にもどる