mcpField
R
repomix-safe-mixer

repomix-safe-mixer

github.com/daymadeセキュリティ1.5k917 回インストール今日更新
リポジトリ

repomix-safe-mixer について

コードベースを repomix でパッケージ化する前に、ハードコードされた認証情報を検出するセキュリティ向けスキルです。潜在的な秘密が見つかると場所を報告して処理を止め、単独スキャンにも対応します。

主な機能

  1. 01一般的な認証情報パターンのスキャン
  2. 02検出箇所のファイルと行番号の報告
  3. 03秘密検出時のパッケージ化停止
  4. 04JSON 出力付きの単独スキャン
  5. 05repomix の設定と出力オプションの適用

活用シーン

  1. 01repomix パッケージ共有前のプロジェクト確認
  2. 02コミット前のコードベース監査
  3. 03認証情報の削除確認
  4. 04スキャン後のプロジェクトパッケージ化

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/daymade/claude-code-skills --skill repomix-safe-mixer

インストール後、Claude Code で/repomix-safe-mixerを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
common_secrets.md
scripts/
safe_pack.py
scan_secrets.py

詳細

Repomix Safe Mixer

概要

ハードコードされた認証情報を自動的に検出して削除し、repomix でコードベースを安全にパッケージ化します。

このスキルは、repomix でコードをパッケージ化する際に、認証情報が誤って公開されるのを防ぎます。ハードコードされたシークレット(API キー、データベース認証情報、トークン)をスキャンして検出結果を報告し、安全なパッケージ化を実現します。

使用するタイミング:コードを配布するために repomix でパッケージ化するとき、共有可能な参照用パッケージを作成するとき、またはコード内にハードコードされた認証情報がないか懸念があるときに使用します。

基本的なワークフロー

標準的な安全なパッケージ化

このスキルの scripts/ ディレクトリにある safe_pack.py を使用すると、スキャン → レポート → パッケージ化のワークフロー全体を実行できます。

python3 scripts/safe_pack.py <directory>

実行内容:

  1. ディレクトリをスキャンして、ハードコードされた認証情報を検出します
  2. ファイル名と行番号とともに検出結果を報告します
  3. シークレットが見つかった場合、パッケージ化をブロックします
  4. スキャンで問題が見つからなかった場合のみ、repomix でパッケージ化します

例:

python3 scripts/safe_pack.py ./my-project

問題が見つからなかった場合の出力:

🔍 Scanning ./my-project for hardcoded secrets...
✅ No secrets detected!
📦 Packing ./my-project with repomix...
✅ Packaging complete!
   Package is safe to distribute.

シークレットが見つかった場合の出力:

🔍 Scanning ./my-project for hardcoded secrets...
⚠️  Security Scan Found 3 Potential Secrets:

🔴 supabase_url: 1 instance(s)
   - src/client.ts:5
     Match: https://your-project-ref.supabase.co

❌ Cannot pack: Secrets detected!
オプション

出力ファイルを指定する:

python3 scripts/safe_pack.py \
  ./my-project \
  --output package.xml

repomix の設定を使う:

python3 scripts/safe_pack.py \
  ./my-project \
  --config repomix.config.json

スキャンから除外するパターンを指定する:

python3 scripts/safe_pack.py \
  ./my-project \
  --exclude '.*test.*' '.*\.example'

強制的にパッケージ化する(危険、スキャンをスキップ):

python3 scripts/safe_pack.py \
  ./my-project \
  --force  # ⚠️ NOT RECOMMENDED

シークレットのみをスキャンする

このスキルの scripts/ ディレクトリにある scan_secrets.py を使用すると、パッケージ化せずにスキャンだけを実行できます。

python3 scripts/scan_secrets.py <directory>

使用例:

  • 認証情報を削除した後のクリーンアップを確認する
  • コミット前のセキュリティチェック
  • 既存のコードベースを監査する

例:

python3 scripts/scan_secrets.py ./my-project

プログラムから利用するための JSON 出力:

python3 scripts/scan_secrets.py \
  ./my-project \
  --json

除外パターン:

python3 scripts/scan_secrets.py \
  ./my-project \
  --exclude '.*test.*' '.*example.*' '.*SECURITY_AUDIT\.md'

検出されるシークレットの種類

スキャナーは、次のような一般的な認証情報のパターンを検出します。

クラウドプロバイダー:

  • AWS アクセスキー(AKIA...)
  • Cloudflare R2 アカウント ID とアクセスキー
  • Supabase プロジェクト URL と Anon キー

API キー:

  • Stripe キー(sk_live_...、pk_live_...)
  • OpenAI API キー(sk-...)
  • Google Gemini API キー(AIza...)
  • 汎用 API キー

認証情報:

  • JWT トークン(eyJ...)
  • OAuth クライアントシークレット
  • 秘密鍵(-----BEGIN PRIVATE KEY-----)
  • Turnstile キー(0x...)

完全な一覧とパターンについては、references/common_secrets.md を参照してください。

検出されたシークレットへの対処

シークレットが見つかった場合:

ステップ 1:検出結果を確認する

検出された各項目を確認し、実際の認証情報であることを確かめます(プレースホルダーやサンプルではないことを確認してください)。

ステップ 2:環境変数に置き換える

置き換え前:

const SUPABASE_URL = "https://your-project-ref.supabase.co";
const API_KEY = "<hardcoded-anon-key-DO-NOT-COMMIT>";

置き換え後:

const SUPABASE_URL = import.meta.env.VITE_SUPABASE_URL || "https://your-project-ref.supabase.co";
const API_KEY = import.meta.env.VITE_API_KEY || "your-api-key-here";

// Validation
if (!import.meta.env.VITE_SUPABASE_URL) {
  console.error("⚠️ Missing VITE_SUPABASE_URL environment variable");
}
ステップ 3:.env.example を作成する
# Example environment variables
VITE_SUPABASE_URL=https://your-project-ref.supabase.co
VITE_API_KEY=your-api-key-here

# Instructions:
# 1. Copy this file to .env
# 2. Replace placeholders with real values
# 3. Never commit .env to version control
ステップ 4:クリーンアップを確認する

スキャナーを再度実行し、シークレットが削除されたことを確認します。

python3 scripts/scan_secrets.py ./my-project
ステップ 5:安全にパッケージ化する

問題がないことを確認できたら、安全にパッケージ化します。

python3 scripts/safe_pack.py ./my-project

公開後の対応

認証情報がすでに公開されている場合(例:git にコミットした、公開の場で共有したなど):

  1. ただちに認証情報をローテーションする - 新しいキーやトークンを生成します
  2. 古い認証情報を失効させる - 漏えいした認証情報を無効にします
  3. 利用状況を監査する - 不正アクセスがないか、ログを確認します
  4. 監視する - 不審なアクティビティに対するアラートを設定します
  5. デプロイを更新する - 新しい認証情報を使用したコードをデプロイします
  6. インシデントを記録する - 公開された情報と実施した対応を記録します

よくある誤検出

スキャナーは、よくある誤検出をスキップします。

プレースホルダー:

  • your-api-key、example-key、placeholder-value
  • <YOUR_API_KEY>、${API_KEY}、TODO: add key

テスト/サンプルファイル:

  • .*test.*、.*example.*、.*sample.* に一致するファイル

コメント:

  • //、#、/*、* で始まる行

環境変数の参照(正しい使い方):

  • process.env.API_KEY
  • import.meta.env.VITE_API_KEY
  • Deno.env.get('API_KEY')

必要に応じて --exclude を使い、追加のパターンをスキップしてください。

Repomix との連携

このスキルは、標準的な repomix と連携します。

デフォルトの使い方(設定なし):

python3 scripts/safe_pack.py ./project

repomix の設定を使う場合:

python3 scripts/safe_pack.py \
  ./project \
  --config repomix.config.json

出力先を指定する場合:

python3 scripts/safe_pack.py \
  ./project \
  --output ~/Downloads/package-clean.xml

セキュリティ検証後、このスキルは内部で repomix を実行し、設定と出力のオプションを引き継ぎます。

ワークフローの例

ワークフロー 1:クリーンなプロジェクトをパッケージ化する
# Scan and pack in one command
python3 scripts/safe_pack.py \
  ~/workspace/my-project \
  --output ~/Downloads/my-project-package.xml
ワークフロー 2:シークレットを削除してプロジェクトをパッケージ化する
# Step 1: Scan to discover secrets
python3 scripts/scan_secrets.py ~/workspace/my-project

# Step 2: Review findings and replace credentials with env vars
# (Edit files manually or with automation)

# Step 3: Verify cleanup
python3 scripts/scan_secrets.py ~/workspace/my-project

# Step 4: Package safely
python3 scripts/safe_pack.py \
  ~/workspace/my-project \
  --output ~/Downloads/my-project-clean.xml
ワークフロー 3:コミット前の監査
# Pre-commit hook: scan for secrets
python3 scripts/scan_secrets.py . --json

# Exit code 1 if secrets found (blocks commit)
# Exit code 0 if clean (allows commit)

リソース

参考資料:

  • references/common_secrets.md - 認証情報パターンの完全なカタログ

スクリプト:

  • scripts/scan_secrets.py - 単独で実行できるセキュリティスキャナー
  • scripts/safe_pack.py - スキャンからパッケージ化までを行う完全なワークフロー

関連スキル:

  • repomix-unmixer - repomix パッケージからファイルを抽出します
  • skill-creator - Claude Code スキルを新規作成します

セキュリティに関する注意

このスキルは一般的なパターンを検出しますが、あらゆる種類の認証情報を検出できるとは限りません。必ず以下を行ってください:

  • 検出結果を手動で確認する
  • 露出した認証情報をローテーションする
  • .env.example テンプレートを使用する
  • 環境変数を検証する
  • 不正アクセスを監視する

以下の代替にはなりません:CI/CD でのシークレットスキャン、Git 履歴のスキャン、包括的なセキュリティ監査。

コメント