AI Navigate

Claude Code セッションでの API キーと秘密情報の取り扱い方法

Dev.to / 2026/3/18

💬 オピニオンTools & Practical Usage

要点

  • Claude Code はサービスに接続するための文脈情報を必要としますが、認証情報をエージェントが読むプロンプトやファイルに置くべきではありません。
  • 認証情報を埋め込むのではなく、値の代わりに環境変数参照を使用し、'API_KEY 環境変数を使用する' のようなプレースホルダーにより、エージェントがハードコーディングせず環境変数から読むようにします(例: process.env.API_KEY)。
  • 秘密情報なしの CLAUDE.md がこのルールを強制します。ハードコーディングされた秘密情報を含む旧コードについては、値を [REDACTED] のプレースホルダに置換し、別のタスクで秘密情報を環境変数へ移動する予定です。
  • レビューステップは、sk_、pk_、api_key、長い16進数、あるいは怪しい base64 のような認証情報のような文字列をスキャンし、プロンプトやテストに実際の認証情報を貼り付けることを明示的に避けます。

Claude CodeのセッションにおけるAPIキーとシークレットの取り扱い

要約: プロンプトに機密情報を含めません。長い版は、実際にそれを機能させる方法です。

問題

Claude Codeは機能するにはコンテキストが必要です。そのコンテキストには、サービスへの接続方法に関する情報—データベース接続、APIエンドポイント、認証パターン—が含まれることが多いです。しかし実際の認証情報をプロンプトやエージェントが読むファイルに入れるべきではありません。

代わりに行うこと

環境変数の参照、値ではありません。 「postgres://user:password@host/db」でPostgreSQLに接続する代わりに、「DATABASE_URL環境変数を使ってデータベースに接続する。」と書きます。エージェントは変数を使用することを知っており、接続文字列を作成しようとはしません。

プレースホルダーパターン。 エージェントにAPI呼び出しを行うコードを書かせる必要がある場合、タスクのプロンプトに「API_KEY環境変数を使用する」と書きます。エージェントはprocess.env.API_KEYまたは同等のものを書き、何かをハードコードしようとはしません。

秘密なしCLAUDE.md。 私のCLAUDE.mdには「認証情報をハードコードしない。常に秘密には環境変数を使用する。」という文言があります。これは毎セッションを読み込むコアファイルに含まれています。エージェントはそれに従います。

ハードコードされた秘密情報を含む既存コード

すでにハードコードされた秘密情報を含むコードを扱う場合(レガシーコードで起こり得ます)、文脈を共有する際にはプレースホルダーを使います。「APIキーは現在[REDACTED]としてハードコードされています — 別のタスクで環境変数へ移します。」

エージェントは実際の値を知る必要はなく、使用箇所をリファクタリングするのを手伝います。

レビュー手順

API呼び出しや認証に関わる出力をレビューする前に、秘密情報のように見えるハードコードされた文字列を確認します。具体的には、sk_pk_api_key、長い16進文字列、またはエンコード済み内容のように見えないbase64などに一致するものです。

ほとんどの場合、エージェントは環境変数のパターンに正しく従います。しかし「ほとんどの場合」というのは常にではなく、リポジトリにハードコードされたキーは重大なミスになります。

私が絶対にしないこと

「ちょっと試してみるだけ」という目的で、実際の認証情報をプロンプトに貼り付けることはありません。その一歩先の「どこかのコミット」に含まれる可能性は予想以上に短いのです。

builtbyzac.comでClaude Codeを実行したときのものです。