1Password CLI
op read op run
シークレット管理
1Password

1Password CLI でシークレットを扱う実践ガイド - op read/op run/op inject

1Password CLI (op) でシークレットを安全に扱う手順を解説。op read の値取得、op run の環境変数注入、op inject のテンプレート差し込み、サービスアカウント設定とトラブル対処まで実践的に整理します。

約 9 分
1Password CLI でシークレットを扱う実践ガイド - op read/op run/op inject

本記事にはプロモーション(アフィリエイトリンク)が含まれます。

1Password CLI (op コマンド) を使うと、これまで .env に平文で書いていた API キーやデータベースのパスワードを、コードに一切残さずに扱えます。本記事では、op read で 1 件だけ取り出す、op run で環境変数として注入する、op inject でテンプレートに差し込む、という 3 つの基本操作を軸に、サービスアカウントの発行からトラブル対処・検証までを実践手順として整理します。セットアップ込みで 15〜30 分ほどあれば、日常のシークレット操作を CLI に寄せられます。

前提条件と secret reference の基礎

1Password CLI は、Vault に保管したシークレットをターミナルやスクリプトから参照するための公式コマンドラインツールです。1Password のアカウントに紐づけて使い、macOS / Windows / Linux のいずれでも動作します。まず、以下がそろっているか確認します。

  • 1Password アカウント(個人・チーム・ビジネスのいずれか)
  • op コマンド (1Password CLI) のインストール(公式インストーラ、または Homebrew の brew install 1password-cli)
  • 認証方法を 1 つ:ローカルの対話利用ならデスクトップアプリ連携、CI やコンテナなどの無人環境ならサービスアカウントトークン
  • 参照したいシークレットが Vault に登録済みであること

シークレットの場所は op://<Vault>/<Item>/<field> という secret reference で指定します1。たとえば op://Development/Database/password は、Development という Vault の Database アイテムの password フィールドを指します。専門用語を 1 つだけ補足すると、secret reference とは「値そのものではなく、値の在り処を指すパス」のことです。この書式を覚えておけば、op read・op run・op inject のすべてで同じ参照を使い回せます2

サービスアカウントを発行して op をセットアップする

無人環境で使う場合は、個人ログインではなくサービスアカウント(ops_ で始まるトークン)で認証するのが定石です。以下の手順で、インストールから疎通確認までを進めます。

  1. op CLI をインストールする(macOS なら brew install 1password-cli。入ったら op --version で確認)。
  2. 認証方法を選ぶ。ローカルの対話利用ならデスクトップアプリ連携を有効化して op signin、CI やコンテナなら次のサービスアカウントを使う。
  3. サービスアカウントを作成し、ops_ で始まるトークンを取得する。アクセスできる Vault は、そのアプリが必要とする範囲だけに絞る(最小権限)3
  4. トークンを環境変数に設定する。~/.zshrc への直書きは避け、direnv でプロジェクト単位に注入するか、CI のシークレット機能から渡す。
  5. op whoami で認証を確認する(現在のセッションがどのアカウントに解決されるかを表示)。
# インストール (macOS / Homebrew)
brew install 1password-cli

# サービスアカウントトークンを環境変数に設定
export OP_SERVICE_ACCOUNT_TOKEN="ops_xxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# 認証確認
op whoami

トークンはマスターキーそのものとして扱ってください。ops_ で始まる 1 本の文字列だけで、そのアカウントが到達できる Vault をすべて読めてしまうため、シェル履歴やコミット済みの dotfile ではなく、シークレットマネージャや CI の Vault に置きます。ローテーションは低コストなので、広い権限のトークンを使い回すより、プロジェクトごとに権限を絞った新しいアカウントを発行するほうが安全です。

CI/CD やコンテナ全体の設計、Connect サーバーとの使い分けまで踏み込みたい場合は、Secrets Automation 入門と CI 連携の実践 で全体像を整理しています。本記事はあくまで op コマンドそのものの日常操作にフォーカスします。

1Password CLI のセットアップフロー: インストール → サービスアカウント発行 → トークンを環境変数に設定 → op whoami で確認
op CLI のセットアップは、インストール・トークン発行・環境変数設定・疎通確認の 4 ステップで完了する。

「最新の公式ガイドは 1Password CLI のドキュメント、特にサービスアカウントと開発者向けセクションを参照してほしい」(原文: For the latest official guides, see the 1Password CLI documentation, especially the service account and developer sections.)

公式が案内するとおり、細かな仕様は変わりうるため、トークンの扱いや権限設計はサービスアカウントの公式ドキュメント3で最新版を確認しておくと安全です。

op read / op run / op inject の使い分け

3 つのコマンドは似ていますが、返すものと使いどころが異なります。まず全体像を表で押さえます。

コマンド何をするか向いている場面
op readsecret reference を 1 件解決して値を標準出力に返すスクリプトで 1〜2 個の値が欲しい / デバッグ
op runテンプレートを読み、環境変数として子プロセスに注入するローカル開発でアプリ起動時に一括注入
op injectテンプレート内の参照を実値へ置換してファイル出力する設定ファイル (YAML/JSON) の生成

使い分けの目安としては、op run はローカル開発者に、サービスアカウント + op read / op inject は CI やコンテナ運用者に向いています。逆に、たまに 1 件だけ値を見たいだけならデスクトップアプリで十分で、CLI が必須というわけではありません。

op read — 1 件だけ取り出す

単一の値が欲しいときは op read が最短です4。シェルの変数に代入して使うのが定番のパターンです。

op read "op://Development/Database/password"
export DATABASE_PASSWORD=$(op read "op://Development/Database/password")

# 鍵をそのままファイルへ書き出す(末尾改行なし)
op read "op://Private/SSH Key/private key" --no-newline --out-file id_ed25519

ここで効いてくるフラグが 2 つあります。--no-newline は余計な改行で鍵やトークンが壊れるのを防ぎ、--out-file は値を直接ファイルへ書き出すのでシェル履歴やプロセス一覧に残りません。ただし op read は値を標準出力へ平文で出すため、アプリ全体で使うなら後述の op run のほうがターミナルのスクロールバックに秘密を残さず安全です。SSH 秘密鍵のように 1Password で管理している鍵も op read で取り出せます。SSH 鍵の一元管理そのものは 1Password で SSH キー管理を一元化する方法 にまとめているので、鍵運用ごと見直したい場合はそちらも参照してください。

op run — 環境変数として注入する

ローカル開発で最も出番が多いのが op run です。テンプレート(例: .env.op)には値ではなく参照だけを書きます。

DATABASE_URL=op://Development/Database/url
API_KEY=op://Development/Stripe/production-key
op run --env-file=.env.op -- npm run dev

1Password の op run は、これらの参照を実行時に解決し、平文をディスクに残さないまま、アプリへ環境変数として渡します5。テンプレート自体は参照しか含まないため、リポジトリにコミットしても安全です。

「1Password Developer 機能を使えば、CLI 設定やディスク上の平文ファイルなしで、デスクトップアプリから直接 .env をマウントできる」(原文: 1Password Developer features let you mount .env files directly in the desktop app without any CLI setup or plaintext files on disk.)

このように「平文の .env を捨てる」方向は CLI とデスクトップアプリの両方で進んでおり、ローカル開発でも本番同様にシークレットを扱えるようになってきています。

op inject — 設定ファイルに差し込む

環境変数ではなく実ファイルの設定を要求するツールには op inject を使います。テンプレート内の {{ op://... }} を実値へ置換して出力するので、一部のフレームワークが求める YAML や JSON の設定生成に向いています。

# config.template.yaml
database:
  password: "{{ op://Development/Database/password }}"
  host: "{{ op://Development/Database/host }}"
op inject -i config.template.yaml -o config.yaml

テンプレートはバージョン管理に置き、生成後の config.yaml.gitignore に加えておきます。こうすれば実値の入ったファイルは必要なときにだけ生成され、コミットされません。シークレットがローテーションされたら再生成するだけで、Vault から設定までの経路を繰り返し・追跡可能な形に保てます。

op read・op run・op inject の使い分け: 1 件取得はop read、環境変数注入はop run、設定ファイル生成はop inject
用途で選ぶと迷わない。値 1 件は op read、アプリ起動は op run、設定ファイル生成は op inject。

つまずきポイントと対処の早見表

セットアップ直後にありがちな詰まりどころを、原因と対処の早見表にまとめます。多くは権限か環境変数、CLI バージョンのいずれかです。

症状・エラー主な原因対処
アイテムが見つからないサービスアカウントに当該 Vault の権限がないアクセス権に Vault を追加、または参照する Vault 名を見直す
認証エラー / トークンが効かないOP_SERVICE_ACCOUNT_TOKEN が現在のシェルで未設定echo $OP_SERVICE_ACCOUNT_TOKEN で確認し、export し直す
コマンドが古い挙動をするCLI のバージョンが古いbrew upgrade 1password-cli などで更新する
op run で値が空になるsecret reference のパス (Vault/Item/field) の誤りop read で同じ参照を単体テストして切り分ける

切り分けができるのは、1Password が op:// という統一書式を採用しているおかげです。op run で不調なら、同じ参照を op read に渡して単体で解決できるか試せば、問題がパスにあるのか権限にあるのかをすぐ特定できます。

設定の検証とロールバック

設定できたら、実際に値が引けるかを検証します。op whoami で認証情報を確認し、op read で 1 件だけ取得できれば疎通は問題ありません。CI に組み込む前に、この 2 コマンドで手元確認しておくと事故を減らせます。

トークンを誤って共有してしまった、権限を広げすぎた、といった場合は、1Password の管理画面から該当サービスアカウントのトークンを失効 (revoke) させ、新しいトークンを再発行します。シークレットそのものは Vault に残るため、トークンの入れ替えだけで復旧できるのが安心材料です。

op を AI エージェントや MCP サーバーと組み合わせ、シークレット取得ごと自動化する発展形は、AI エージェント時代のシークレット管理 で扱っています。まずは本記事の 3 コマンドを手に馴染ませてから進むのがおすすめです。

まとめ

1Password の op コマンドは、op read で 1 件取得、op run で環境変数注入、op inject でテンプレート差し込み、という 3 つを押さえれば、日常のシークレット操作はほぼカバーできます。共通言語は op://<Vault>/<Item>/<field> の secret reference ひとつ。まずはデスクトップアプリ連携か小さなサービスアカウントで op read と op run を試し、平文の .env を段階的に手放していくのが、無理のない移行手順です。詰まったら早見表で権限・環境変数・バージョンの 3 点を確認してください。


※情報は 2026-07-07 時点の内容です。最新情報は公式サイトをご確認ください。

※本記事には PR を含みます。

Footnotes

  1. 1Password Developer — Use secret references with the 1Password CLI. https://developer.1password.com/docs/cli/secret-references/

  2. 1Password Developer — Get started with 1Password CLI. https://developer.1password.com/docs/cli/get-started/

  3. 1Password Developer — Get started with 1Password Service Accounts. https://developer.1password.com/docs/service-accounts/get-started/ 2

  4. 1Password Developer — op read command reference. https://developer.1password.com/docs/cli/reference/commands/read/

  5. 1Password Developer — Load secrets into the environment with op run. https://developer.1password.com/docs/cli/secrets-environment-variables/

よくある質問

op read は secret reference を 1 件だけ解決して値を返すため、スクリプトやデバッグで 1〜2 個の値が欲しいときに使います。op run は .env テンプレートを読んで環境変数としてアプリに注入する用途、op inject は設定ファイル内の参照を実値に置換して書き出す用途です。日常のローカル開発では op run が最も出番が多くなります。

関連記事