このレッスンでやること
前回でGitHubリポジトリは作成できました。今回はAPIキーのローテーション(再発行)と、Claude CodeのコンテキストにAPIキーを残さないMCPサーバーの設定方法について説明します。Claude Codeに読み込ませたAPIキーはサーバー側にログとして残る可能性があるため、気になる方はこの手順で対処してください。
Turso APIトークンのローテーション
Tursoのダッシュボードを開き、アイコンから Platform API Tokens に進みます。現在使っているトークンを選んで Delete API Token で削除します。これで、.mcp.json やClaude Codeのログに残っていたトークンは機能しなくなり、セキュリティ的に安全な状態になります。
キーを削除したらMCPも使えなくなる
ただしトークンを削除すると、MCP経由でデータベースを操作したりマイグレーションを走らせたりすることができなくなります。やはりMCPは使いたいし、新しいAPIキーも使いたい。このジレンマを解決するのが「Claude Codeに環境変数を読み込ませない」という設定です。
.env.localを読み込ませないパーミッション設定
Claude Codeの設定で .env.local を読み込ませないようにします。使えるコマンドは以下です。
/permissionsここで Deny コマンドの設定ができます。もしくは .claude/settings.local.json に直接記載する方法もあります。
{
"permissions": {
"deny": ["Read(.env*)"]
}
}この設定をしておけば、Claude Codeは .env.local を一切読み込まなくなるため、サーバーのログにも記録されません。本来は最初からこれを設定しておくのがベストです。セキュリティ講座でももう一度取り上げます。
.mcp.json のAPIキーもハードコードしない
「.mcp.json にもAPIキーが書かれているが、これも読み込ませない方がよいのでは?」という疑問が出てくるかもしれません。しかし、.mcp.json を読み込まないとMCP接続できないため、このファイルにハードコードしたキーは読み込まれてしまいます。
解決策:環境変数参照を使う
.mcp.json にAPIキーを直接記載するのではなく、環境変数名の参照を使います。ドキュメントに記載されている書き方は以下のようにダブルクオーテーションの中に$を含める形式です。
{
"mcpServers": {
"turso": {
"env": {
"TURSO_AUTH_TOKEN": "\$TURSO_AUTH_TOKEN"
}
}
}
}こうすると .env.local に設定したAPIキーがMCPに渡される一方で、Claude Codeのサーバーには保存されないとされています(公式ドキュメントによる記述)。
チーム開発との相性
この書き方はチーム開発にも都合がよいです。APIキーをハードコードしていたらGitHubに上げられませんが、環境変数名のみなら .mcp.json をリポジトリにコミットしても問題ありません。チームメンバーはクローン後、自分の .env.local を設定するだけでMCP接続が使えるようになります。
公式情報の確認方法
このようなセキュリティ関連の詳細はハルシネーションを受けると恐いので、公式AI質問を使うのが一番確実です。Claude Codeを動かしていてわからないことがあれば、公式ドキュメントのAI質問機能で聞くと最も信頼性が高い回答を得られます。
読み込み以外でもログには残らない
公式AIに質問したところ、環境変数の取り扱いはランタイムが処理するためLLMはその値を見ていないとのことでした。つまりログ、コンテキスト、サーバー、トランスクリプト、どこにもシークレットの値は出てこないということです。ただし .env.local がRead許可のままだとコンテキストに入るため、先ほどのDeny設定が重要です。
次のステップ
セキュリティ面の補足説明は以上です。続いて、いよいよVercelへの公開作業に進んでいきます。