静的解析

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

開発ツール品質

静的解析とは

静的解析 (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 .

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

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

関連用語

関連する記事