--- name: secret-files user-invocable: false description: > プロジェクトのGit作業ツリー外にある、`.env`、鍵、証明書などの秘匿値を含むファイルを 読む直前に起動する。Git作業ツリー外のログ、設定ファイル、スクリプト、履歴などの通常のファイルから 秘匿値と見られる値の有無、件数、所在、同一性を探す検索の直前にも起動する。 --- # 秘匿値ファイルの取り扱い 本スキルはプロジェクトのGit作業ツリー外にある秘匿値ファイルの読取と、作業ツリー外の通常のファイルを対象とする秘匿値の検索の制約を提供する。 作業ツリー内のファイルは、Git追跡やgitignore、ファイル名、拡張子によらず通常のファイルとして扱う。 `.env`、鍵、証明書なども通常の読取・編集・複製・全文比較・出力の対象とし、本スキルの制約を適用しない。 作業ツリー内から外部の認証情報を参照する場合は、認証情報の実体の位置で内外を判定する。 秘匿値を含むファイル(`.env`、`.env.<接尾辞>`、鍵、証明書などの、値の秘匿を前提とするファイル)は、 必要なキーの値だけを取り出す操作に限って読む。全文の読み取りと出力を禁止する。 全文がログ、トランスクリプト、生成物などへ複写されると秘匿値が露出する。 作業ツリー外の通常のファイル(ログ、設定ファイル、スクリプト、Gitの履歴など、値の秘匿を前提としないファイル)から、秘匿値と見られる値の有無、件数、所在または同一性を調べる検索では、一致した値そのものを出力する形を使わない。 避ける対象は、一致した値がツール結果へ届く出力である。`grep -o`の結果、`git grep`と`rg`がオプションなしで出力する一致行の表示、`git log -p`や`git show`の差分表示をそのままツール結果へ出力せず、ファイル名(`-l`)、件数(`-c`)、値ごとのハッシュで判定する。 値ごとのハッシュは、`-o`で取り出した一致をパイプで1件ずつ`sha256sum`などへ渡し、ツール結果へはハッシュだけを出力する組み立てで得る。例は`rg -o -N --no-filename '<パターン>' <パス> | while IFS= read -r v; do printf '%s' "$v" | sha256sum; done`である。各行をハッシュへ置き換えるため、行番号などの接頭辞が付いても値はツール結果へ届かない。値の同一性や重複もハッシュ同士で比べる。 値を出力する形の検索の後段に`grep -v`や`sed`などの除外を置いて値を取り除く組み立ては使わない。除外の成否は前段の出力形式(行番号やファイル名の接頭辞など)とホストの設定に依存し、除外が外れた時点で値はトランスクリプトへ複写されて取り消せない。