実践的なプロンプトテンプレート、ファイル共有ワークフロー、赤acted手順を使って、必要な情報だけを共有しつつ安全にコーディング支援を受ける方法を解説します。

「コンテキスト」とはモデルに与えるすべての情報です:コード断片、スタックトレース、設定ファイル、環境変数、データベースのサンプル、スクリーンショット、さらには同じチャット内の以前のメッセージなど。多くのコンテキストはデバッグを早めますが、意図せず共有してしまうリスクも高まります。
過剰共有はプレッシャー下で起きがちです。リリースが止まっている、デモ直前に認証が壊れた、CIでだけ失敗する不安定なテスト――そんなときはついファイル全体、ログ全体、設定全体を「念のため」に貼り付けてしまいます。チームの習慣も同様に働きます:コードレビューやデバッグでは全部見せるのが普通ですが、実際は小さな一部だけで十分なことが多いです。
リスクは架空の話ではありません。一度の貼り付けでシークレットや顧客データ、内部システムの詳細が流出することがあります。よくある例は以下の通りです:
目的は秘匿ではなく、問題を再現/説明するために必要最小限を共有して同等のヘルプを得ることです。
シンプルな心構え:アシスタントを外部の協力者と考え、リポジトリ全体は必要ないと扱いましょう。まずは一つの精密な質問から始めます(「なぜこのリクエストが 401 を返すのか?」)。次にその質問を支える最小限の情報だけを共有します:失敗する入力、期待する出力、実際の出力、関係する狭いコードパスなど。
ログイン呼び出しが失敗するなら、認証モジュール全体は不要なことが多いです。サニタイズしたリクエスト/レスポンス対、ヘッダを組み立てる関数、関係する設定キー(値は置き換え)を共有すれば十分な場合が多いです。
「コンテキスト」はソースコードだけではありません。ログイン可能にする情報、個人を特定できる情報、システムを地図化できる情報はすべて含まれます。まずはどこが有害かを把握しましょう。
認証情報はスニペットをインシデントに変えます。APIキーやトークン、秘密鍵、セッションクッキー、署名付きURL、OAuth クライアントシークレット、データベースのパスワード、ログに出力された「一時」トークンなどが該当します。
意外な漏洩は間接的に起きます。エラーメッセージに Authorization ヘッダ全体が含まれていたり、環境変数のデバッグダンプにトークンが入っていたりします。
個人に結びつくデータは、単体では無害に見えても機密です。メール、名前、電話番号、住所、顧客ID、従業員ID、サポートチケットの会話、支払い情報などに注意してください。
バグの再現にデータが必要なら、実データではなく現実的な偽データに置き換えてください。重要なのは形(フィールドと型)であり、実在の人物ではありません。
「つまらない」内部の事実も攻撃者や競合にとっては有用です:ホスト名、IP、リポジトリ名、チケットID、ベンダー名、契約条件、内部サービスの URL。
単一のスタックトレースでもフォルダパスに含まれるユーザ名やクライアント名、サービス命名規則、クラウドアカウントの手掛かり(バケット名、リージョン文字列)をさらすことがあります。
すべてのコードが同じように機密というわけではありません。もっともリスクが高いのはビジネスの仕組みを表す箇所です:価格や割引のルール、不正検知、レコメンデーションのロジック、LLM のプロンプトテンプレート、戦略文書など。
バグの助けが欲しいときは、モジュール全体ではなく問題を再現する最小の関数だけを共有しましょう。
コメントに書かれた名前、コミットメッセージ、TODO に顧客名がある、スタックトレースをそのまま貼る――これらにも機密が潜みます。設定ファイルは特に危険で、無害な設定とシークレットが混ざっていることが多いです。
実用的なルール:そのテキストがクリーンな例よりもあなたのシステムを速く理解させてしまうなら、それは機密として扱い、赤actedまたは置き換えてください。
露出を減らす最良のタイミングはエディタを開く前です。30秒ほどで結果を一言に定義するだけで、共有量は大幅に減ります。
まず「得たい結果」を一文で書いてください。バグの原因を特定したいのか、安全なリファクタ案が欲しいのか、テスト設計が欲しいのか?目的により必要な入力は変わります。バグ調査なら通常は1つのスタックトレースと小さな関数で足ります。リファクタの相談なら公開インターフェースと短い利用例で十分です。
次に問題を証明する「最小のアーティファクト」を1つ選びます。失敗する単体テスト、エラーを引き起こす最小のスニペット、失敗前後の短いログ抜粋、またはプレースホルダ入りの簡素な設定サンプルなどです。
データを説明する場合は値ではなく形を示してください。「User オブジェクトは id (UUID)、email (string)、role (enum)、createdAt (timestamp) を持つ」という形はたいてい十分です。例が必要ならフォーマットに合致した偽データを使い、実際のレコードは使わないでください。
ファイルに関しては厳格に。変更しているモジュールとそれが触るインターフェースだけを共有してください。ある関数が別モジュールを呼ぶなら、そのシグネチャと返るものの短い説明だけで十分なことが多いです。バグが別サービスへのリクエストに関わるなら、リクエストの形、ヘッダ名(値は不要)、期待するレスポンスの形だけで足ります。
機密情報はマシンから決して出さない境界を設定してください:APIキー、プライベート証明書、アクセストークン、顧客データ、内部URL、リポジトリ全体、生の本番ログなどです。401 をデバッグするなら、認証フローとエラーメッセージを共有し、トークンは TOKEN_REDACTED、メールは [email protected] に置き換えましょう。
良い赤actedは単に隠すだけでなく、問題の構造を保ち、アシスタントが推論できるようにします。隠しすぎると一般論しか返ってこず、隠し少なすぎると漏洩します。
プレースホルダのスタイルを決め、それをコード・設定・ログ全体で統一します。複数個所で同じトークンが出るなら、別々の置換にしないでください。例:API_KEY_1、TOKEN_1、USER_ID_1、CUSTOMER_ID_1、EMAIL_1。必要に応じて増分番号を付けます(TOKEN_2、TOKEN_3)。
短い凡例を添えると分かりやすくなります:
TOKEN_1: Authorization ヘッダで使われる bearer トークンCUSTOMER_ID_1: データベース検索で使う内部顧客識別子API_KEY_1: 決済プロバイダ呼び出しで使うキーパースや検証、署名チェックがバグに関係する場合は、固有の文字列を似たダミー値で置き換え、長さや構造を保ちます。
例:
8-4-4-4-12 のパターンを維持これにより「トークンが検証に失敗している」旨は伝えつつ実値を晒さずに済みます。
JSON を共有するときはキーは残して値を置き換えます。キーはシステム側の期待を示すため重要で、値が機密であることが多いです。
代わりに以下のようにします:
{"email":"EMAIL_1","password":"PASSWORD_1","mfa_code":"MFA_CODE_1","customer_id":"CUSTOMER_ID_1"}
SQL でも同様です:テーブル名、JOIN、条件は保ち、リテラル値は削ります。例:
WHERE user_id = USER_ID_1 AND created_at > DATE_1関数がビジネスルールやプロプライエタリなロジックを含むなら、それを貼る代わりに要約してください。バグに影響する入力、出力、副作用、エラーハンドリングだけを残します。
例の要約:
“signRequest(payload) は JSON ペイロードを受け取り、timestamp と nonce を付け、method + path + body から HMAC SHA-256 を作成して署名する。戻り値は {headers, body}。今回のエラーはペイロードに非ASCII文字が含まれる場合に発生する。”
この程度の情報でエンコーディングや正規化、署名ミスマッチの診断は可能です。
プロンプトの末尾に何を削ったか、何を残したかを書いておくと無駄なやり取りを減らせます。
例:
“Redacted: tokens, emails, customer data, full request bodies. Kept: endpoint paths, status codes, header names, stack trace frames, and the exact error text.”
アシスタントをチームの一員とみなし、作業中の部分だけを共有します。インターフェースや契約(関数シグネチャ、型、リクエスト/レスポンスの形、正確なエラーテキスト)を共有する方が、ファイル全体を貼るより安全で有用です。
平易な言葉での最小再現は多くの場合十分です:使った入力、期待したもの、実際に起きたこと、環境の簡単な注記(ランタイムバージョン、OS、フレームワークバージョン)だけで済みます。プロジェクトの全履歴は不要です。
よく使えるテンプレート例:
サニタイズ済の設定ブロックは良い折衷案です:何の設定があるかを示しつつシークレットは含めません。
# sanitized
DB_HOST: "<set>"
DB_PORT: "5432"
DB_USER: "<set>"
DB_PASSWORD: "<redacted>"
JWT_SECRET: "<redacted>"
OAUTH_CLIENT_ID: "<set>"
OAUTH_CLIENT_SECRET: "<redacted>"
安全なプロンプト例:
“ログインが 401 で失敗します。期待は 200、実際は invalid token。環境:Node 20、ローカル開発、時刻同期有効。リクエスト契約:Authorization: Bearer <redacted>。発行は /auth/login で使用は /me。考えられる上位原因(クロックスキュー、audience ミスマッチ、署名シークレット不一致)と、それぞれを確認するための 1 つのチェックを示して下さい。”
共有を意図的なパッケージにする習慣を作ると便利です。問題を診断するのに十分で、それ以外は含まないフォルダを一時的に作成します。
実用的な手順:
フォルダを作ったら外部の目で読み直してください。デバッグに役立たないファイルがあれば置かないでください。
赤actedする際はコードやログが壊れないようにしてください。型と構造を保つ明示的なプレースホルダに置き換えます。例:
DATABASE_URL=postgres://user:[email protected]:5432/app
は
DATABASE_URL=postgres://user:REDACTED@localhost:5432/app
に置き換えます。
バグがサードパーティのレスポンスに依存するなら、README にレスポンスの形を書き、小さな合成 JSON ファイルを含めてください。実トラフィックを共有せずとも意味のあるデバッグが可能です。
即興でやらずに繰り返し可能なループを作ると安全です。
まず2文書く。
最小入力を集める。
構造を壊さずに赤actedする。
API_KEY=sk_live_...
becomes
API_KEY=<API_KEY>
customer-1234-prod-db
becomes
<DB_HOST_PROD>
対象を絞った質問をする。
ローカルで検証し、必要なら1つだけ新しい詳細を追加する。
この増分的な情報開示は、実用的な答えを得ながらシークレットや無関係なコードをプロンプトに含めないのに有効です。
よくある状況:ローカルとステージングではログインが成功するが本番だけ失敗する。すぐ助けが欲しいが実トークンやユーザメール、内部ホスト名、本番のミドルウェア全体は貼れません。
観察できる範囲から始めます:リクエスト/レスポンスの形、ステータスコード、短いスタックトレース。JWT 関係なら非機密のヘッダ情報(期待するアルゴリズム)や時刻差の情報を共有できます。他はプレースホルダにします。
安全なバンドルの例:
そのうえで焦点を絞った質問をします。本番のみの認証失敗はクロックスキュー、issuer/audience の不一致、署名鍵の違い、キー回転不足、プロキシのヘッダ差などがよくある原因です。
プロンプト例:
本番でのみ発生するログイン/認証失敗があります。ローカルでは通ります。
観察された挙動:
- エンドポイント: POST /api/login
- 本番のレスポンス: 401, message "invalid token"
- ステージング/ローカル: 200
サニタイズ済リクエスト/レスポンス:
- Authorization: Bearer <JWT_REDACTED>
- 期待クレーム: iss=<ISSUER_PLACEHOLDER>, aud=<AUDIENCE_PLACEHOLDER>
- トークン検証ライブラリ: <LIB_NAME_AND_VERSION>
サニタイズ済ログ抜粋:
<PASTE 5-10 LINES WITH TOKENS/EMAILS/HOSTS REDACTED>
質問:
これを踏まえて、本番だけで JWT 検証が失敗する上位原因は何か(特にクロックスキューやクレーム不一致)。それぞれを確認するために追加すべき具体的なログやチェックは何か?
仮説を得たら安全に検証します。非機密の事実のみを出力する一時的なログ(exp, iat, now, failure reason code など)を追加したり、ローカルで合成トークンを使ったテストを作り、検証後にそのログを削除します。
簡単なプラン例:
プライバシー効果を失う最短ルートは「小さなもの」を貼ったつもりが実は全部含んでいるケースです。典型例はフルの .env や設定ファイル。見えにくいシークレットだけでなく内部ホスト名や機能フラグ、環境情報まで含まれていることがあります。
フルスタックトレースも漏洩リスクが高いです。ユーザ名、マシン名、リポジトリ名、絶対パス(例:/Users/alex/company-payments/...)が含まれることがあります。トレースが必要なら関連フレームだけをコピーし、パスは一貫したプレースホルダに置換してください。
実データのペイロードは小さくても危険です。メールや住所、注文ID、メモが含まれていることがあります。代わりに同じ形状と境界条件(欠損フィールド、長大文字列、特殊文字)を持つ偽ペイロードを生成してください。
プレースホルダの一貫性も重要です。ある箇所で USER_ID が「顧客ID」を意味し、別箇所で「内部アカウントID」を意味すると誤診断を招きます。ルールを決めて守ってください。
メッセージが誰かのログインやサーバ特定、顧客特定に役立つなら、もう一度見直して赤actedか要約してください。
注意深くするために短いルーティンを持つと安全です。2回のパスで確認しましょう:まずシークレット、その次にシステムを露呈する識別子。
赤acted後は形を保ってください。型、スキーマ、フィールド名、ステータスコード、例のペイロード構造は残し、実値はプレースホルダに置換します。
プレッシャー下でも一貫させるため、短い赤actedルールセットを作って再利用しましょう。チーム向けには「共有するもの」(ファイル、関数、エンドポイント)と「共有しないもの」(シークレット、本番データ、内部ドメイン)を2ブロックにしたテンプレートにすると良いです。
さらに安全を期すなら隔離環境で実験し、変更は可逆にしておくと良いです。Koder.ai (koder.ai) のプランニングモードは、最小の検証変更をアウトライン化するのに役立ちます。スナップショットとロールバックがあれば、本番の機密をプロンプトに引き込まずに修正を試せます。
まずは質問に答えるのに最小限必要なスライスを共有してください:失敗した入力、期待される出力と実際の出力、問題に関わる狭いコードパス。
デフォルトで有用なバンドル例:
以下は絶対に貼り付けてはいけません:
.env や設定ダンプ、未加工の本番ログ要するに、第三者がログインしたり人物を特定したり、あなたのシステムをマッピングできる情報は赤actedまたは要約してください。
フローが読みやすくなるよう、一貫したプレースホルダを使ってください。
例のスキーム:
TOKEN_1, TOKEN_2API_KEY_1USER_ID_1, CUSTOMER_ID_1バグがパースや検証に依存する場合は形式を維持してください。
よくあるケース:
8-4-4-4-12 のパターンを保つこうすると実際の値を公開せずに検証の振る舞いを再現できます。
JSON や SQL は構造を残して値を置き換えます。
JSON の場合:
SQL の場合:
例:
機密ロジックを含むコードは、実装をそのまま貼る代わりに入出力と影響するルールだけを要約してください。
実用的な要約には:
こうすれば実装非公開のまま同等の診断が得られることが多いです。
シンプルで安全なプロンプトの例:
付け加えとして赤actedノートを含めると良いです:
“Redacted: tokens, emails, customer data, internal hostnames. Kept: endpoint paths, status codes, header names, exact error text.”
.env や設定のダンプは危険です。なぜなら一度に多くの情報が混ざっているからです:
安全な代替は設定テンプレートです:
増分開示を使ってください:
こうすればスコープを小さく保てて、誤って機密を公開するリスクを下げられます。
実用的なバンドル例:
そのうえで質問例:
EMAIL_1必要なら短い凡例を付けます:
TOKEN_1: /me で使われる Authorization bearer トークンCUSTOMER_ID_1: データベース検索で使う内部の顧客識別子WHERE user_id = USER_ID_1 AND created_at > DATE_1<set> や <redacted> に置き換える