exportコマンドを使用して環境変数を直接現在のシェルに設定することは、Goのプログラムが子プロセスとして実行され、その子プロセス内で設定された環境変数が親シェルに影響を与えないという技術的制限によって困難でした。
-
シェルスクリプトの出力と評価(従来の方法)
envault export --output-script-onlyコマンドを実装し、環境変数を設定するシェルスクリプトを出力- ユーザーが
eval $(envault export --output-script-only)またはsource <(envault export --output-script-only)を使用して実行する必要がある
-
新しいbashセッションの起動
envault export --new-shellコマンドを実装し、環境変数を設定した新しいbashセッションを起動- 元のシェルには影響を与えないが、新しいシェル内ですべての環境変数が利用可能になる
-
コマンド実行オプション
envault export -- command args形式で、環境変数を設定してから指定されたコマンドを実行する機能を実装- 例:
envault export -- env | grep TEST_VAR - 例:
envault export -- node app.js
export -sおよびexport selectコマンドで、適用する環境変数をTUIで選択できる機能を実装unset -sコマンドで、アンセットする環境変数を選択できる機能も実装- BubbleTea ライブラリを使用した対話的なインターフェースの提供
- github.com/spf13/cobra ライブラリを使用したコマンドライン解析への移行
- 階層化されたコマンド構造の実装(export selectなどのサブコマンド)
- ヘルプメッセージの自動生成と詳細化
- ショートフラグと長形式フラグの両方のサポート
dumpコマンドによる暗号化されたファイルの内容表示- 対話式およびstdinからのパスワード入力対応
- 環境変数のコメント保持と表示機能
-
ユーザー体験の向上
- シェルのラッパースクリプトの提供
- TUIインターフェースの機能強化(検索機能など)
-
追加機能
- パスワード強度チェック機能の追加
- 複数の.envファイルの管理機能
- シェル補完スクリプトの生成
- GUIインターフェースの提供
-
プラットフォーム対応拡充
- Windows環境でのサポート強化
- Docker環境での使用簡略化
Goのようなプログラミング言語で作成されたプログラムは、親シェルの環境変数を直接変更することができないという根本的な制約があります。これはOSのセキュリティモデルによるものであり、子プロセスは親プロセスの環境を変更できないようになっています。
この制約を回避するために、以下の方法を実装しました:
- シェルスクリプトを生成して
evalまたはsourceコマンドで実行する方法 - 新しいbashセッションを起動する方法
- 環境変数を設定してから指定されたコマンドを実行する方法
- より多くのユースケースに対応するための機能拡張
- クロスプラットフォーム対応の強化(Windows対応など)
- CI/CD環境での使いやすさ向上