【1Password移行⑨】移行=ローテーション──op run で環境変数を安全に注入する
前回は「何を消すか」を整理しました。
今回は「どう移行するか」の手順と、移行後に op run でシークレットを使う方法を書きます。
移行はローテーションとセットでやる
「.env に書いてあるAPIキーを1Passwordにコピーして、.env ファイルを削除する」──これで終わりに見えますが、実はこれだけだと不十分です。
古いキーはすでにディスクに存在していた期間があります。
その間に何かに読まれていた可能性はゼロではありません。
なので移行のタイミングで キーをローテーション(新しいキーを発行して古いキーを失効)させるのがベスト です。
- 各サービスで新しいAPIキーを発行する
- 新しいキーを1Passwordに保存する
- アプリや設定を新しいキーに切り替えて動作確認する
- 古いキーをサービス側で失効させる
.envファイル等を削除する
「コピーして削除」ではなく「新規発行→移行→失効→削除」の順番が大事です。
op run の仕組み
移行後、アプリやスクリプトがAPIキーを使いたいとき、どうすればいいか。
答えが op run です。
op run -- コマンド で実行すると、1Passwordのシークレットを環境変数として注入した状態でコマンドが実行されます。
op run -- node server.js環境変数のマッピングは .env ファイルを使って定義します。
値を直接書くのではなく、1Passwordの参照パスを書きます。
OPENAI_API_KEY=op://Infra/OpenAI-Token/credential
DATABASE_URL=op://Infra/MyDB-Prod/connection-string
SLACK_BOT_TOKEN=op://Infra/Slack-Bot-Token/credentialこのファイルには実際の値が書かれていないので、Gitに含めても安全です。
op run --env-file .env -- node server.jsMCPの設定ファイルでも使える
Claude Codeのような設定ファイルで認証情報を渡すケースでも同じ仕組みが使えます。
例えば .mcp.json でWordPressのMCPサーバーを設定するとき、こう書けます。
{
"mcpServers": {
"wordpress": {
"command": "op",
"args": [
"run",
"--env-file",
".op-env",
"--",
"npx",
"@your-mcp/wordpress-server"
]
}
}
}command を op run でラップすることで、MCPサーバーが起動するときに1Passwordから認証情報を注入してくれます。.mcp.json 自体にはパスワードが一切書かれていないので、Gitで管理できます。
~/.zshrc のexport を消す
~/.zshrc に書いてある export API_KEY=xxxxx 系は、移行が完了したら削除します。
ただし「常時環境変数として使いたい」ものがある場合は、シェルの初期化時に op CLIで取り出す方法もあります。
# op CLIが使える場合のみシークレットを読み込む
if command -v op >/dev/null 2>&1; then
export SOME_TOKEN=$(op item get MyToken --fields credential 2>/dev/null)
fiただしこの方法はシェル起動のたびに1Passwordへのリクエストが走るのでやや遅くなります。
必要なときだけ op run で注入するほうが効率的です。
次回 C-3「整理術と運用」では、移行後の日常運用フローをまとめます。
今回は以上です!