repomix-safe-mixer について
コードベースを repomix でパッケージ化する前に、ハードコードされた認証情報を検出するセキュリティ向けスキルです。潜在的な秘密が見つかると場所を報告して処理を止め、単独スキャンにも対応します。
主な機能
- 01一般的な認証情報パターンのスキャン
- 02検出箇所のファイルと行番号の報告
- 03秘密検出時のパッケージ化停止
- 04JSON 出力付きの単独スキャン
- 05repomix の設定と出力オプションの適用
活用シーン
- 01repomix パッケージ共有前のプロジェクト確認
- 02コミット前のコードベース監査
- 03認証情報の削除確認
- 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.mdscripts/safe_pack.pyscan_secrets.py詳細
Repomix Safe Mixer
概要
ハードコードされた認証情報を自動的に検出して削除し、repomix でコードベースを安全にパッケージ化します。
このスキルは、repomix でコードをパッケージ化する際に、認証情報が誤って公開されるのを防ぎます。ハードコードされたシークレット(API キー、データベース認証情報、トークン)をスキャンして検出結果を報告し、安全なパッケージ化を実現します。
使用するタイミング:コードを配布するために repomix でパッケージ化するとき、共有可能な参照用パッケージを作成するとき、またはコード内にハードコードされた認証情報がないか懸念があるときに使用します。
基本的なワークフロー
標準的な安全なパッケージ化
このスキルの scripts/ ディレクトリにある safe_pack.py を使用すると、スキャン → レポート → パッケージ化のワークフロー全体を実行できます。
python3 scripts/safe_pack.py <directory>
実行内容:
- ディレクトリをスキャンして、ハードコードされた認証情報を検出します
- ファイル名と行番号とともに検出結果を報告します
- シークレットが見つかった場合、パッケージ化をブロックします
- スキャンで問題が見つからなかった場合のみ、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 にコミットした、公開の場で共有したなど):
- ただちに認証情報をローテーションする - 新しいキーやトークンを生成します
- 古い認証情報を失効させる - 漏えいした認証情報を無効にします
- 利用状況を監査する - 不正アクセスがないか、ログを確認します
- 監視する - 不審なアクティビティに対するアラートを設定します
- デプロイを更新する - 新しい認証情報を使用したコードをデプロイします
- インシデントを記録する - 公開された情報と実施した対応を記録します
よくある誤検出
スキャナーは、よくある誤検出をスキップします。
プレースホルダー:
your-api-key、example-key、placeholder-value<YOUR_API_KEY>、${API_KEY}、TODO: add key
テスト/サンプルファイル:
.*test.*、.*example.*、.*sample.*に一致するファイル
コメント:
//、#、/*、*で始まる行
環境変数の参照(正しい使い方):
process.env.API_KEYimport.meta.env.VITE_API_KEYDeno.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 履歴のスキャン、包括的なセキュリティ監査。