
ネイティブOSの資格情報ストア(macOSキーチェーン、Linux Secret Service、Windows Credential Manager)を使用して環境シークレットを管理するためのセキュアなCLIツール
ネイティブOS資格情報ストアを使用した安全な環境シークレット管理。

myapp.dev、stripe-api.prod、work.staging)cmdでコマンドを保存および再実行(検索、一覧表示、実行、削除).envファイルにエクスポート(auditによる生成追跡付き)eval $(envsec env)).envファイルからシークレットを読み込み(競合検出付き)envsec tui)これは以下のパッケージを含むモノレポです:
| パッケージ | 説明 | npm |
|---|---|---|
envsec | シークレット管理用CLIツール | |
@envsec/sdk | プログラムでシークレットを読み込むためのNode.js / Bun SDK | |
@envsec/core | コアエンジン — OS資格情報ストアアダプター + メタデータDB | |
@envsec/tui | シークレット管理用の対話型ターミナルUI |
Node.jsまたはBunからシークレットにプログラムでアクセスするには、@envsec/sdkを使用します:```bash
npm install @envsec/sdk
I need the actual content of chunk 3 to translate it. Please provide the Markdown text you want translated.```typescript
import { loadSecrets } from "@envsec/sdk";
// Load and inject into process.env
await loadSecrets({ context: "myapp.dev", inject: true });
// Or use the client for full control
import { EnvsecClient } from "@envsec/sdk";
const client = await EnvsecClient.create({ context: "myapp.dev" });
const apiKey = await client.get("api.key");
await client.close();
SDKの全API、マルチコンテキスト対応、オプションについては、完全なSDKドキュメントを参照してください。
追加の依存関係は不要です。security CLIツールを介して、組み込みのKeychainを使用します。
libsecret-tools(secret-toolコマンドを提供)が必要です。これは、D-Busを介してGNOME Keyring、KDE Wallet、または任意のSecret Service APIプロバイダーと通信します。```bash
sudo apt install libsecret-tools
sudo dnf install libsecret
sudo pacman -S libsecret
D-Bus セッションが実行中であり、キーリングデーモン(例: `gnome-keyring-daemon`)がアクティブである必要があります。ほとんどのデスクトップ環境では、これが自動的に処理されます。
### Windows
追加の依存関係は不要です。`cmdkey` と PowerShell を介して、組み込みの Windows 資格情報マネージャーを使用します。
## インストール
### Homebrew(macOS / Linux)```bash
brew tap davidnussio/homebrew-tap
brew install envsec
npm install -g envsec
### npx(インストール不要)```bash
npx envsec
mise use -g npm:envsec
## 使用方法
ほとんどのコマンドでは、`--context`(または `-c`)でコンテキストを指定する必要があります。
コンテキストはシークレットをグループ化するための自由形式のラベルです(例: `myapp.dev`、`stripe-api.prod`、`work.staging`)。
### グローバルオプション
以下のオプションはすべてのコマンドで利用できます:
- `--context`, `-c` — コンテキスト名(例: `myapp.dev`、`stripe-api.prod`)。`ENVSEC_CONTEXT` 環境変数も読み取ります
- `--debug`, `-d` — デバッグログを有効化
- `--json` — スクリプト用にJSON形式で出力
- `--db` — SQLiteデータベースファイルへのパス(デフォルト: `~/.envsec/store.sqlite`)。`ENVSEC_DB` 環境変数も読み取ります
### カスタムデータベースパス
デフォルトでは、メタデータは `~/.envsec/store.sqlite` に保存されます。これは `--db` または `ENVSEC_DB` 環境変数で上書きできます:```bash
# Use a project-local database
envsec --db ./local-store.sqlite -c myapp.dev list
# Or via environment variable
export ENVSEC_DB=/shared/team/envsec.sqlite
envsec -c myapp.dev list
--db フラグは ENVSEC_DB よりも優先されます。ユースケースには、プロジェクトごとのデータベース、ネットワークドライブ上のチーム共有データベース、および一時ストレージを使用した CI/CD が含まれます。
シークレットを OS の資格情報ストアに保存します。
<key> — シークレットキー名(例: api.key、db.password)--value、-v — 保存する値(対話型のマスクプロンプトの場合は省略)--expires、-e — 有効期限(例: 30m、2h、7d、4w、3mo、1y)```bashenvsec -c myapp.dev add api.key --value "sk-abc123"
envsec -c myapp.dev add api.key -v "sk-abc123"
envsec -c myapp.dev add api.key
envsec -c myapp.dev add api.key -v "sk-abc123" --expires 30d
envsec -c myapp.dev add api.key -v "sk-abc123" -e 6mo
### シークレットを取得する
OSの資格情報ストアからシークレット値を取得します。
- `<key>` — 取得するシークレットキー名
- `--quiet`、`-q` — 生の値のみを出力します(警告や追加出力なし)
- `--json` — JSON形式で出力します(context、key、value、expires_atを含む)```bash
envsec -c myapp.dev get api.key
# Print only the raw value (no warnings or extra output)
envsec -c myapp.dev get api.key --quiet
envsec -c myapp.dev get api.key -q
OSの資格情報ストアからシークレットを削除します。
<key> — 削除するシークレットキー名(--all を使用する場合は任意)--yes, -y — 確認プロンプトをスキップ--all — コンテキスト内のすべてのシークレットを削除```bash
envsec -c myapp.dev delete api.keyenvsec -c myapp.dev del api.key
### シークレットの名前変更
同じコンテキスト内でシークレットキーの名前を変更します。値と有効期限のメタデータは保持されます。
- `<old-key>` — 現在のシークレットキー名
- `<new-key>` — 新しいシークレットキー名
- `--force`, `-f` — ターゲットが既に存在する場合に上書きします```bash
# Rename a key
envsec -c myapp.dev rename old.key new.key
# Overwrite target if it already exists
envsec -c myapp.dev rename old.key existing.key --force
コンテキスト内のすべてのシークレットキーとメタデータを一覧表示します。
--json — JSON形式で出力```bash
envsec -c myapp.dev list### すべてのコンテキストを一覧表示
シークレット数を含む、利用可能なすべてのコンテキストを一覧表示します。
- `--json` — JSON形式で出力```bash
# Without --context, lists all available contexts with secret counts
envsec list
グロブパターンを使用してシークレットまたはコンテキストを検索します。
<pattern> — 検索するグロブパターン(例: api.*、myapp.*)--json — JSON形式で出力```bashenvsec -c myapp.dev search "api.*"
envsec search "myapp.*"
### コンテキスト間でシークレットを移動する
シークレットをあるコンテキストから別のコンテキストへ移動します。移動後、元のシークレットは削除されます。
- `<pattern>` — 移動するグロブパターンまたは正確なキー(`--all` 使用時は任意)
- `--to`, `-t` — シークレットの移動先コンテキスト
- `--all` — ソースコンテキストからすべてのシークレットを移動
- `--force`, `-f` — ターゲットコンテキスト内の既存シークレットを上書き
- `--yes`, `-y` — 確認プロンプトをスキップ```bash
# Move a single secret
envsec -c myapp.dev move api.token --to myapp.prod
# Move secrets matching a glob pattern
envsec -c myapp.dev move "redis.*" --to myapp.prod -y
# Move all secrets from one context to another
envsec -c myapp.dev move --all --to myapp.prod -y
# Overwrite existing secrets in the target context
envsec -c myapp.dev move "redis.*" --to myapp.prod --force -y
あるコンテキストから別のコンテキストへシークレットをコピーします。コピー元のシークレットはそのまま残ります。
<pattern> — コピーするキーのグロブパターまたは完全一致キー(--all 使用時は任意)--to, -t — シークレットのコピー先コンテキスト--all — コピー元コンテキストからすべてのシークレットをコピー--force, -f — コピー先コンテキストの既存シークレットを上書き--yes, -y — 確認プロンプトをスキップ```bashenvsec -c myapp.dev copy api.token --to myapp.staging
envsec -c myapp.dev copy "redis.*" --to myapp.staging -y
envsec -c myapp.dev copy --all --to myapp.staging -y
envsec -c myapp.dev copy "redis.*" --to myapp.staging --force -y
### シークレットを使用してコマンドを実行する
プレースホルダーによるシークレット値の補間、または環境変数としての注入を行いながらコマンドを実行します。