Конкуренты6 мин чтения2026-03-06

Semgrep + GitHub: настройка, возможности и честное сравнение с альтернативами

Когда речь заходит о статическом анализе кода в GitHub, Semgrep всплывает одним из первых. Инструмент с открытым ядром, гибкие правила, бесплатный tier — звучит

Когда речь заходит о статическом анализе кода в GitHub, Semgrep всплывает одним из первых. Инструмент с открытым ядром, гибкие правила, бесплатный tier — звучит как мечта. Но так ли всё радужно на практике?

Разберёмся, что умеет Semgrep, как его прикрутить к GitHub, где он работает отлично, а где создаёт больше проблем, чем решает. И, конечно, сравним с альтернативами — потому что выбор есть всегда.

Что такое Semgrep и зачем он нужен

Semgrep — это инструмент статического анализа кода (SAST). Он ищет баги, уязвимости безопасности и нарушения code style, не запуская код. Работает по принципу pattern matching: вы описываете паттерн, Semgrep находит все места, где этот паттерн встречается.

Главное отличие от классических анализаторов типа SonarQube — Semgrep не строит сложный граф потока данных (хотя добавляет эту функцию постепенно). Он быстрее, легче, и его правила пишутся на человекочитаемом DSL. Вот как выглядит правило, ищущее использование eval() в Python:

rules:
  - id: dangerous-eval
    pattern: eval(...)
    message: "eval() is dangerous. Don't use it."
    severity: WARNING
    languages: [python]

Просто, правда? Любой разработчик напишет такое правило за минуту. Не нужен PhD в области статического анализа.

Semgrep поддерживает 30+ языков: Python, JavaScript, TypeScript, Java, Go, Ruby, PHP, C, C++, Rust, Swift, Kotlin и другие. Причём поддерживает хорошо — не просто "умеет парсить", а знает особенности каждого языка.

Интеграция Semgrep с GitHub

Есть три способа запустить Semgrep в пайплайне GitHub. Разберём каждый.

Через GitHub Actions

Самый распространённый вариант. Добавляете в репозиторий файл .github/workflows/semgrep.yml:

name: Semgrep
on:
  pull_request:
  push:
    branches: [main]
jobs:
  semgrep:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: returntocorp/semgrep-action@v1
        with:
          config: >-
            p/security-audit
            p/secrets
            p/owasp-top-ten

Готово. Теперь при каждом PR Semgrep будет проверять код и оставлять комментарии прямо в пулл-реквесте. Бесплатно до 100 коммитов в месяц на публичных репозиториях.

Через GitHub App

У Semgrep есть готовое приложение в GitHub Marketplace. Устанавливаете в организацию, даёте доступ к репозиториям — и всё работает без единой строчки конфига.

Плюсы: не нужно возиться с Actions, получаете доступ к веб-интерфейсу Semgrep CI, где можно смотреть историю сканов, настраивать игнорирование, смотреть метрики. Минусы: данные уходят на серверы Semgrep (США), а это не всем подходит.

Локальный запуск в CI

Можно просто установить Semgrep через pip и запускать как CLI-утилиту:

pip install semgrep
semgrep --config auto --json > results.json

Это даёт полный контроль. Результаты можно парсить, отправлять куда угодно, интегрировать с любой системой. Но и настраивать придётся всё самостоятельно.

Сильные стороны Semgrep

По моему опыту, Semgrep отлично работает в нескольких сценариях.

Быстрый старт. Сконфигурировали, запустили — через 5 минут получаете первые находки. Не нужно неделю настраивать правила под свой проект. Встроенные наборы правил (p/security-audit, p/owasp-top-ten, p/secrets) покрывают типичные проблемы из коробки.

Кастомные правила. Написать правило под специфический паттерн вашего проекта — дело пары минут. На одном проекте мы написали правило, которое ловило использование deprecated-функций нашего внутреннего API. Semgrep нашёл 47 мест, которые мы пропустили бы при обычном code review.

Скорость работы. Semgrep быстрый. На проекте в 100K строк он отрабатывает за 10-20 секунд. Для сравнения: SonarQube на том же проекте думает минуты. Это критично для CI/CD — никто не хочет ждать 10 минут после каждого коммита.

Open source ядро. Можно использовать бесплатно, модифицировать, запускать на своих серверах. Коммерческая версия добавляет продвинутые правила (Semgrep Pro), AI-ассистента, интеграции — но базовый функционал доступен всем.

Где Semgrep подводит

Не всё так радужно. Есть моменты, которые бесят.

False positives. Semgrep иногда находит проблемы там, где их нет. Например, правило, ищущее SQL-инъекции, может ругаться на параметризованные запросы, если не понимает контекст. Приходится либо глушить предупреждения, либо дорабатывать правила.

# Semgrep может ругаться и на такое, если правило слишком агрессивное
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))

Поверхностный анализ. Semgrep не умеет строить полный граф потока данных (taint analysis) в бесплатной версии. Он найдёт eval(user_input), но может пропустить случай, когда user_input приходит через три функции и глобальную переменную. Для глубокого анализа уязвимостей нужен Semgrep Pro — а это уже платно.

Настройка игнорирования. Файл .semgrepignore работает по принципу .gitignore, но есть нюансы. На одном проекте мы полдня разбирались, почему Semgrep не проверяет определённую директорию. Оказалось, порядок паттернов в файле имеет значение, а документация об этом умалчивает.

Данные за рубежом. Если используете Semgrep CI App — ваши код и метрики уходят на серверы в США. Для многих российских компаний это стоп-фактор. Можно развернуть self-hosted версию, но это уже усложнение инфраструктуры.

Сравнение Semgrep с альтернативами

Поговорим о конкурентах. Сравним по критериям, которые реально важны в работе.

Критерий Semgrep CodeQL SonarQube Distiq
Цена Free / $50/мес Free для open source $150/мес От 3000 руб/мес
Скорость 10-30 сек 2-10 мин 1-5 мин 15-60 сек
Настройка Минимальная Сложная Средняя Минимальная
Кастомные правила Очень лёгкие Сложные Средние
Taint analysis В Pro версии Есть Есть Есть
Серверы США США Self-hosted РФ

CodeQL — главный конкурент от GitHub. Мощный, глубокий анализ, строит полноценный граф потока данных. Но: сложный в настройке, медленный, требует expertise. Бесплатен только для open source проектов. Если у вас приватный репозиторий — готовьте кошелёк.

SonarQube — классика жанра. Есть всё: quality gates, метрики, история, интеграции. Но тяжёлый, дорогой, требует отдельного сервера. Для маленькой команды — overkill.

Distiq — российский AI-бот для code review. Работает с GitLab, GitHub, GitVerse. Интегрируется за 2 минуты через webhook, серверы в РФ, данные не уходят за рубеж. Анализирует код с помощью LLM — находит баги, уязвимости, проблемы с производительностью. Не требует написания правил, понимает контекст лучше, чем pattern-matching инструменты.

Кому подходит Semgrep

Semgrep — отличный выбор, если:

Не подойдет, если:

Практические рекомендации

По-хорошему, один инструмент не закроет все потребности. Идеальная схема, которую я видел на продвинутых проектах:

  1. Pre-commit: легковесные линтеры (eslint, ruff, black) — быстро, локально, блокирует очевидные проблемы.
  2. CI/PR: Semgrep или аналог — поиск security-проблем и типичных багов.
  3. Nightly/Weekly: глубокий анализ (CodeQL, SonarQube) — сложные уязвимости, метрики качества.

Если ресурсов мало — начните с Semgrep. Он даст 80% результата за 20% усилий. Потом добавите инструменты по необходимости.

Резюме

Semgrep + GitHub — рабочая комбинация, которую используют тысячи команд. Быстрая настройка, гибкие правила, бесплатный tier — это плюсы. False positives, ограниченный taint analysis в бесплатной версии, серверы в США — это минусы.

Для российских команд, которым важна локализация данных, есть альтернативы. Я сейчас тестирую Distiq для наших проектов — он закрывает потребности в автоматическом code review, при этом данные остаются в РФ. Интеграция через webhook заняла пару минут, AI находит проблемы, которые Semgrep пропускает из-за ограничений pattern-matching. Если для вас критична работа с российским сервисом — попробуйте, это хорошая альтернатива Semgrep для GitHub.

Попробуйте Distiq для автоматического code review

AI-бот анализирует каждый MR/PR и оставляет комментарии с замечаниями. Интеграция за 2 минуты.

Попробовать бесплатно

Похожие статьи