以下の内容はhttps://nikkie-ftnext.hatenablog.com/entry/dotenv-file-from-bearer-secrets-to-1password-referencesより取得しました。


LLMのWeb APIのキーを.envにベタ書きから、1Password管理に移行する

はじめに

七尾百合子さん、お誕生日 7日目 おめでとうございます! nikkieです。

日々LLMのAPIを呼び出していますが、APIキー(例:OPENAI_API_KEY)の扱いが安全にできることに気づき、作業環境に適用しました。
この記事は、1Passwordを使っているmacOS環境での話となります。

目次

LLMのAPIキーの扱い方

これまでの私は.envファイルを用意し source して使っていました1

export OPENAI_API_KEY=sk-xxxx

先日(MCPクライアント自作2の中で)python-dotenvを試しました。
sourceせずに済んで便利でしたね

OPENAI_API_KEY=sk-xxxx

いずれにせよ、LLMのAPIキーをベタ書きしたファイルを開発マシン(macOS)に置いていたのです。

azuさんの記事を思い出す

思い出した記事がありました。

私も1Passwordを使っています(マスタパスワード1つだけで済んで、とっても便利!)。
azuさん記事の「.envに入っているCredentialを1Passwordに移行する」を、私の環境のLLMのAPIキーに適用してみました。

% sw_vers 
ProductName:            macOS
ProductVersion:         14.5
BuildVersion:           23F79

1Password for Mac 8.10.68 (81068014)

結論:.envの中のCredentialを1Password移行後

以下のコマンドでLLMのAPIキーを読み込むようにしています

% op run --env-file=$HOME/.secret/llm-api/.env -- <コマンドが続く>
  • 1PasswordのLLMのAPIキーを参照するように記載した.envをマシンの中に置きました
  • やってみて分かったのですが、opコマンドを使うには1Passwordアプリを開いておく必要があります

azuさんの記事にはシェルスクリプトを書いてoprコマンドを用意しているのですが、私には進み幅が大きかったので宿題事項としました

macOSに1password-cliをインストール

opコマンドは1password-cliから。
Homebrewで入ります

1password-cli インストール後、ドキュメントに沿って1Passwordの設定から「Integrate with 1Password CLI」(「1Password CLIと連携」)を有効にしました。
このあとop vault listを叩いたのですが、1Passwordアプリを閉じていたために失敗します。

[ERROR] 2025/03/24 19:30:33 connecting to desktop app: 1Password CLI couldn't connect to the 1Password desktop app. To fix this, update the 1Password app to the latest version and restart the app. If you're still having trouble, visit https://developer.1password.com/docs/cli/app-integration#troubleshooting for more help.%!(EXTRA string=/usr/local/bin/op)

1Passwordアプリを開いていると通ります

1Passwordを参照するように.envを書く

1Passwordにはログインのアイテムを作りました(命名「LLM API KEYs」)。
このセクションにパスワードのフィールドを追加します

そして、.envファイルではアイテムのフィールド名を指定します

OPENAI_API_KEY="op://Personal/LLM API KEYs/Section_ornovavrhujnorecuh6xdswuxu/OPENAI_API_KEY"

azuさんの記事ではjqを駆使して、value(秘密の値)があるフィールドについて、<label>="<reference>"という形式で出力していました。
valueは1Passwordが管理してくれるので、安心・安全です!

実行(op run

あとはop runコマンドに.envファイルを渡して実行するだけです!

例:OPENAI_API_KEYを使って、OpenAIの新しいspeech-to-textモデルを叩く3

% op run --env-file=$HOME/.secret/llm-api/.env -- python -m speech_recognition.recognizers.whisper_api.openai --model gpt-4o-mini-transcribe sample.wav

例:simonwさんのllmも使えます!(これは拡張を自作している様子4

% op run --env-file=$HOME/.secret/llm-api/.env -- llm --model gemini-2.0-flash-yt 'https://www.youtube.com/shorts/46ycw2pQJCA' -o task transcribe

simonw/llmではLLM_GEMINI_KEYという環境変数5なのですが、これは.envに書いたのでもう「どんな環境変数名だっけ?」となることはありません

終わりに

azuさんの記事を参考に、LLMのAPIキーを.envベタ書きから1Passwordに移行しました。
都度op runコマンドが必要になっていますが、これまでsource <.envファイルのパス>でやってきた私にとってはあまり変わりません。
op runコマンド前に1Passwordを開く必要もありますが、安全を優先したいので納得しています。

かしこいClaudeとかに教えてもらって、oprコマンド相当も用意しよーっと(宿題は早めにね)


  1. .envファイルはsourceすると誤解していた節があります
  2. ふふ...(別記事書くかも)
  3. ふふふ...(別記事書きたいな)
  4. https://github.com/simonw/llm-gemini/tree/0.15?tab=readme-ov-file#usage



以上の内容はhttps://nikkie-ftnext.hatenablog.com/entry/dotenv-file-from-bearer-secrets-to-1password-referencesより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14