mcpField
S
ship-gate

ship-gate

github.com/unlearndevテスト・品質10559 回インストール3 週間前に更新
リポジトリ

ship-gate について

ship-gateは、コミット前にステージ済みの差分を調べる安全確認スキルです。認証情報、デバッグコード、コメントアウトされたコード、大型またはバイナリの追加ファイルを検出し、BLOCKまたはPASSで判定します。

主な機能

  1. 01ステージ済み差分のみを確認
  2. 02シークレットとAPI認証情報を検査
  3. 03デバッグコードとコメントアウト部分を検出
  4. 04大型またはバイナリの追加ファイルを特定
  5. 05場所を報告して最終判定を提示

活用シーン

  1. 01コミット前にステージ内容を確認
  2. 02誤って追加した認証情報や環境ファイルを検出
  3. 03残存するデバッグ記述や大型ファイルを発見

インストール

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

$npx skills add https://github.com/unlearndev/skills --skill ship-gate

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

詳細

コミット前にステージ済みの差分を確認する

現在コミット用にステージされている内容をすべて確認し、コミットすべきでないものがあれば指摘してください。これは安全性に絞ったチェックであり、コードレビューではありません。スタイル、命名、アーキテクチャ、正確性についてはコメントしないでください。以下の4種類の問題だけを見つけ、それぞれファイル名と行番号、問題となる理由を報告し、最後に判定を1つだけ示してください。

1. ステージ済みの差分を取得する

実際にステージされている内容(--cached)だけを確認してください。ステージされていない変更は対象外です。

git diff --cached --stat          # overview of staged files
git diff --cached                 # full staged diff (read this)
git diff --cached --numstat       # added/removed line counts; "-" marks binary files
git diff --cached --name-only --diff-filter=A   # newly ADDED files (for size/binary checks)

ステージ済みの差分をすべて読んでください。デバッグコード、シークレット、コメントアウトされたブロックについては、追加された行(+ で始まる行)だけを対象にしてください。コンテキストとして表示されている既存の行は、このコミットで追加されたものではないため、指摘しないでください。追加ファイル/バイナリファイルの確認では、追加されたものとして報告された作業ツリー上のファイルを調べてください。

何もステージされていない場合は、その旨を明確に伝えて終了してください。確認するものはありません。

2. 指摘対象

以下の各観点で、ステージ済みの差分を確認してください。ほとんどのコミットでは該当する項目は少数です。それで問題ありません。項目を埋めるために問題を捏造しないでください。各指摘は、実際に追加された行またはファイルを示す必要があります。

シークレットと API キー

実際の認証情報に見える追加行を対象にしてください。認証情報への参照は対象外です。以下を確認してください。

  • 値がリテラルなシークレットである代入:API キー、トークン、パスワード、秘密鍵、認証情報を含む接続文字列。
  • 判別可能なキーの形式:AKIA…(AWS アクセスキー)、sk-… / sk-ant-…(OpenAI/Anthropic)、ghp_… / gho_…(GitHub トークン)、xox[baprs]-…(Slack)、Google の AIza…、Stripe の sk_live_… / rk_live_…、JWT(eyJ…)、-----BEGIN … PRIVATE KEY----- ブロック。
  • *_KEY、*_SECRET、*_TOKEN、*_PASSWORD、PASSWD、*_DSN、AUTH、CREDENTIAL のような名前に代入された、エントロピーの高い長い文字列。

誤検知を避けるため、安全な値とシークレットを区別してください。

  • 安全なため指摘しないもの: プレースホルダー(your-api-key-here、xxxxx、changeme、example、<token>)、値が空またはダミーの .env.example の項目、設定から読み込む値(env('STRIPE_SECRET')、process.env.X、config(...))、明らかなテスト用フィクスチャ。
  • 指摘するもの: ソースコードにコミットされた、具体的な値に見えるシークレット。また、コミット用にステージされた実際の .env ファイルに含まれるシークレット(実際の値を含む .env は通常コミットすべきではないため、その点を明示してください)。

文字列が実際に有効なシークレットか判断できない場合は、理由を説明して疑いありとして指摘してください。黙って見過ごすより、人が確認できるようにすることを優先してください。

残存するデバッグコード

そのファイルの言語を踏まえ、追加された行に明らかにデバッグ用のコードが残っていないか確認してください。

  • PHP: dd(、dump(、ddd(、var_dump(、(返却または使用されていない)print_r(、ray(、error_log(、その場しのぎで追加された \Log::debug(、Debugbar::。
  • JS / TS / Vue: デバッグ目的で追加された console.log( / console.debug( / console.warn(、debugger;、alert(。
  • 全般: TODO: remove、FIXME、XXX、一時的な sleep(、if (true) / return; // skip のようなハードコードされたテスト用切り替え。

状況に応じて判断してください。正当なエラーハンドラー内の console.error や、アプリケーション本来のログ処理の一部であるログ呼び出しは、デバッグの残骸ではありません。残されたと思われるトレースだけを指摘してください。

大きなコメントアウト済みブロック

説明文ではなく、追加された連続するコメントアウト済みのコードを対象にしてください。コメントアウトされたコードが連続しておよそ5行以上ある場合は、削除すべき不要なコードとして指摘してください。短いコメント、ドキュメントコメント、1行のメモは問題ありません。指摘しないでください。ファイルのコメント構文(//、#、/* … */、``)を使って、それがコード(文、関数本体、マークアップ)に見える内容であることを確認してください。

誤って追加された大容量ファイルまたはバイナリファイル

新たに追加されたファイル(--diff-filter=A)から確認します。

  • バイナリファイル — git diff --cached --numstat では、バイナリファイルの追加列と削除列の両方に - が表示されます。意図せず追加されたと思われるバイナリを指摘してください。例:コンパイル済みの出力、アーカイブ、ソースにダンプされた画像、.zip、.tar、.gz、.pdf、.sqlite、.db、フォント、メディアファイル。適切に判断してください。assets ディレクトリにある意図的なアセットは問題ありません。
  • 大容量ファイル — 追加されたファイルのディスク上のサイズを確認します(例:wc -c、またはステージされた blob の場合は git cat-file -s :<path>)。およそ 1 MB 超のものを指摘してください。また、サイズにかかわらず、そもそも git に含めるべきでない種類のもの(vendor/、node_modules/、*.log、ビルド成果物、実際の値が含まれる .env、.DS_Store などの OS の不要ファイル)は必ず指摘してください。

3. 検出結果の報告

Markdown で出力してください。最初に、上記 4 つのカテゴリ別に検出結果をまとめてください。該当する検出結果があるカテゴリのみを含めます。検出結果ごとに、次の内容を記載してください。

  • ファイルと行番号 — path/to/file.php:42。新しいファイル内の追加行の行番号を使用してください。コメントアウトされたブロックの場合は、開始〜終了の範囲を記載してください。ファイル全体に関する問題(バイナリ/大容量/.env)の場合は、パスだけで構いません。
  • 内容 — 問題のある箇所(秘密情報は一部を省略または伏せてください。例:STRIPE_SECRET=sk_live_51H…。有効なキーを全文表示してはいけません)。
  • 理由 — コミットすべきでない理由を短い句で 1 つ記載してください。

各検出結果は 1〜2 行に収めてください。前置きやコード品質に関する補足は不要です。

4. 判定

最後に、太字の判定語を 1 つだけ記載してください。**BLOCK** または **PASS** のいずれかで、その後には何も記載しないでください。まとめや説明を続けてはいけません。理由は上記の検出結果に記載されています。

  • BLOCK — 秘密情報/API キーが 1 つでもある場合、またはコミットすると問題になるほど重大な検出結果(実際の .env、コミットされた認証情報、紛れ込んだバイナリ/大容量ファイル、明らかなデバッグ用の不要物)がある場合。秘密情報の疑いがある場合は、BLOCK と判定する方に傾けてください。
  • PASS — 検出結果がない場合、または明らかに問題のない検出結果のみの場合。

形式:

**BLOCK**

または

**PASS**

実際の秘密情報が見つかった場合に、判定を甘くしてはいけません。漏えいしたキーを履歴から取り除くのは大変です。

コメント