onepassword-cli-coder について
プロジェクトやデプロイのワークフローで1Password CLIを使ってシークレットを管理する開発者向けのスキルです。参照形式、Vaultやアイテムの整理、環境変数への注入、安全対策を扱います。
主な機能
- 01シークレット参照と命名規則
- 02環境ファイルの設定とコマンドへの注入
- 03Makefile、Docker Compose、デプロイの例
- 04Vault、アイテム、アカウントの管理パターン
- 05セキュリティ指針とトラブルシューティング用コマンド
活用シーン
- 01ローカル開発コマンドへの認証情報の読み込み
- 02デプロイ環境ごとのシークレット整理
- 03CI/CDによる認証情報取得の設定
- 041Password CLIのアクセスやフィールド問題の調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ majesticlabs-dev/ majestic-marketplace --skill onepassword-cli-coderインストール後、Claude Code で/onepassword-cli-coderを入力して読み込まれたか確認します。
同梱ファイルreferences/multiple-accounts.md
詳細
基本パターン
シークレット参照形式
op://<vault>/<item>/<field>
例:
op://Development/AWS/access_key_id
op://Production/Database/password
op://Shared/Stripe/secret_key
項目の命名規則
形式:{environment}-{service}(kebab-case)。環境ごとに項目を1つ作成します。
| パターン | 例 | 避けるべき例 |
|---|---|---|
{env}-{service} | production-rails | Production Rails |
{env}-{provider} | production-dockerhub | API Key |
{env}-{provider}-{resource} | production-hetzner-s3 | 環境が混在した項目 |
フィールドの命名
認証情報の種類を示す、意味が明確なフィールド名を使用します。
| 推奨例 | 避けるべき例 | 理由 |
|---|---|---|
access_token | value | 名前から内容がわかる |
master_key | secret | 具体的な用途が明確 |
secret_access_key | key | AWS の命名に一致 |
api_token | token | 他のトークンと区別できる |
フィールドの命名規則:
- 可能な場合はプロバイダーの用語に合わせます(AWS では
access_key_id、secret_access_keyを使用します) - 一貫性を保つため、snake_case を使用します
- 具体的な名前を付けます。項目に複数の認証情報がある場合は、単に
passwordとせずdatabase_passwordとします
環境ファイル(.op.env)
プロジェクトのルートに .op.env を作成します。
AWS_ACCESS_KEY_ID=op://Infrastructure/AWS/access_key_id
AWS_SECRET_ACCESS_KEY=op://Infrastructure/AWS/secret_access_key
DIGITALOCEAN_TOKEN=op://Infrastructure/DigitalOcean/api_token
DATABASE_URL=op://Production/PostgreSQL/connection_string
STRIPE_SECRET_KEY=op://Production/Stripe/secret_key
重要: .gitignore に追加します。
# 1Password - NEVER commit
.op.env
*.op.env
シークレットを使ったコマンドの実行
op run --env-file=.op.env -- terraform plan
op run --env-file=.op.env -- rails server
統合パターン
Makefile との統合
OP ?= op
OP_ENV_FILE ?= .op.env
# Prefix for all commands needing secrets
CMD = $(OP) run --env-file=$(OP_ENV_FILE) --
deploy:
$(CMD) kamal deploy
console:
$(CMD) rails console
migrate:
$(CMD) rails db:migrate
Docker Compose
op run --env-file=.op.env -- docker compose up
Kamal のデプロイ
# config/deploy.yml
env:
secret:
- RAILS_MASTER_KEY
- DATABASE_URL
- REDIS_URL
# .kamal/secrets
RAILS_MASTER_KEY=$(op read "op://Production/Rails/master_key")
DATABASE_URL=$(op read "op://Production/PostgreSQL/url")
REDIS_URL=$(op read "op://Production/Redis/url")
CI/CD(GitHub Actions)
# .github/workflows/deploy.yml
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: 1password/load-secrets-action@v2
with:
export-env: true
env:
OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}
AWS_ACCESS_KEY_ID: op://CI/AWS/access_key_id
AWS_SECRET_ACCESS_KEY: op://CI/AWS/secret_access_key
- run: terraform apply -auto-approve
CLI コマンド
シークレットの読み取り
op read "op://Vault/Item/field"
op read "op://Vault/Item/field" --format json
op read "op://Vault/TLS/private_key" > /tmp/key.pem && chmod 600 /tmp/key.pem
コマンドへの注入
DATABASE_URL=$(op read "op://Production/DB/url") rails db:migrate
op run --env-file=.op.env -- ./deploy.sh
op run --account my-team --env-file=.op.env -- terraform apply
項目の管理
op vault list
op item list --vault Infrastructure
op item get "AWS" --vault Infrastructure
op item create --category login --vault Infrastructure \
--title "New Service" --field username=admin --field password=secret123
プロジェクトのセットアップ
初期設定
op signin
op vault list
cat > .op.env << 'EOF'
AWS_ACCESS_KEY_ID=op://Infrastructure/AWS/access_key_id
AWS_SECRET_ACCESS_KEY=op://Infrastructure/AWS/secret_access_key
DATABASE_URL=op://Production/Database/url
REDIS_URL=op://Production/Redis/url
EOF
op run --env-file=.op.env -- env | grep -E '^(AWS|DATABASE|REDIS)'
プレースホルダーのワークフロー
事前にプレースホルダー値で項目を作成し、後から実際の認証情報を設定します。
op item create --vault myproject --category login \
--title "production-rails" --field master_key="PLACEHOLDER_UPDATE_BEFORE_DEPLOY"
cat > .kamal/secrets << 'EOF'
RAILS_MASTER_KEY=$(op read "op://myproject/production-rails/master_key")
EOF
# Later: update with real value
op item edit "production-rails" --vault myproject \
master_key="actual_secret_value_here"
Vault の整理
単一 Vault 方式(よりシンプル)
環境を区別する命名規則を使って、1つの Vault を使用します。
Vault: myproject
Items:
- production-rails
- production-dockerhub
- production-hetzner-s3
- staging-rails
- staging-dockerhub
- development-rails
複数 Vault 方式(チーム規模) -- チームごとに異なるアクセス制御が必要な場合に使用します。
| Vault | 用途 | アクセス権 |
|---|---|---|
Infrastructure | クラウドプロバイダーの認証情報 | DevOps チーム |
Production | 本番アプリのシークレット | デプロイシステム |
Staging | ステージング環境 | 開発チーム |
Development | ローカル開発用シークレット | 各開発者 |
セキュリティルール
.op.envと*.op.envを.gitignoreに追加し、決してコミットしないでください- CI/CD では個人アカウントではなく、サービスアカウントを使用してください
op readの出力をログにパイプしたり、echo で出力したりしないでください- セッショントークンをスクリプトに保存しないでください
- 自動化では Vault 名と項目名に変数を使用してください
トラブルシューティング
op signin # Re-authenticate expired session
op whoami # Check current session
op vault list # Verify vault access
op item list --vault Infrastructure | grep -i aws # Search for items
op item get "AWS" --vault Infrastructure --format json | jq '.fields[].label' # Check field names
複数アカウント
自動化では必ずアカウントを指定してください。「最後にサインインしたアカウント」に依存しないでください。
op vault list --account acme.1password.com
export OP_ACCOUNT=acme.1password.com
op run --account acme.1password.com --env-file=.op.env -- ./deploy.sh
複数環境のパターン
環境ごとに env ファイルを使用します:.op.env.production、.op.env.staging、.op.env.development
ENV ?= development
OP_ENV_FILE = .op.env.$(ENV)
deploy:
op run --env-file=$(OP_ENV_FILE) -- kamal deploy
# Usage: make deploy ENV=production
参考資料
- references/multiple-accounts.md - アカウント間のワークフローと Makefile との統合
コメント
Markdown 対応