アップデート一覧に戻る
New releaseSep 3, 2026

envsec v1.0.0-rc.2

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

共有

envsec

ネイティブOSの資格情報ストアを使用した安全な環境シークレット管理。

デモ

Image

機能

  • シークレットをOSネイティブの資格情報ストアに保存(プレーンテキストファイルではない)
  • クロスプラットフォーム:macOS、Linux、Windows
  • コンテキストごとにシークレットを整理(例:myapp.dev、stripe-api.prod、work.staging)
  • SQLiteによるシークレットメタデータ(キー名、タイムスタンプ)の追跡
  • globパターンによるコンテキストとシークレットの検索
  • シークレット補間を使用したコマンド実行
  • cmdによるコマンドの保存と再実行(検索、一覧表示、実行、削除)
  • シークレットの.envファイルへのエクスポート(auditによる生成追跡付き)
  • シークレットのシェル環境変数としてのエクスポート(eval $(envsec env))
  • .envファイルからのシークレット読み込み(競合検出付き)
  • チームメンバー向けにGPGで暗号化したシークレットの共有
  • コマンドを覚えることなくシークレットを管理できるインタラクティブターミナルUI(envsec tui)

パッケージ

これは以下のパッケージを含むモノレポです:

パッケージ説明npm
envsecシークレット管理用CLIツールnpm
@envsec/sdkシークレットをプログラムで読み込むためのNode.js / Bun SDKnpm
@envsec/coreコアエンジン — OS資格情報ストアアダプター + メタデータDBnpm
@envsec/tuiシークレット管理用インタラクティブターミナルUInpm

SDKクイックスタート

Node.jsまたはBunからプログラムでシークレットにアクセスするには、@envsec/sdkを使用します:

npm install @envsec/sdk
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();

すべてのAPI、マルチコンテキストサポート、およびオプションについては、完全なSDKドキュメントを参照してください。

要件

  • Node.js >= 22

macOS

追加の依存関係はありません。security CLIツールを介して組み込みのKeychainを使用します。

Linux

libsecret-tools(secret-toolコマンドを提供)が必要です。これはD-Busを介してGNOME Keyring、KDE Wallet、または任意のSecret Service APIプロバイダーと通信します。

# Debian / Ubuntu
sudo apt install libsecret-tools

# Fedora
sudo dnf install libsecret

# Arch
sudo pacman -S libsecret

実行中の D-Bus セッションとキーリングデーモン(例: gnome-keyring-daemon)がアクティブである必要があります。ほとんどのデスクトップ環境では自動的に処理されます。

Windows

追加の依存関係はありません。cmdkey と PowerShell を介して、組み込みの Windows 資格情報マネージャーを使用します。

インストール

Homebrew (macOS / Linux)

brew tap davidnussio/homebrew-tap
brew install envsec

npm

npm install -g envsec

npx(インストール不要)

npx envsec

mise

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 環境変数で上書きできます:

# 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)
# Store a value inline
envsec -c myapp.dev add api.key --value "sk-abc123"

# Or use the short alias
envsec -c myapp.dev add api.key -v "sk-abc123"

# Omit --value for an interactive masked prompt
envsec -c myapp.dev add api.key

# Set an expiry duration with --expires (-e)
envsec -c myapp.dev add api.key -v "sk-abc123" --expires 30d

# Supported duration units: m (minutes), h (hours), d (days), w (weeks), mo (months), y (years)
# Combinable: 1y6mo, 2w3d, 1d12h
envsec -c myapp.dev add api.key -v "sk-abc123" -e 6mo

シークレットの取得

OS の資格情報ストアからシークレット値を取得します。

  • <key> — 取得するシークレットキー名
  • --quiet, -q — 生の値のみを出力(警告や余分な出力なし)
  • --json — JSON 形式で出力(context、key、value、expires_at を含む)
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 — コンテキスト内のすべてのシークレットを削除
envsec -c myapp.dev delete api.key

# or use the alias
envsec -c myapp.dev del api.key

シークレットの名前変更

同じコンテキスト内でシークレットキーの名前を変更します。値と有効期限のメタデータは保持されます。

  • <old-key> — 現在のシークレットキー名
  • <new-key> — 新しいシークレットキー名
  • --force, -f — ターゲットが既に存在する場合は上書きする
# 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形式で出力
envsec -c myapp.dev list

すべてのコンテキストを一覧表示

シークレット数とともに利用可能なすべてのコンテキストを一覧表示します。

  • --json — JSON形式で出力
# Without --context, lists all available contexts with secret counts
envsec list

シークレットの検索

glob パターンを使用してシークレットまたはコンテキストを検索します。

  • <pattern> — 検索する glob パターン(例: api.*、myapp.*)
  • --json — JSON 形式で出力
# Search secrets within a context
envsec -c myapp.dev search "api.*"

# Search contexts by pattern (without --context)
envsec search "myapp.*"

コンテキスト間でシークレットを移動

シークレットをあるコンテキストから別のコンテキストへ移動します。移動後、移動元のシークレットは削除されます。

  • <pattern> — 移動するシークレットの glob パターンまたは完全一致キー(--all 使用時は省略可能)
  • --to, -t — シークレットの移動先コンテキスト
  • --all — 移動元コンテキストからすべてのシークレットを移動
  • --force, -f — 移動先コンテキストの既存シークレットを上書き
  • --yes, -y — 確認プロンプトをスキップ
# 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> — コピーする Glob パターンまたは完全一致のキー(--all を使用する場合は省略可能)
  • --to, -t — シークレットのコピー先コンテキスト
  • --all — コピー元コンテキストからすべてのシークレットをコピー
  • --force, -f — コピー先コンテキストの既存シークレットを上書き
  • --yes, -y — 確認プロンプトをスキップ
# Copy a single secret
envsec -c myapp.dev copy api.token --to myapp.staging

# Copy secrets matching a glob pattern
envsec -c myapp.dev copy "redis.*" --to myapp.staging -y

# Copy all secrets from one context to another
envsec -c myapp.dev copy --all --to myapp.staging -y

# Overwrite existing secrets in the target context
envsec -c myapp.dev copy "redis.*" --to myapp.staging --force -y

シークレットを使用してコマンドを実行する

プレースホルダーを介してシークレット値を補間するか、環境変数として注入してコマンドを実行します。

  • <command> — 実行するコマンド。シークレットの補間には {key} プレースホルダーを使用します
  • --inject, -i — すべてのコンテキストシークレットを環境変数として注入します(KEY.NAME → KEY_NAME)
  • --save, -s — このコマンドを後で使用するために保存します
  • --name, -n — 保存されたコマンドの名前(--save と共に省略した場合は対話的に入力が求められます)

カテゴリ