このサイトでの挿絵は、Gemini Proによる生成が大半です。 また、情報収集・まとめなどのサイトについては、検索結果をベースとしたものを使用しています。可能な限り出典を明示するよう努めますが完全ではありません。各自で調べる事もお忘れなく。

1password-cliを使ったパスワードの隠蔽方法

『載せてはいけない』情報となる .env ファイル、ここにパスワードを入れざるを得ないということですが、だからといってローカルに置いておくのも不安という場合もあります。

個人的には1passwordを使って管理していますが、1password-cliを使うことで、.env ファイルにパスワードを直接書かずに済む方法があります。若干面倒かもしれませんが、セキュリティ的に安心感があるので、一度確認してみるといいかもしれません。

※ 実験的にポッドキャスト風味の音声を用意してみました。3分ほどあなたのお耳をジャックさせていただきます。

1password-cliのインストール

1password-cliのインストールは、macOSだとHomebrewを使うのが簡単です。

1
brew install 1password-cli

1password-cliの設定

まず、1passwordの本体(GUI側)を開いて、利用可能にする準備が必要です。 設定→開発者と進めるとあります。

CLI設定画面

動作チェック

これで使えるようになります。

1
op vault list

動作チェック

対象となる鍵はどれだ?

.envにツッコみたい情報が1passwordに登録されているという前提ですが、まずは登録された鍵のIDを探してみましょう。

  1. 1passwordのGUIを使って探しておく(名前を調べておく)
  2. 1password-cliでの鍵一覧を出力してそこから見つける
1
op item list

すると、登録されている鍵の内部IDと鍵に付けた名前達が出てくるので、そこから該当するものを探してください。

鍵の一覧(抜粋)

鍵のIDを見つけたら、中身が取得できるかの確認もしておきましょう。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
op item get <鍵のID>

ID:          2***************************fi
Title:       tech*********.com
Vault:       Personal (o********************e)
Created:     1 year ago
Updated:     1 year ago by SATO Daisuke
Favorite:    false
Tags:        News/Reference
Version:     1
Category:    LOGIN
Fields:
  password:    [use 'op item get 2*********************fi --reveal' to reveal]
  username:    d************************p
URLs:
website:    https://japan.***************.com/login/ (primary)

今回は行いませんが、--reveal オプションをつけることで、パスワードの値を表示することもできます。

ここまでわかればあと一歩です。 今回の場合、使えるフィールドは passwordusername となっています。 これを .env ファイルに書き込むためのコマンドを作成します。

1
2
USERNAME="op://Personal(Vault名)/2***********************fi(鍵のID)/username"
PASSWORD="op://Personal(Vault名)/2***********************fi(鍵のID)/password"

実際に使うときは、op runコマンドに『このファイルから変数を登録して』という指示の下でコマンドを走らせます。

1
2
# .envファイルを読み込んで、op runでコマンド(uv run ...)を実行
op run --env-file .env uv run hogehoge.py

必要に応じ、認証画面が出るので、それを通すと実行されます。 これならうっかり.envが流出しても、それほど大きな揉んだにはならないでしょう(しないことが重要です!)。

まとめ?

1passwordはサブスクサービスとなってしまい、少々気が引いてしまっていたのですが、OS跨いでの管理という意味ではそれだけ強力な製品です。いいものには維持のためにもお布施を。ということで私は3年一括払い版を使っています。 3年でこれなら安いと思う。

おまけ

コマンドの呼び出しが長くなってしまうので、justで動くようにこんな感じにラップしてます。

[private]
@default: help

# ヘルプの出力
@help:
    echo "Usage: just <recipe>"
    echo ""
    just --list

# 取得処理
get:
    op run --env-file .env -- uv run python g**************.py

# データ削除
clean:
    rm -vf screenshot*.png
    rm -vf check-*.csv

これで

1
just get

になります。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。