シャンディ
シャンディ
APIキーをコードにベタ書きしてる人、今すぐやめてください。

いきなり強い言い方をしたけど、これは本当に大事な話。

自分はClaude CodeやLINE API、いろんな外部サービスのAPIを日常的に触ってる。で、初心者がやりがちなミスの中でも一番やばいのが「APIキーやパスワードをコードに直接書いてしまう」こと。

なぜダメなのか、何が起きるのか、じゃあどうすればいいのか。今日はこれをできるだけわかりやすく説明する。

APIキーをコードに直書きすると何が起きるのか

インターン生
インターン生
コードにAPIキーを書くと何がまずいんですか?

たとえばこんなコードを書いたとする。

api_key = "sk-abc123xxxxxxxxxxxxxxxxx"
client = OpenAI(api_key=api_key)

ローカルで動かしてる分にはとりあえず問題ない。でもこのファイルをGitHubにpushした瞬間、世界中の誰でもそのキーを見れる状態になる。

「いやいや、自分のリポジトリはprivateだから」と思うかもしれない。でもprivateだって共同開発者は見えるし、設定ミスでpublicにしてしまう事故は実際にある。

シャンディ
シャンディ
しかも怖いのは、GitHubを24時間自動スキャンしてるBotがいること。

悪意のあるBotがGitHubの公開リポジトリを常に監視していて、APIキーっぽい文字列を見つけたら即座に悪用する。pushしてから悪用されるまで数分というケースも報告されている。

実際にAWSのアクセスキーがGitHubに漏れて、仮想通貨のマイニングに使われて数百万円の請求が来た、という事故は何件も起きている。個人開発者でもこのリスクは同じ。

「ローカルだから大丈夫」が一番危ない

インターン生
インターン生
GitHubにpushしなければ大丈夫じゃないですか?

理屈の上ではそうだけど、問題は「pushしないつもりだったのにpushしてしまう」パターンがめちゃくちゃ多いこと。

よくあるのがこういう流れ。

開発中にAPIキーをコードに直書きする
「あとで環境変数に移そう」と思ってそのまま忘れる
git add . で全ファイルをステージングする
git push でキーごとGitHubに上がる
気づいてファイルを修正して再push
でもgitの履歴にはキーが残ったまま

シャンディ
シャンディ
⑥が一番やっかい。ファイルを直してもgitの履歴には残る。

GitHubでファイルを削除したり、コミットを上書きしても、過去のコミット履歴を遡ればキーは見える。完全に消すにはgit filter-repoのような特殊なコマンドで履歴ごと書き換える必要がある。正直かなり面倒。

だから「あとで消せばいい」じゃなくて「最初から書かない」が正解。

正しいAPIキーの管理方法3つ

シャンディ
シャンディ
じゃあどうするか。方法は大きく3つある。

① 環境変数に入れる

一番シンプルな方法。ターミナルで環境変数として設定して、コードからはその変数を読み込む。

設定(ターミナル):
export OPENAI_API_KEY="sk-abc123xxxxxxxxx"

読み込み(Python):
import os
api_key = os.environ["OPENAI_API_KEY"]

コードにキーは一切書かない。環境変数はそのPCの中だけに存在するから、gitにもGitHubにも上がらない。

② .envファイル + .gitignore

プロジェクトごとにキーを管理したい場合はこれ。.envファイルにキーを書いて、.gitignoreでgitの管理対象から外す。詳しくは次のセクションで。

③ シークレットマネージャー

本番環境やチーム開発ではAWS Secrets Manager、GCP Secret Manager、1Passwordなどの専用サービスを使う。個人開発なら①か②で十分だけど、仕事で使うなら知っておくといい。

インターン生
インターン生
Claude Codeを使うときはどうすればいいですか?

Claude Codeの場合、APIキーは初回ログイン時に設定されるから、コードに書く必要はない。もし他のAPIキー(OpenAIやLINEなど)をClaude Codeのプロジェクトで使いたい場合は、環境変数か.envファイルに入れて、Claude Codeにはその変数名だけを伝えればいい。

.envファイルの使い方(実践編)

シャンディ
シャンディ
実務で一番使うのは.envファイル。手順を具体的に見せる。

ステップ1:.envファイルを作る

プロジェクトのルートに.envファイルを作成。

OPENAI_API_KEY=sk-abc123xxxxxxxxx
LINE_CHANNEL_SECRET=your_secret_here
DATABASE_URL=postgresql://user:pass@localhost/mydb

ステップ2:.gitignoreに追加

.gitignoreファイルに.envを追記する。これでgitの管理対象外になる。

.env
.env.local
.env.production

ステップ3:コードから読み込む

Python(python-dotenvを使用):
from dotenv import load_dotenv
load_dotenv()
api_key = os.environ["OPENAI_API_KEY"]

Node.js(dotenvを使用):
require('dotenv').config()
const apiKey = process.env.OPENAI_API_KEY

インターン生
インターン生
チームメンバーにはどうやってキーを共有するんですか?

.env.exampleというファイルを作って、キーの「名前だけ」を書いておく。値は空欄にする。

OPENAI_API_KEY=
LINE_CHANNEL_SECRET=
DATABASE_URL=

このファイルはgitにcommitしてOK。新しいメンバーはこれをコピーして.envにリネームし、自分のキーを入力する。キーそのものはSlackのDMや1Passwordなど、安全な方法で共有する。

自分のコードにキーが埋まってないか調べる方法

シャンディ
シャンディ
過去に直書きしたことがあるなら、今すぐチェックしてほしい。

まずは現在のコードに残っていないか確認する。

ファイル内を検索:
grep -r "sk-" .(OpenAI系のキー)
grep -r "API_KEY" .(変数名ベース)
grep -r "password" . --include="*.py" --include="*.js"

git履歴も検索:
git log -p | grep "sk-"
git log -p | grep "SECRET"

git履歴に見つかった場合、現在のファイルから消しても意味がない。履歴に残ったままだから。

インターン生
インターン生
もっと簡単に調べる方法はないですか?

GitHubを使っているなら、Secret scanning alertsという機能がある。GitHubが自動的にリポジトリをスキャンして、既知のAPIキーパターンを検出してくれる。publicリポジトリなら無料で使える。

もっと本格的に調べたい場合は、truffleHoggit-secretsというツールがある。これらはgitの全履歴をスキャンして、キーっぽい文字列を見つけてくれる。

truffleHogでスキャン:
pip install trufflehog
trufflehog git file://./

もしキーが漏れてたらやること(優先順位順)

シャンディ
シャンディ
見つかったらパニックにならず、この順番で対処する。

① キーを即座に無効化する
各サービスの管理画面(OpenAI、AWS、LINEなど)でキーをrevokeする。これが最優先。無効化すれば悪用はできなくなる。

② 新しいキーを発行する
新しいキーを発行して、環境変数か.envファイルに正しく設定し直す。

③ git履歴からキーを除去する
git filter-repoで履歴を書き換える。

④ 不正利用がないか確認する
各サービスの利用状況・請求を確認。身に覚えのないAPI呼び出しや請求があれば、サービス提供者に連絡する。

⑤ .gitignoreに.envを追加して再発防止
二度と同じことが起きないように、.gitignoreの設定を確認する。

一番大事なのは①。キーを無効化すれば、たとえ履歴に残っていてもそのキーでは何もできない。まずは止める、話はそれから。

まとめ:覚えておくべき3つのこと

シャンディ
シャンディ
最後に3つだけ。

① コードにキーを書かない。環境変数か.envを使う
「一時的に」「ローカルだけ」と思っても直書きしない。最初から正しい方法でやる。

② .envファイルは必ず.gitignoreに入れる
プロジェクトを作ったら最初にやること。あとからだと忘れる。

③ 過去に直書きしたことがあるなら今すぐ調べる
grep -r "sk-" .git log -p | grep "sk-"で確認。見つかったらキーを無効化して再発行。

APIキーの管理は地味だけど、ここをサボると本当に取り返しがつかなくなる。数百万円の請求書が届いてからでは遅い。

逆に、環境変数と.gitignoreさえ正しく設定しておけば、基本的に安全。5分もかからない作業で未来のリスクをゼロにできる。

シャンディ
シャンディ
キーは書かない、漏らさない、見つけたら即無効化。これだけ。