cryptow は gocryptfs と pass を組み合わせ、既存の CLI ツールを暗号化ストレージ越しに安全に利用するための Deno 製ラッパーです。プロファイル定義に従って暗号化ストアをマウントし、必要に応じてアンマウントすることで秘匿情報の平文放置を防ぎます。
- プロファイル単位で対象コマンド・環境変数・マウント設定を管理
gocryptfsのマウント/アンマウントを自動化し、PID ファイルと実マウント状態で管理passからのパスワード取得による認証情報インジェクション~/.local/share/cryptow/log/cryptow.logへの操作ログ保存(XDG 環境変数に追従)
- Deno 1.45 以降(
deno --versionで確認) gocryptfsバイナリ(暗号化ディレクトリのマウントに使用)pass(pass showでシークレットを取得)umountが利用可能な Linux 環境を想定
- リポジトリを取得します。
git clone https://github.com/Hogeyama/crypto-wrapper.git cd cryptow - Deno で実行ファイルをインストールします。
deno install -A --name cryptow src/main.ts
開発中に直接実行する場合は deno task dev を利用できます。
設定ファイルは既定で ~/.config/cryptow/profiles.yaml に配置します(XDG_CONFIG_HOME や CRYPTOW_CONFIG_DIR を利用すると位置を変えられます)。
最小例:
profiles:
codex:
command:
- ~/.local/bin/codex
injectors:
- type: gocryptfs
password_entry: gocryptfs/codex
mount_dir: ~/.codex
- type: env
password_entry: openai_api_key
env: OPENAI_API_KEY各プロファイルは以下の項目を持ちます。
command: 実行するバイナリと引数(文字列または配列)。~や環境変数は自動展開されます。env: 任意の環境変数上書きマップ。injectors: 少なくとも 1 つ以上のインジェクタを定義します。type: gocryptfsは暗号化ストアをマウントします。cipher_dirとmount_dirを省略すると~/.local/share/cryptow/profiles/<name>/cipherと~/.local/share/cryptow/mounts/<name>が既定値になります。password_entryはpass内のエントリ名です。type: envはpassから取得したシークレットを環境変数に注入します。env(またはvariable/name)で変数名を指定します。
working_dir/cwd: コマンド実行時のカレントディレクトリ。
データディレクトリは ~/.local/share/cryptow(または XDG_DATA_HOME/CRYPTOW_DATA_DIR)配下に作成され、マウント用ディレクトリ・PID ファイル・ログを管理します。
- プロファイル一覧とマウント状態を確認:
cryptow list cryptow list --json
- 暗号化ストアをマウントのみ実施:
cryptow mount <profile> [--dry-run]
- 暗号化ストアを初期化:
cryptow init <profile> [--dry-run] [--gen-pass]
- マウント解除:
cryptow unmount <profile> [--dry-run]
- マウントしてコマンドを実行:
実行時には
cryptow run <profile> [--dry-run] [-- <追加引数>]
CRYPTOW_PROFILEが自動的に設定されます。対象プロファイルが既にマウント済みの場合はマウントを再利用し、実行後も維持します。
--dry-run は実行予定のコマンドや環境変数上書きを出力するのみで実際のマウントやコマンド実行は行いません。
初回利用時は cryptow init <profile> で gocryptfs.conf を作成してください。mount / run は未初期化の場合、
cryptow init <profile> を先に実行するよう案内して終了します。
cryptow init --gen-pass を使うと、password_entry に対して pass generate <entry> 32 を実行してから
gocryptfs 初期化を行います。既存の gocryptfs.conf または既存の pass エントリがある場合は安全のためエラー終了します。
bash / zsh / fish 向けの補完スクリプトを生成できます。
# bash (~/.bashrc に追記)
source <(cryptow completions bash)
# zsh (~/.zshrc に追記)
source <(cryptow completions zsh)
# fish (~/.config/fish/config.fish に追記)
source (cryptow completions fish | psub)サブコマンド名・オプションが補完されます。bash ではプロファイル名も補完されます。
注意: zsh ではプロファイル名の補完が効きません(cliffy の zsh 補完生成のバグ: サブコマンドの位置引数に対するカスタム補完が出力されない)。
操作ログは ~/.local/share/cryptow/log/cryptow.log(XDG または CRYPTOW_DATA_DIR に従って解決)に追記されます。トラブルシュート時はこのファイルを確認してください。
- コードフォーマットと静的解析:
deno fmt/deno lint - 型チェック:
deno check src/main.ts - E2E テスト:
deno test -A tests/e2e_*.ts
バグ報告や改善提案は Issue や Pull Request で歓迎します。