OSS探訪GitHubでログイン

ソースコードに似たパターンで多言語の不具合や規約違反を探す

スコアの見方

OSS規模スコアはStars・Watchers・Forks・Contributorsを対数圧縮して重み付けした現在の規模指標(上限なし)です。発掘スコアは現在のOSS規模スコアから発掘時点のOSS規模スコアを引いた値、更新ペースは直近30日Commit数、成長モメンタムは直近の観測期間におけるOSS規模スコア差、OSS健全度は取得できた更新状況・Community Health・Releaseの0〜100評価です。

Stars
16,867
主要言語
C
ライセンス
LGPL-2.1
リポジトリ最終更新
2026/10/02
ページ内ナビ

概要

Semgrepは、探したいコードの形に近いパターンを書いてソースコードを調べる静的解析ツールです。30以上の言語を対象に、既知の不具合の変種、危険なAPI利用、組織のコーディング規約を開発中の確認からCIまで同じ規則で検査できます。

特徴と向いている用途

公式資料に基づく紹介・実機未検証 · 内容確認日:

主な特徴

コードの形を保った規則で意味のある一致を探す

文字列検索だけでは扱いにくい変数名の違いや構文を抽象化し、ソースコードに似た規則で一致を探せます。既成規則に加えてYAMLで独自規則を作成でき、CLI、エディター、pre-commit、CIへ段階的に組み込めます。CLIは既定で対象コードをローカルに保ったまま解析します。

出典:[1]

向いている用途

調査用の一回の検索を継続的な防止策へ育てる

障害や脆弱性で見つかったコードの形を同じリポジトリ内から探し、その規則をレビュー時の検査として残す用途に適しています。小さな対象で一致内容を確認してから規則を版管理し、pre-commitやCIへ追加すれば、同種の変更を早い段階で検出できます。

出典:[1]

導入前の確認

Community Editionの解析範囲を安全性保証と混同しない

Community Editionの解析は単一の関数またはファイル内に限られ、関数間・ファイル間のデータフローが必要な安全性の問題を見逃す可能性があります。v1.179.0のpip導入はPython 3.10以上が前提です。AppSec Platformの追加解析やCI連携を使う場合は、アカウント、認証、コード処理方針も別に確認してください。GitHubはライセンスをLGPL-2.1と表示しています。

出典:[1][2][3][4]

参考にした公式資料

  1. [1]Semgrep v1.179.0 README(2026-10-04)
  2. [2]Semgrep v1.179.0 CLI package metadata(2026-10-04)
  3. [3]semgrep/semgrep GitHub repository metadata(2026-10-04)
  4. [4]Semgrep v1.179.0 LICENSE(2026-10-04)
編集部からの補足

最初に少数の実例と既知の見逃しを用意し、規則の誤検知・見逃しを測ってください。単一ファイル内の確認にはCommunity Editionを使い、関数間・ファイル間の追跡が必要な安全性検査はAppSec Platformを含めて評価します。

3ステップで試す

  1. 1

    Python環境を分ける

    Python 3.10以上とmacOSまたはLinuxのPOSIXシェルを前提に、試行用の仮想環境を作成して有効にします。以降も同じ端末と作業ディレクトリを使います。

    python3 -m venv semgrep-demo-env && . semgrep-demo-env/bin/activate
  2. 2

    Semgrep 1.179.0を導入する

    確認したCLIの固定版を仮想環境へ導入します。アカウントやトークンは不要です。

    python -m pip install "semgrep==1.179.0"
  3. 3

    ローカルの例を検査する

    2行のPythonファイルをLF改行で生成し、公式READMEと同じ直接指定した規則で解析して、検出結果が1件であることを確認します。対象コードの送信や外部プロジェクトの変更は行いません。

    printf '%s\n' 'def same(value):' ' return value == value' > demo.py && semgrep --json -e '$X == $X' --lang=py demo.py > results.json && python -c 'import json; assert len(json.load(open("results.json"))["results"]) == 1'
公式READMEで確認

成長

成長の推移 · 直近30日

16,867 Stars

推移データを蓄積中です。

開発アクティビティ

直近90日・週次

Commit(直近30日)
82
Open PR
55

開発アクティビティを蓄積中です。

Built with

カテゴリとタグ

GitHubデータ

GitHubのデータGitHubの詳細データを見る

GitHub Topics

  • static-analysis
  • static-code-analysis
  • java
  • go
  • sast
  • semgrep
  • r2c
  • c
  • python
  • ruby
  • javascript
  • typescript
Stars
16,867
Forks
1,084
Watchers
119
Open Issues
886
Contributors
207
所有者種別
Organization
主要言語
C
ライセンス
LGPL-2.1
リポジトリ最終更新
2026/10/02

このOSSの使い方や活用事例をMarkdownで投稿できます。管理者が承認した後に公開されます。

情報の誤りを報告

掲載内容に誤りや古い情報があればお知らせください。

このページを読んで、次に何をすればよいか分かりましたか?