静的解析

コードを実行せずにソースコードを解析し、バグ・脆弱性・スタイル違反を検出するツール

開発ツール品質

静的解析とは

静的解析 (Static Analysis) は、コードを実行せずにソースコードを解析し、バグ、脆弱性、スタイル違反を検出するツールである。コンパイル時やコミット前に問題を発見し、実行時エラーを未然に防ぐ。

静的解析の種類

静的解析の種類を以下にまとめる。

種類 ツール 検出対象
型チェック TypeScript 型エラー
リンター ESLint, Biome コードスタイル、バグパターン
セキュリティスキャン Semgrep, CodeQL 脆弱性 (SQLi, XSS)
IaC スキャン cfn-lint, Checkov インフラの設定ミス
依存脆弱性 npm audit, Snyk パッケージの脆弱性

TypeScript の型チェック

TypeScript の型チェックのコード例を示す。

// TypeScript が実行前にエラーを検出
function add(a: number, b: number): number {
  return a + b;
}
add(1, '2'); // ❌ コンパイルエラー: string は number に代入できない

ESLint

ESLint の例を示す。

{
  "rules": {
    "no-unused-vars": "error",
    "no-console": "warn",
    "eqeqeq": "error"
  }
}
// ESLint が検出
if (x == null) { }  // ❌ eqeqeq: === を使うべき
const unused = 42;   // ❌ no-unused-vars: 未使用の変数

CI/CD への組み込み

CI/CD への 組み込みの例を示す。

# GitHub Actions
jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci
      - run: npx tsc --noEmit        # 型チェック
      - run: npx eslint .             # リンター
      - run: npm audit --audit-level=high  # 脆弱性
      - run: cfn-lint template.yaml   # IaC スキャン

cfn-lint (CloudFormation)

cfn-lint (CloudFormation) の例を示す。

cfn-lint template.yaml
# E3012 Property Runtime not valid. Valid values: nodejs22.x, python3.12...
# W2001 Parameter Environment not used

静的解析 vs 動的解析

静的解析と動的解析の違いを以下にまとめる。

観点 静的解析 動的解析
実行 コードを実行しない コードを実行する
速度 高速 低速
カバレッジ 全コードパス 実行されたパスのみ
誤検知 あり 少ない
TypeScript, ESLint テスト, DAST

Shift Left

静的解析は「Shift Left」(問題を開発の早い段階で発見) の代表的な手法。コミット前 (pre-commit hook) で実行すると、CI の待ち時間を削減できる。

# pre-commit hook
npx tsc --noEmit && npx eslint --cache .

詳しくは関連書籍を参照。

この記事は役に立ちましたか?

関連用語

関連する記事