1Password の特定のアイテムを CLI からデスクトップアプリで開く方法
1Password の特定のアイテムを CLI からデスクトップアプリで開く方法
1Password でよく使うアイテムを、CLI から一発でデスクトップアプリに表示したい、という需要があります。
onepassword:// という URL スキームは存在するものの、公式ドキュメントには特定アイテムを開くための形式がほとんど書かれていません。色々試した結果、プライベートリンクの URL を少しだけ書き換えるという方法で、ブラウザを経由せずデスクトップアプリで直接アイテムを開けることがわかりました。
手順
1. 1Password でプライベートリンクをコピー
1Password デスクトップアプリで、開きたいアイテムを右クリック → 「Copy Private Link」(プライベートリンクをコピー)を選択します。
クリップボードにこんな形式の URL がコピーされます。
https://start.1password.com/open/i?a=ABCDEFGHIJKLMNOPQRSTUVWXYZ&v=ZYXWVUTSRQPONMLKJIHGFEDCBA&i=noagqauoq2qmya7tdiavvvslf4&h=my.1password.com
各パラメータの意味:
a= アカウント UUIDv= vault UUIDi= アイテム UUIDh= ホスト名
2. URL の先頭を書き換え
コピーした URL の https://start.1password.com の部分を、onepassword: に置き換えます。
変換前:
https://start.1password.com/open/i?a=...&v=...&i=...&h=...
変換後:
onepassword://open/i?a=...&v=...&i=...&h=...
3. open コマンドで開く
open 'onepassword://open/i?a=ABCDEFGHIJKLMNOPQRSTUVWXYZ&v=ZYXWVUTSRQPONMLKJIHGFEDCBA&i=noagqauoq2qmya7tdiavvvslf4&h=my.1password.com'
URL はシングルクォートで囲んでください。& がシェルでバックグラウンド実行扱いになるのを防ぐためです。
これで 1Password デスクトップアプリが起動し、該当アイテムが直接表示されます。ブラウザは開きません。
動かない URL スキーム
ネット上には誤った情報も散見されますが、以下の形式は動きません。
# 動かない例
open 'onepassword://view-item?i=noagqauoq2qmya7tdiavvvslf4'
view-item というパスは存在しません。プロトコル onepassword: 自体は有効なので 1Password は起動するかもしれませんが、特定のアイテムは表示されません。
正しい形式は onepassword://open/i?a=...&v=...&i=...&h=... で、4つのパラメータすべてが必要です。
なぜこれで動くのか
1Password の開発者がフォーラムで言及しているように、シェアリンク https://start.1password.com/open/i?... はそもそも 1Password アプリが URL ハンドラとして登録されている形式です。デスクトップアプリがインストールされていれば、この HTTPS リンクを開いた時点でアプリが起動して該当アイテムを表示します。
ただし、ブラウザを一旦経由するため、設定によってはブラウザが先に立ち上がってしまいます。それを避けるには、最初から onepassword:// スキームに書き換えればよい、というわけです。
注意点
- 公式ドキュメントには明記されていない使い方なので、将来の 1Password バージョンで動作が変わる可能性があります(ただしシェアリンク機能自体は安定しています)。
- macOS の場合、1Password 8 デスクトップアプリがインストールされていることが前提です。
- iOS では挙動が異なる場合があります。本記事は macOS での動作を前提としています。
まとめ
- プライベートリンクをコピー
https://start.1password.comをonepassword:に置換open '<URL>'で実行
たったこれだけで、CLI から 1Password の特定アイテムを直接デスクトップアプリで表示できます。ランチャー(Alfred、Raycast 等)のスクリプトと組み合わせれば、さらに強力なワークフローが組めます。
開発相談をお待ちしています。