HeadlinesBriefing HeadlinesBriefing.com

once:コマンドを一度実行し出力を再利用

Hacker News •
×

once は、現在のディレクトリでコマンドを一度だけ実行し、その標準出力(stdout)を表示するとともに、ユーザーごとの小さなバックグラウンドデーモンのメモリに結果を保持するコマンドラインツールです。同じコマンド、ディレクトリ、テナントキーでの繰り返し呼び出しは、エントリの期限切れまでメモリから応答されます。デーモンは最後のエントリが期限切れになると自動的に停止します。

典型的な用途は、指紋認証で読み取りを毎回承認することなく、1Password からシークレットを読み取ることです。~/.zshrc でターミナルセッションごとに一度設定したテナントキーを使い、`once --ttl 8h --no-dir -- op read op://Private/Git Hub/token` のようなコマンドで GITHUB_TOKEN などのトークンをエクスポートできます。最初の呼び出しでは認証が求められ、8 時間以内の後続の呼び出しでは求められません。同じパターンは mise でも使え、グローバルに設定することも、プロジェクト固有の mise.local.toml ファイルに設定することもできます。

インストールには Go 1.27 以降が必要で、`go install github.com/alex0ptr/once@latest` を使用します。標準ライブラリ以外の依存関係はなく、macOS と Linux でのみ動作します。主なコマンドは、`once --ttl DURATION`、デーモンとそのエントリ数を表示する `once status`、キャッシュされたすべての値を破棄する `once clear`、そして `once help` です。

キャッシュされるのは標準出力のみです。ゼロ以外の終了コードで終了したコマンドの結果は決してキャッシュされず、終了コードはそのまま渡されます。デフォルトでは作業ディレクトリがキャッシュキーの一部になりますが、--no-dir を指定するとそれが除外され、1 つのキャッシュ値をすべてのディレクトリで共有できます。--until オプションは、今日の 22 時や明朝などの絶対的な有効期限を設定します。--ttl と併用した場合は、いずれか早い方が適用されます。

出典: Hacker News · 要約:HeadlinesBriefing