Semgrep について
Semgrep はセマンティック分析を用いて、複数の言語にわたるバグ、セキュリティ脆弱性、コード品質の問題を見つけます。セキュリティ監査用の事前構築ルールセットを備え、CI パイプラインと統合して問題を早期に捕捉します。
主な機能
- 01セキュリティ脆弱性とロジックエラーをスキャン
- 02p/security-audit などの事前構築ルールパックを特定の関心事に使用
- 03CI/CD パイプラインで自動化分析を実行
- 04コードベース固有のパターンをターゲットにカスタム検出ルールを定義
活用シーン
- 01プルリクエストで一般的なセキュリティ脆弱性を検出
- 02コード品質と正確性標準を自動的に強制
- 03セキュリティベンチマークに対して複数リポジトリをスキャン
- 04言語固有のアンチパターンと設定ミスを検出
インストール
OS またはパッケージマネージャーを選び、コマンドをターミナルで実行します。
インストール後にsemgrep --versionを実行して確認します。
コマンド例
よく使うコマンドを使う順に並べています。
詳細
驚異的な速さでコードをスキャン。
Semgrep は高速なオープンソースの静的解析ツールです。コードを検索してバグを見つけ、安全性を確保するためのガードレールやコーディング標準を適用します。Semgrep は30 以上の言語に対応しており、IDE、コミット前チェック、CI/CD ワークフローの一部として実行できます。
Semgrep はコード向けの意味的な grep です。grep "2" を実行すると文字列 2 そのものだけに一致しますが、Semgrep は 2 を検索すると x = 1; y = x + 1 に一致します。Semgrep のルールは、普段書いているコードに似た形式です。抽象構文木や正規表現との格闘、扱いにくい DSL は必要ありません。
セキュリティ用途では、Semgrep Community Edition は単一の関数またはファイルの範囲内でしかコードを解析できないため、多くの真陽性を見逃すことにご注意ください。セキュリティ目的(SAST、SCA、シークレットスキャン)で Semgrep を使用する場合は、次の重要な機能が追加される Semgrep AppSec Platform を強くおすすめします。
- コア解析機能の向上(ファイル間・関数間の解析、データフローの到達可能性)により、誤検知を 25% 大幅に減らし、検出される真陽性を 250% 増やします。
- Semgrep Assistant(AI)による検出結果のコンテキストに応じた後処理で、ノイズをさらに約 20%削減します。さらに、Assistant は検出結果に合わせた段階的な修正ガイダンスを追加し、その内容は 80% を超える割合で、人が実際に活用できると評価されています。
- カスタマイズ可能なポリシーと開発者のワークフローへのシームレスな統合により、セキュリティチームは、さまざまな検出結果を開発者に表示する場所、タイミング、方法(IDE、PR コメントなど)をきめ細かく制御できます。 Semgrep AppSec Platform は、SAST、SCA、シークレットにわたる 20,000 件以上の独自ルールですぐに利用できます。Pro ルールは Semgrep のセキュリティリサーチチームが作成・保守しており、精度が非常に高いため、AppSec チームは開発者の作業を遅らせることなく、検出結果を開発者に直接共有できます。
Semgrep は、お使いのコンピューターまたはビルド環境でローカルにコードを分析します。デフォルトでは、コードがアップロードされることはありません。始める →。
言語サポート
Semgrep Code は、以下を含む 30 以上の言語をサポートしています。
Apex · Bash · C · C++ · C# · Clojure · Dart · Dockerfile · Elixir · HTML · Go · Java · JavaScript · JSX · JSON · Julia · Jsonnet · Kotlin · Lisp · Lua · OCaml · PHP · Python · R · Ruby · Rust · Scala · Scheme · Solidity · Swift · Terraform · TypeScript · TSX · YAML · XML · Generic(ERB、Jinja など)
Semgrep Supply Chain は、以下を含む 15 種類のパッケージマネージャーに対応した 12 の言語をサポートしています。
C#(NuGet) · Dart(Pub) · Go(Go modules、go mod) · Java(Gradle、Maven) · Javascript/Typescript(npm、Yarn、Yarn 2、Yarn 3、pnpm) · Kotlin(Gradle、Maven) · PHP(Composer) · Python(pip、pip-tool、Pipenv、Poetry) · Ruby(RubyGems) · Rust(Cargo) · Scala(Maven) · Swift(SwiftPM)
詳細については、サポート対象の言語をご覧ください。
始める 🚀
初めてご利用になる方には、Semgrep AppSec Platform から始めることをおすすめします。ビジュアルインターフェース、デモプロジェクト、結果のトリアージと調査のワークフローを利用でき、CI/CD のセットアップもすばやく行えるためです。スキャンは引き続きローカルで実行され、コードはアップロードされません。または、CLI から始めて、ターミナルの出力を確認しながら単発の検索を実行することもできます。
オプション 1:Semgrep Appsec Platform から始める(推奨)
-
semgrep.dev に登録します
-
デモの検出結果を確認して、Semgrep の仕組みを学びます
-
Projects > Scan New Project > Run scan in CIに移動して、プロジェクトをスキャンします -
バージョン管理システムを選択し、オンボーディングの手順に従ってプロジェクトを追加します。このセットアップ後、Semgrep はプルリクエストのたびにプロジェクトをスキャンします。
-
[任意]Semgrep をローカルで実行する場合は、CLI セクションの手順に従います。
注意事項:
問題が発生した場合は、Semgrep Slack でサポートをお求めください。
オプション 2:CLI から始める
-
Semgrep CLI をインストールします。
# macOS の場合 $ brew install semgrep # Ubuntu/WSL/Linux/macOS の場合 $ python3 -m pip install semgrep # インストールせずに Semgrep を試すには、Docker 経由で実行します $ docker run -it -v "${PWD}:/src" semgrep/semgrep semgrep login $ docker run -e SEMGREP_APP_TOKEN=<TOKEN> --rm -v "${PWD}:/src" semgrep/semgrep semgrep ci -
semgrep loginを実行して、アカウントを作成し、Semgrep にログインします。この手順は任意ですが、Semgrep にログインすると、次の機能を利用できます。- Semgrep Supply Chain:サードパーティライブラリに到達可能な脆弱性があるかを検出する依存関係スキャナーです。
- Semgrep Code's Pro rules:Semgrep のセキュリティリサーチチームが作成した、信頼性の高い 600 以上のルールです。
- Semgrep Code's Pro engine:複雑な脆弱性を検出し、誤検知を減らすために設計された高度なコード解析エンジンです。
-
アプリのルートディレクトリに移動し、
semgrep ciを実行します。これにより、プロジェクトをスキャンして、ソースコードと依存関係の脆弱性を確認します。 -
-eを使って、クエリを対話的に作成してみましょう。たとえば、左右の値が同じ Python の==をチェックします(バグの可能性があります)。$ semgrep -e '$X == $X' --lang=py path/to/src
Semgrep エコシステム
Semgrep エコシステムには、以下が含まれます。
-
Semgrep Community Edition - あらゆる機能の中核となるオープンソースのプログラム解析エンジンです。誤検知を許容できる度合いが高い、コンサルタント、セキュリティ監査担当者、ペネトレーションテスターなどの、都度実行する用途に適しています。
-
Semgrep AppSec Platform - 開発者に負担をかけるリスクなく、組織全体で SAST、SCA、シークレットのスキャンを簡単にオーケストレーションし、拡張できます。開発者に表示する検出結果と表示場所をカスタマイズし、GitHub、GitLab、CircleCI などの CI プロバイダーと連携できます。無料プランと有料プランの両方が含まれます。
-
Semgrep Code (SAST) - ノイズを最小限に抑える SAST により、脆弱性のバックログを着実に解消できます。セキュリティの知識がなくても、開発者が自分で問題をすばやく修正できるよう支援します。セキュリティガードレールを簡単に導入でき、段階的な修正ガイダンスを個々の状況に合わせて提供するため、開発者は作業の妨げと感じることなく、実際に問題を修正できます。
-
Semgrep Supply Chain (SSC) - オープンソースのサードパーティ製ライブラリや関数に含まれる、到達可能な脆弱性を検出する、高精度な依存関係スキャナーです。
-
Semgrep Secrets (Secrets scanning) - セマンティック解析、改良されたエントロピー解析、検証を用いて、開発者のワークフロー内にある機密性の高い認証情報を正確に検出するシークレット検出機能です。
-
Semgrep Assistant (AI) - Assistant は、開発者と AppSec チームの両方が Semgrep の検出結果を優先順位付け、トリアージ、大規模に修正するのを支援する、AI 搭載の AppSec エンジニアです。Assistant の自動トリアージの判断は、人間が 97% の確率で同意し、生成された修正ガイダンスは 80% の確率で役立つと評価されています。Assistant の仕組みの概要については、こちらの概要をご覧ください。
-
-
Semgrep MCP Server - AI コーディングアシスタントから Semgrep のスキャンを直接実行できる Model Context Protocol (MCP) サーバーです。Cursor、VS Code、Windsurf、Claude Desktop などと連携します。
semgrep mcpを実行するとローカルで起動できます。- フック - コーディング中に Semgrep のスキャンを自動的に実行します。
- スキル/プロンプト -
write_custom_semgrep_ruleなどの組み込み MCP プロンプトが、AI アシスタントによる正確な Semgrep ルールの作成を支援します。 - Claude Code プラグイン - 公式マーケットプレイス、および semgrep/mcp-marketplace リポジトリから利用できます:
/plugin marketplace add semgrep/mcp-marketplace - Cursor プラグイン - 公式マーケットプレイス、および semgrep/cursor-plugin リポジトリから利用できます。
その他のリソース:
- Semgrep Playground - ルールを作成して共有できる、オンラインの対話型ツールです。
- Semgrep Registry - セキュリティ、正確性、依存関係の脆弱性を対象とした、コミュニティ主導の 2,000 件以上のルールを収録しています。
GitLab、Dropbox、Slack、Figma、Shopify、HashiCorp、Snowflake、Trail of Bits などの企業で、すでに Semgrep を利用している数十万人の開発者やセキュリティエンジニアに加わりましょう。
Semgrep は、ソフトウェアセキュリティ企業 Semgrep, Inc. が開発し、商用サポートを提供しています。
Semgrep ルール
Semgrep ルールは、普段書いているコードのように記述できます。抽象構文木や正規表現との格闘、扱いにくい DSL は必要ありません。Python の print() 文を見つけるための簡単なルールを紹介します。
こちらをクリックして、Semgrep の Playground でオンライン実行できます。
例
ユースケースやアイデアについては、ドキュメント > ルールの例をご覧ください。
| ユースケース | Semgrep ルール |
|---|---|
| 危険な API を禁止する | exec の使用を防止する |
| ルートと認証を検索する | Spring のルートを抽出する |
| セキュアなデフォルトの使用を徹底する | Flask の Cookie を安全に設定する |
| シンクに流れ込む汚染データ | ExpressJS のデータフローを sandbox.run で確認する |
| プロジェクトのベストプラクティスを徹底する | == のチェックに assertEqual を使用する, subprocess の呼び出しを常にチェックする |
| プロジェクト固有の知識をルール化する | トランザクションを実行する前に検証する |
| セキュリティ上の注意箇所を監査する | Apache Airflow の XSS を検出する, ハードコードされた認証情報 |
| 設定ファイルを監査する | S3 ARN の使用箇所を検出する |
| 非推奨 API から移行する | DES は非推奨です, 非推奨の Flask API, 非推奨の Bokeh API |
| 自動修正を適用する | listenAndServeTLS を使用する |
拡張機能
エディターやプレコミットで Semgrep を使用する方法については、ドキュメント > 拡張機能をご覧ください。CI に統合し、プルリクエストをスキャンするよう設定すると、Semgrep はそのプルリクエストによって導入された問題のみを報告します。これにより、既存の問題を修正したり無視したりせずに Semgrep を使い始めることができます!
ドキュメント
Semgrep のウェブサイトにあるドキュメントをすべてご覧ください。Semgrep を初めて使う場合は、ドキュメント > はじめにまたはインタラクティブチュートリアルをご覧ください。
メトリクス
Registryのリモート設定(--config=p/ciなど)を使用すると、仮名化されたルールメトリクスが semgrep.dev に送信されます。
ローカルファイルの設定(--config=xyz.ymlなど)を使用する場合、メトリクスはユーザーがログインしているときにのみ送信されます。
Registry のルールメトリクスを無効にするには、--metrics=offを使用してください。
Semgrep のプライバシーポリシーでは、データ収集に関する判断の指針となる原則と、メトリクスが有効な場合に収集されるデータと収集されないデータの内訳について説明しています。
その他
- よくある質問(FAQ)
- コントリビューション
- 開発者向けビルド手順
- Semgrep コミュニティの Slack で質問する
- CLI リファレンスと終了コード
- Semgrep の YouTube チャンネル
- ライセンス(LGPL-2.1)
- Semgrep のライセンス
アップグレード
アップグレードするには、Semgrep のインストール方法に対応する以下のコマンドを実行してください。
# Using Homebrew
$ brew upgrade semgrep
# Using pipx
$ pipx upgrade semgrep
# Using uv tool command
$ uv tool upgrade semgrep
# Using Docker
$ docker pull semgrep/semgrep:latest
