コンテンツにスキップ

migrate-env-to-1password

.env のシークレットを 1Password の公式 op CLI に移行し、.envop:// 参照形式に書き換えます。実行時は op run --env-file=.env -- <コマンド> で普通にコマンドが動きます。

お好みのパッケージマネージャでインストールしてください。

Terminal window
gh skill install oharu121/skills migrate-env-to-1password

平文の API キーが入った .env は多くのプロジェクトのデフォルトで、かつ既知のリスクです。正しい対応策は実行時に op CLI が解決する op:// 参照への置き換えですが、これが地味に面倒 — 1Password アイテムを作り、op://Vault/Item/Field の URI を全キーに対して手組みし、タイポしていないか祈る、というやつです。このスキルがその移行を一気通貫で処理します。

.env を読み、どの変数を移行するか確認し、選んだ Vault に全変数を含む 1Password ログインアイテムを 1 つ作成し、.env を書き換えて各行が正しいフィールドを指すようにします。最後に op run --env-file=.env -- env で全変数の解決を検証します。

スキルは完全対話式です — 破壊的なステップ(1Password アイテム作成、.env 上書き)はすべて AskUserQuestion で確認を取ります。op が未インストールなら brew install --cask 1password-cli のインストールも提案します。

  • プロジェクトにまだ平文の .env が残っていて、次のメンバーが入る前に Vault に移したいとき
  • 1Password は導入済みだが既存プロジェクトの移行をやっていない — その仕上げ
  • .env → 1Password アイテム → op:// 参照 → 解決検証 のラウンドトリップをテスト込みで実行したいとき
  1. .env を読む。 変数と値を一覧表示。移行対象を確認。

  2. op 未インストールならインストール。 which op でチェック。なければ brew install --cask 1password-cli を提案。

  3. 認証確認。 op whoami でサインイン状態を確認。未認証なら デスクトップアプリの Settings → Developer → Connect with 1Password CLI 有効化か、eval $(op signin) を案内。

  4. Vault 選択。 op vault list で Vault 一覧を表示、AskUserQuestion で選択。

  5. 1Password アイテム作成。 全移行対象変数をフィールドとして含むログインアイテムを 1 つ作成。タイトルはプロジェクトディレクトリ名がデフォルト、変更可能。

  6. .env の書き換え。KEY=valueKEY=op://Vault/Item/Field に。上書き前に diff を表示。

  7. 検証。 op run --env-file=.env -- env | grep <KEY> で各変数が解決することを確認。成功メッセージには実コマンドでの op run 使い方も含めます。

移行前:

.env
OPENAI_API_KEY=sk-proj-abc123...
DATABASE_URL=postgres://user:pass@host/db
STRIPE_SECRET_KEY=sk_test_xyz...

移行後:

.env
OPENAI_API_KEY=op://Personal/my-app/openai_api_key
DATABASE_URL=op://Personal/my-app/database_url
STRIPE_SECRET_KEY=op://Personal/my-app/stripe_secret_key

以降、通常のコマンドはラッパー越しに実行:

Terminal window
op run --env-file=.env -- node script.js
op run --env-file=.env -- python main.py
  • .env を直接読むスクリプトop:// の文字列リテラルをそのまま受け取ります。op run 経由で実行するか、op read を呼ぶライブラリを使ってください。
  • Git 履歴: 平文の値が過去にコミットされていたら、移行後のローテーションは「オプション」ではなく必須手順です。
  • レート制限: 大きなプロジェクトで op がレート制限に達することがあります。少し待ってリトライで OK。

SKILL.md を GitHub で見る — 対話ワークフローの全手順、エラーハンドリング、レート制限対応。