オープンソースセキュリティスキャン比較:Semgrep vs Trivy vs Snyk CLI でDevSecOpsを実現する
オープンソースラボ編集部 ・ 2026年6月13日
オープンソースセキュリティスキャンツール比較:Semgrep vs Trivy vs Snyk CLI でDevSecOpsを実現する
CI/CDパイプラインにセキュリティスキャンを組み込む「DevSecOps」は現代のソフトウェア開発の標準です。Semgrep・Trivy・Snyk CLIはオープンソースで使えるセキュリティスキャンツールで、コード・依存パッケージ・コンテナイメージの脆弱性を自動検出します。
DevSecOpsが解決する問題
従来: 本番リリース後にセキュリティレビュー→修正コスト大 DevSecOps: PRマージ前に自動スキャン→早期発見・低コスト修正
スキャン対象別に以下を分類します:
- SAST: ソースコードの静的解析(SQL Injection・XSSパターン等)
- SCA: 依存パッケージの既知脆弱性(CVE)検出
- コンテナスキャン: DockerイメージのOS/パッケージ脆弱性
- IaCスキャン: Terraform・Kubernetes設定のミス検出
主要ツールの概要
Semgrep
ルールベースの静的解析ツールです。「このコードパターンは危険」という直感的なルールをYAMLで記述でき、30以上の言語に対応しています。
# Semgrepのインストール
pip install semgrep
# または
brew install semgrep
# デフォルトのSASTルールでスキャン
semgrep --config=auto src/
# 特定のルールセット
semgrep --config=p/javascript-xss .
semgrep --config=p/sql-injection .
semgrep --config=p/python-security .
# カスタムルールの例(Pythonのeval使用を検出)
cat > custom-rules.yaml << 'YAML'
rules:
- id: dangerous-eval
pattern: eval(...)
message: evalの使用はコードインジェクションのリスク
languages: [python, javascript]
severity: ERROR
YAML
semgrep --config=custom-rules.yaml src/
Trivy
AquaSecurityが開発するオープンソースの脆弱性スキャナーです。コンテナイメージ・ファイルシステム・Gitリポジトリ・IaCファイル(Terraform・K8s)・SBOMをスキャンします。
# Trivyのインストール
brew install trivy
# または
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
# コンテナイメージのスキャン
trivy image nginx:latest
trivy image --severity HIGH,CRITICAL node:18
# ファイルシステムスキャン(依存パッケージ)
trivy fs .
trivy fs --scanners vuln,secret,config .
# IaCスキャン(Terraform・K8s)
trivy config ./terraform/
trivy config k8s-manifests/
# Gitリポジトリのスキャン
trivy repo https://github.com/your-org/your-repo
# SBOMの生成
trivy image --format cyclonedx --output sbom.json nginx:latest
Snyk CLI
SnykはSaaS型のセキュリティプラットフォームですが、CLIはオープンソースで使えます。コード・依存パッケージ・コンテナ・IaCをスキャンします。
# Snyk CLIのインストール
npm install -g snyk
snyk auth # Snykアカウントが必要(無料プランあり)
# 依存パッケージのスキャン(SCA)
snyk test
snyk test --all-projects
# コードスキャン(SAST)
snyk code test
# コンテナスキャン
snyk container test nginx:latest
snyk container monitor nginx:latest # 継続監視
# IaCスキャン
snyk iac test terraform/
snyk iac test k8s-manifests/
# 自動修正のPRを作成
snyk fix
機能比較表
| 比較項目 | Semgrep | Trivy | Snyk CLI |
|---|---|---|---|
| SASTコードスキャン | ✅ 高機能 | ⚠️ | ✅ |
| SCA(依存脆弱性) | ⚠️ | ✅ | ✅ 高機能 |
| コンテナスキャン | ❌ | ✅ 高機能 | ✅ |
| IaCスキャン | ⚠️ | ✅ | ✅ |
| シークレット検出 | ✅ | ✅ | ✅ |
| SBOM生成 | ❌ | ✅ | ✅ |
| アカウント不要 | ✅ | ✅ | ❌ |
| カスタムルール | ✅ YAML | ❌ | ⚠️ |
| CI統合 | ✅ | ✅ | ✅ |
| GitHub Actions統合 | ✅ | ✅ | ✅ |
| 修正提案 | ❌ | ❌ | ✅ |
| オフライン動作 | ✅ | ✅ | ❌ |
| ライセンス | LGPL 2.1 | Apache 2.0 | Apache 2.0 |
| GitHub Stars | 10k+ | 23k+ | 1k+ |
GitHub ActionsでCI/CDに統合する
# .github/workflows/security.yml
name: Security Scan
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
semgrep:
name: SAST - Semgrep
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: returntocorp/semgrep-action@v1
with:
config: >-
p/javascript-xss
p/sql-injection
p/python-security
trivy:
name: Container & IaC Scan - Trivy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
scan-type: "fs"
scan-ref: "."
severity: "HIGH,CRITICAL"
exit-code: "1"
format: "sarif"
output: "trivy-results.sarif"
- name: Upload Trivy scan results to GitHub Security tab
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: "trivy-results.sarif"
セキュリティツールはセキュリティカテゴリ(/categories/security)で一覧でき、DevOps・CI/CDツールはDevOpsカテゴリ(/categories/devops)でも探せます。
FAQ
Q. SemgrepとSonarQubeの違いは何ですか?
A. どちらも静的解析ツールですが、アプローチが異なります。Semgrepはパターンマッチングベースで、「このコードの書き方は危険」というルールをYAMLで書くことで、カスタムルールの作成が簡単です。SonarQubeは複雑なデータフロー解析・品質ゲート・技術的負債の可視化が強みで、コードの品質管理全般に向いています。セキュリティ特化ならSemgrep、コード品質全般はSonarQubeが適しています。
Q. TrivyはDockerfileとコンテナイメージの両方をスキャンできますか?
A. できます。trivy config DockerfileでDockerfileのIaCスキャン(危険な設定パターンの検出)、trivy image myimage:latestでビルド済みコンテナイメージの脆弱性スキャンを行えます。前者はビルド前のチェック、後者はビルド後の最終確認として使い分けます。
Q. SnykはOSSプロジェクトでも使えますか?
A. Snykはオープンソースプロジェクトに対して無料プランを提供しており、パブリックリポジトリでは無制限で使えます。プライベートリポジトリは月200回のスキャンまで無料です。snyk testで依存パッケージの既知CVEを検出し、snyk fixで修正コミットを自動提案してくれます。
Q. コンテナイメージのCVEをゼロにすることは現実的ですか?
A. 「HIGH・CRITICAL」を修正することは現実的ですが、「全CVEゼロ」は多くの場合非現実的です。ベースイメージは常に何らかのLow/Medium CVEを含みます。trivy image --ignore-unfixedオプションで「修正版が公開されている」CVEのみを表示するフィルタリングを活用し、修正可能なものから優先的に対応するアプローチが現実的です。
Q. DevSecOpsを始める最初のステップは何ですか?
A. まずTrivyを既存のCI(GitHub Actions等)に追加して依存パッケージとコンテナのスキャンから始めることを推奨します。設定が最もシンプルで、アカウント登録不要・無料で使えます。数週間後にSemgrepを追加してコードのSASTスキャンを行い、さらにIaCスキャンを加えていく段階的アプローチが組織への定着に向いています。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| コードのSASTスキャン | Semgrep |
| コンテナ・IaCスキャン | Trivy |
| 依存パッケージの脆弱性管理 | Snyk CLI / Trivy |
| CI/CDのDevSecOps統合 | Trivy + Semgrep |