Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
DiffCatcher — Gitリポジトリを再帰的に検出し、状態変更をキャプチャし、差分を生成し、完全なスニペットを含むコード要素を抽出し、コードレビューと監査ワークフロー向けのセキュリティ重視レポートを作成するRust製CLIツールです。 | Kitploit
ツール/GitHubGitHub/teycir/diffcatcher
静的分析脆弱性分析コード分析スクリプトと自動化情報収集DevSecOpsユーティリティとフレームワークシークレット検出設定ミスログ分析
GitHubteycir/diffcatcher

DiffCatcher

44ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Gitリポジトリを再帰的に検出し、状態変更をキャプチャし、差分を生成し、完全なスニペットを含むコード要素を抽出し、コードレビューと監査ワークフロー向けのセキュリティ重視レポートを作成するRust製CLIツールです。

リポジトリを見る

開発支援

このプロジェクトがあなたの仕事に役立っているなら、継続的なメンテナンスと新機能の開発を支援してください。

ETH 寄付ウォレット
0x11282eE5726B3370c8B480e321b3B2aA13686582

イーサリアム寄付用QRコード

上記のQRコードをスキャンするか、ウォレットアドレスをコピーしてください。

DiffCatcher ロゴ

Rust License Security

Rust製CLIツール。Gitリポジトリを再帰的に検出し、状態変更をキャプチャ、差分を生成、コード要素を完全スニペット付きで抽出、コードレビューや監査ワークフロー向けのセキュリティ重視レポートを出力します。


🎯 主な機能

  • リポジトリ検出: 設定可能なフィルタでディレクトリを再帰的にスキャンしGitリポジトリを発見
  • 状態追跡: プル前後の状態をコミットハッシュ、メッセージ、ダーティ検出と共にキャプチャ
  • 差分生成: N vs N-1および過去差分の自動生成、ファイルマニフェスト付き
  • 要素抽出: 10以上の言語に対応し、関数、構造体、クラス、インポートなどを差分から解析
  • コードスニペット: 境界検出とコンテキストウィンドウで変更前後の完全なコードを抽出
  • セキュリティタグ付け: 18の組み込みセキュリティパターン(暗号、認証、秘密情報、SQLインジェクション、XSSなど)
  • マルチフォーマットレポート: JSON、Markdown、テキスト、SARIF出力、リポジトリ横断のセキュリティ概要
  • ブランチ差分モード: 単一リポジトリ内の任意の2つの参照(ブランチ、タグ、コミット)を差分 — PRレビューに最適
  • パフォーマンス: プログレスバー、LRUキャッシュ、インクリメンタルモードによる並列処理

なぜ単にbashを使わないのか?

ls | while read line; do git -C "$line" diff HEAD~1 HEAD || true; done のようなワンライナーは生の差分しか表示しません。 DiffCatcherは再帰的検出、コード要素抽出、セキュリティパターン検出、 CI/CD向けSARIF出力、並列処理、リポジトリ横断のセキュリティ集約を追加します。 詳細な比較は以下のbash比較を参照してください。

📋 目次

  • インストール
  • クイックスタート
  • 使い方
    • 基本スキャン
    • プルモード
    • 抽出オプション
    • セキュリティタグ付け
    • 設定ファイル
    • プラグインシステム
    • ブランチ差分モード(PRレビュー)
    • SARIF出力
    • 高度な機能
  • レポート構造
  • 設定
  • アーキテクチャ
  • テスト
  • ドキュメント
  • 貢献

🚀 インストール

ソースから

root@kitploit:~
git clone https://github.com/Teycir/DiffCatcher.git
cd DiffCatcher
cargo build --release
./target/release/diffcatcher --help

必要条件

  • Rust 1.70以上
  • Git 2.0以上

⚡ クイックスタート

root@kitploit:~
# ディレクトリ内の全リポジトリをスキャン(fetchのみ、変更なし)
diffcatcher ~/projects

# プル更新してセキュリティレポートを生成
diffcatcher ~/projects --pull -o ./report

# 単一リポジトリ内の2つのブランチを差分(PRレビューモード)
diffcatcher ./my-repo --diff main..feature/auth -o ./pr-report

# GitHub Code Scanning向けSARIF出力を生成
diffcatcher ~/projects --summary-format sarif,json -o ./report

# ドライラン:何がスキャンされるか確認
diffcatcher ~/projects --dry-run

# 8並列ワーカーで高速スキャン
diffcatcher ~/projects -j 8 --quiet

📖 使い方

基本スキャン

root@kitploit:~
# デフォルト設定でスキャン(fetchのみ)
diffcatcher <ROOT_DIR>

# カスタム出力ディレクトリ
diffcatcher ~/projects -o ./my-report

# ネストされたリポジトリを含め、シンボリックリンクを追跡
diffcatcher ~/projects --nested --follow-symlinks

# 隠しディレクトリをスキップ
diffcatcher ~/projects --skip-hidden

プルモード

root@kitploit:~
# Fetchのみ(デフォルト、ワーキングツリーは変更なし)
diffcatcher ~/projects

# 実際にプルを実行
diffcatcher ~/projects --pull

# ダーティリポジトリでstash/popを強制プル
diffcatcher ~/projects --pull --force-pull

# rebase戦略を使用
diffcatcher ~/projects --pull --pull-strategy rebase

# fetch/pullを完全にスキップ(過去差分のみ)
diffcatcher ~/projects --no-pull

抽出オプション

root@kitploit:~
# 要素抽出をスキップ(生の差分のみ)
diffcatcher ~/projects --no-summary-extraction

# 要素は抽出するがコードスニペットはスキップ
diffcatcher ~/projects --no-snippets

# スニペットのコンテキストと制限を調整
diffcatcher ~/projects --snippet-context 10 --max-snippet-lines 300

# 差分あたりの要素数を制限
diffcatcher ~/projects --max-elements 1000

セキュリティタグ付け

root@kitploit:~
# セキュリティタグ付けをスキップ
diffcatcher ~/projects --no-security-tags

# テストファイルもセキュリティ分析に含める
diffcatcher ~/projects --include-test-security

# カスタムセキュリティパターンを使用
diffcatcher ~/projects --security-tags-file ./custom-patterns.json

設定ファイル

DiffCatcherはプロジェクトローカルの設定を自動読み込みします:

  • <ROOT_DIR>/.diffcatcher.toml (デフォルト)
  • --config <FILE> でカスタムファイル
  • --no-config で無効化

例:

root@kitploit:~
output = "reports-local"
no_pull = true
history_depth = 2
summary_formats = ["json", "txt"]
no_security_tags = false

[plugins]
security_pattern_files = ["plugins/security-extra.json"]
extractor_files = ["plugins/extractors.json"]

CLIフラグは明示的に設定された場合、設定値を上書きします。

プラグインシステム

DiffCatcherは2種類のプラグインをサポート:

  • セキュリティパターンプラグイン: --security-plugin-file <FILE> (繰り返し可)
  • 抽出プラグイン: --extractor-plugin-file <FILE> (繰り返し可)

セキュリティプラグインの形式は --security-tags-file JSON (version, mode, tags) と同様です。

抽出プラグインの形式:

root@kitploit:~
{
  "version": 1,
  "extractors": [
    {
      "name": "policy-rule",
      "kind": "Config",
      "regex": "^policy\\s+([A-Za-z_][A-Za-z0-9_]*)"
    }
  ]
}

ブランチ差分モード(PRレビュー)

root@kitploit:~
# 単一リポジトリ内の2つのブランチを差分
diffcatcher ./my-repo --diff main..feature/auth

# 特定のコミットを差分
diffcatcher ./my-repo --diff abc123..def456

# CI統合用SARIF出力で差分
diffcatcher ./my-repo --diff origin/main..HEAD --summary-format sarif -o ./pr-report

--diff BASE..HEAD フラグはリポジトリ検出とfetch/pullをスキップし、直接2つの参照(ブランチ、タグ、またはコミットSHA)を差分し、結果に対して完全な抽出+セキュリティタグ付けパイプラインを実行します。

SARIF出力

root@kitploit:~
# 他の形式と一緒にSARIFを生成
diffcatcher ~/projects --summary-format sarif,json,md

# CI/CDアップロード用にSARIFのみ
diffcatcher ~/projects --summary-format sarif -o ./report

--summary-format に sarif が含まれている場合、レポートルートに results.sarif ファイルが書き込まれます。このファイルは SARIF 2.1.0 標準に従い、GitHub Code Scanning、VS Code SARIF Viewer、Azure DevOps、その他のSARIF互換ツールと統合できます。

高度な機能

root@kitploit:~
# インクリメンタルモード(変更のないリポジトリをスキップ)
diffcatcher ~/projects --incremental -o ./report

# ブランチパターンでフィルタ
diffcatcher ~/projects --branch-filter "main"

# 履歴深度を調整
diffcatcher ~/projects --history-depth 5

# CI/CD用JSON出力
diffcatcher ~/projects --quiet --json > result.json

# 発見したパスの詳細出力
diffcatcher ~/projects --verbose

📁 レポート構造

root@kitploit:~
<report_dir>/
├── summary.json                    # 全体サマリー
├── summary.md                      # Markdownサマリー
├── results.sarif                   # SARIF 2.1.0出力 (--summary-format sarif 時)
├── security_overview.json          # リポジトリ横断セキュリティ集約
├── security_overview.md
├── <repo-name>/
│   ├── status.json                 # リポジトリ状態
│   ├── pull_log.txt
│   └── diffs/
│       ├── diff_N_vs_N-1.patch     # 生の統合差分
│       ├── changes_N_vs_N-1.txt    # ファイルマニフェスト
│       ├── summary_N_vs_N-1.json   # 要素抽出
│       ├── summary_N_vs_N-1.md
│       └── snippets/
│           ├── 001_validate_token_ADDED.rs
│           ├── 002_check_permissions_BEFORE.rs
│           ├── 002_check_permissions_AFTER.rs
│           └── 002_check_permissions.diff
└── ...

⚙️ 設定

CLIフラグ

全オプションは diffcatcher --help を参照してください。

カスタムセキュリティパターン

カスタムパターンを定義したJSONファイルを作成:

root@kitploit:~
{
  "version": 1,
  "mode": "extend",
  "tags": [
    {
      "tag": "pii-handling",
      "description": "PIIデータ処理",
      "severity": "High",
      "patterns": ["ssn", "social_security", "passport"]
    }
  ]
}

--security-tags-file ./patterns.json で使用。

🏗️ アーキテクチャ

root@kitploit:~
src/
├── cli.rs              # 引数解析
├── scanner.rs          # リポジトリ検出
├── git/                # Git操作
│   ├── commands.rs     # Gitラッパー
│   ├── state.rs        # 状態キャプチャ
│   ├── diff.rs         # 差分生成
│   └── file_retrieval.rs
├── extraction/         # 要素抽出
│   ├── parser.rs       # 統合差分パーサー
│   ├── elements.rs     # 要素検出
│   ├── snippets.rs     # コードスニペット抽出
│   ├── boundary.rs     # 括弧/インデント追跡
│   └── languages/      # 言語固有パターン
├── security/           # セキュリティタグ付け
│   ├── tagger.rs       # パターンマッチング
│   ├── patterns.rs     # 組み込みパターン
│   └── overview.rs     # リポジトリ横断集約
└── report/             # レポート生成
    ├── writer.rs       # ディレクトリ構造
    ├── json.rs         # JSONシリアライズ
    ├── sarif.rs        # SARIF 2.1.0出力
    ├── markdown.rs     # Markdownフォーマット
    └── snippet_writer.rs

Bash比較

シンプルなbashワンライナーで差分を表示できます:

root@kitploit:~
ls | while read line; do git -C "$line" diff HEAD~1 HEAD || true; done

これは簡単な確認には有効ですが、DiffCatcherは以下のような高度な機能を追加します:

bashワンライナーは約100バイトです。DiffCatcherは完全なコード要素抽出を備えたセキュリティ重視の監査ツールです。

🧪 テスト

root@kitploit:~
# 全テストを実行
cargo test

# 特定のテストスイートを実行
cargo test security_tagger

# 出力を表示して実行
cargo test -- --nocapture

テストカバレッジ:

  • ユニットテスト: 抽出、セキュリティタグ付け、境界検出
  • 統合テスト: 状態キャプチャ、差分生成、レポート
  • ゴールデンファイルテスト: 抽出精度
  • エッジケーステスト(detached HEAD、ベアリポジトリ、単一コミット)

パフォーマンスベンチマーク

root@kitploit:~
# ベンチマークバイナリをコンパイル
cargo bench --no-run

# ベンチマークハーネスを実行
cargo bench --bench core_bench

ベンチマークソースは benches/core_bench.rs にあり、パーサー/抽出のスループットを追跡します。

CI/CD

GitHub Actionsワークフローが含まれています:

  • .github/workflows/ci.yml: フォーマットチェック、clippy、テスト、ベンチマークビルド
  • .github/workflows/release.yml: タグベースのリリースパッケージングとGitHubリリース公開

📚 ドキュメント

プロジェクトドキュメント

  • Plan.md - 完全な仕様書 (v1.2)
  • Roadmap.md - 実装ロードマップと進捗
  • セキュリティパターンリファレンス(src/security/patterns.rs 参照)

コードドキュメント

全モジュールに包括的なインラインドキュメントがあります。主要モジュール:

  • src/extraction/parser.rs - ハンク抽出付き統合差分パーサー
  • src/extraction/elements.rs - 言語認識コード要素検出
  • src/extraction/snippets.rs - 境界検出付き完全コードスニペット抽出
  • src/security/tagger.rs - セキュリティパターンマッチングエンジン
  • src/git/commands.rs - Git操作ラッパー

完全なAPIドキュメントの生成:

root@kitploit:~
cargo doc --open

🏷️ タグ

#rust #git #security #code-review #diff-analysis #static-analysis #devops #cli-tool #audit #vulnerability-detection #code-quality #snippet-extraction #parallel-processing #security-scanning

🤝 貢献

貢献を歓迎します!以下の手順でお願いします:

  1. リポジトリをフォーク
  2. フィーチャーブランチを作成
  3. 新機能にはテストを追加
  4. cargo test が通ることを確認
  5. プルリクエストを送信

📄 ライセンス

MITライセンス - 詳細はLICENSEファイルを参照

📧 連絡先

  • 作者: Teycir Ben Soltane
  • メール: [email protected]
  • ウェブサイト: teycirbensoltane.tn

🔗 リンク

  • GitHubリポジトリ
  • Issue Tracker
  • 変更履歴
ツールをダウンロード
フラグデフォルト説明
-o, --output./reports/<timestamp>レポート出力ディレクトリ
-j, --parallel4同時リポジトリ処理数
-t, --timeout120Git操作のタイムアウト(秒)
-d, --history-depth2差分対象の過去コミット数
--snippet-context5変更前後のコンテキスト行数
--max-snippet-lines200スニペットあたりの最大行数
--max-elements500差分あたりの最大要素数
--diff—単一リポジトリ内の2つの参照を差分 (BASE..HEAD)
--summary-formatjson,md出力形式: json, md, txt, sarif
機能BashワンライナーDiffCatcher
再帰的検出トップレベルのみネストリポジトリ、シンボリックリンク、フィルタ
状態追跡なしコミットハッシュ、ダーティ検出、プルログ
コード理解生差分のみ10以上の言語で関数/構造体/クラスを抽出
コードスニペットなしコンテキストウィンドウ付きの完全なbefore/after
セキュリティ分析なし18の組み込みパターン(認証、暗号、秘密情報、SQLi、XSS)
出力形式ターミナルのみJSON、Markdown、SARIF(GitHub Code Scanning)
リポジトリ横断ビュー個別リポジトリのみ全リポジトリの集約セキュリティレポート
パフォーマンス逐次並列ワーカー、LRUキャッシュ、インクリメンタルモード
CI/CD統合なしSARIFアップロード(GitHub/Azure DevOps)
エラーハンドリング`
パス処理スペースで失敗すべてのパス名を正しく処理
履歴コンテキスト固定HEAD~1設定可能な深度、状態追跡