Oharu-commands-skills-gems migrate-env-to-1password

Migrate .env secrets to 1Password using the op CLI, replacing plaintext values with op:// references (Japanese). Use when the user wants to move .env secrets into 1Password, mentions the 1Password CLI, or asks to replace environment variables with vault references.

install
source · Clone the upstream repo
git clone https://github.com/oharu121/oharu-commands-skills-gems
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/oharu121/oharu-commands-skills-gems "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/migrate-env-to-1password" ~/.claude/skills/oharu121-oharu-commands-skills-gems-migrate-env-to-1password && rm -rf "$T"
manifest: skills/migrate-env-to-1password/SKILL.md
source content

プロジェクトの

.env
ファイルに含まれるシークレットを 1Password CLI (
op
) に移行します。

ユーザーの入力: $ARGUMENTS

Step 1: .env ファイルの確認

プロジェクトルートの

.env
ファイルを読み込み、環境変数の一覧を確認する。

  • .env
    が存在しない、または空の場合: 移行対象がない旨を伝えて終了する
  • 存在する場合: 変数名と値の一覧をユーザーに表示し、移行対象を確認する

Step 2: 1Password CLI のインストール確認

which op && op --version
  • op
    コマンドが見つからない場合:
    • AskUserQuestion ツールで「1Password CLI をインストールしますか?」と確認する
    • ユーザーが承認したら
      brew install --cask 1password-cli
      を実行する
    • インストール失敗時はエラーを表示して終了する
  • op
    コマンドが存在する場合: 次のステップへ

Step 3: 1Password CLI の認証確認

op whoami
  • 認証済みの場合: アカウント情報を表示して次のステップへ
  • 未認証の場合:
    • ユーザーに以下を案内する:
      1. 1Password デスクトップアプリがインストール済みの場合: 1Password > Settings > Developer > Connect with 1Password CLI を有効にすることを推奨
      2. ターミナルで
        eval $(op signin)
        を実行してサインインする
    • AskUserQuestion ツールで「サインインが完了したら教えてください」と待機する
    • ユーザーが完了を報告したら、再度
      op whoami
      で認証状態を確認する
    • まだ未認証の場合はエラーを表示し、再試行を促す

Step 4: 1Password Vault の選択

op vault list --format=json
  • Vault 一覧を取得し、AskUserQuestion ツールでユーザーに保存先の Vault を選択してもらう
  • 選択肢には Vault 名と ID を含める

Step 5: 1Password にアイテムを作成

.env
ファイルの各環境変数を 1Password に保存する。

  1. プロジェクト名(ディレクトリ名やリポジトリ名)をベースにアイテムのタイトルを提案する
  2. AskUserQuestion ツールでアイテムのタイトルを確認する
  3. 以下のコマンドで 1Password にアイテムを作成する:
op item create \
  --category=login \
  --title="{アイテムタイトル}" \
  --vault="{選択されたVault}" \
  "{変数名1}={値1}" \
  "{変数名2}={値2}" \
  ...
  1. 作成成功を確認する

Step 6: .env ファイルを op:// 参照に書き換える

.env
ファイルの各行を
op://
参照形式に書き換える。

変換前:

KEY=secret-value

変換後:

KEY=op://{Vault名}/{アイテムタイトル}/{フィールド名}
  • 書き換え前にユーザーに変換内容を表示して確認を取る
  • 確認が取れたら
    .env
    ファイルを上書きする

Step 7: 動作確認

op run --env-file=.env -- env | grep {変数名}
  • 各変数が正しく解決されることを確認する
  • 成功したら完了メッセージを表示する

Step 8: 使い方の案内

移行完了後、以下の使い方を案内する:

コマンドの実行方法

# 環境変数を注入してコマンドを実行
op run --env-file=.env -- <your-command>

# 例
op run --env-file=.env -- node script.js
op run --env-file=.env -- python main.py

注意事項

  • .env
    ファイルには平文のシークレットが含まれなくなったため、安全性が向上した
  • op run
    を使わずに直接
    .env
    を読み込むと
    op://
    の参照文字列がそのまま使われるため注意
  • プロジェクト内で
    dotenv
    等を使っている場合は、
    op run
    経由で実行するか、スクリプトの起動方法を変更する必要がある

エラーハンドリング

  • 各ステップでエラーが発生した場合、エラー内容を表示して原因と対処法を提案する
  • 1Password の API レート制限に達した場合は、少し待ってからリトライするよう案内する
  • Vault へのアクセス権限がない場合は、1Password アプリで権限を確認するよう案内する