5月7日、Domen氏が「devenv 2.1: Nix with zsh, fish, and nushell via libghostty」と題した記事を公開した。
bashの壁を破る:すべてのシェルをファーストクラスで支援
最も注目すべきは、devenv 2.1が複数のシェルをネイティブサポートしたことだ。devenvは、Nixをベースとした開発環境管理ツールで、プロジェクトごとに必要なツールや依存関係を宣言的に管理できる。従来のDocker ComposeやVagrantと異なり、OSレベルでのパッケージ管理により軽量かつ高速な環境構築を実現する。近年、コンテナオーバーヘッドを嫌う開発者やNixエコシステムへの関心の高まりから注目を集めている。
これまでdevenvのdevenv shellコマンドはbashにしか対応しておらず、多くの開発者が日常的に使用するzsh、fish、nushellユーザーは制限を強いられていた。2.1ではzsh、fish、nushellの3つのシェルがフルサポートされる。rcファイル生成、環境変数の差分追跡、リロードフック、プロンプト統合がシェルごとに専用実装され、bashを経由したシム(迂回処理)ではなくネイティブな動作を実現している。
$ devenv shell
$ SHELL=/bin/zsh devenv shell

この改善により、2022年11月から放置されていたイシュー(devenv#36)を含む複数の長期課題が解決された。
Ghosttyの心臓部「libghostty」を採用
技術的に興味深いのは、シェル対応の裏側でlibghosttyが採用されたことだ。libghosttyは高性能ターミナルエミュレーター「Ghostty」のターミナルエンジン部分を独立したライブラリとして切り出したもので、devenvは単一のVTパーサーですべてのシェルを統一的に処理できるようになった。
NixでlibghosttyをビルドするにはGhostty本体への複数のパッチが必要だったが、Ghosttyメンテナーの協力によりアップストリームに取り込まれた。この連携は、Nixエコシステムとターミナルツール開発コミュニティの協力関係を示している。
AIエージェント向け構造化インターフェース
現代の開発において重要な変更点が、AIエージェント向けの構造化されたハンドルの追加だ。GitHub CopilotやChatGPTベースの開発支援ツールが普及する中、従来はAPIの再起動のためにdevenvセッション全体を終了するか、ANSIコードを解析してTUIから情報を取得する必要があった。新たにコマンドライン経由での直接的なプロセス管理が可能になった。
$ devenv processes list
$ devenv processes status
$ devenv processes logs api
$ devenv processes restart api
$ devenv processes stop worker
$ devenv processes start worker
また、CLAUDECODE、OPENCODE_CLIENT、AI_AGENT環境変数を検出すると自動的にクワイエットモードに切り替わり、AIが処理しにくいTUI出力やトークンを消費する冗長な情報を抑制する。この機能は、AIエージェントがdevenvを操作する際のコスト削減とレスポンス向上を狙ったものだ。
direnvなしの自動アクティベーション
従来はcdによるディレクトリ移動時の環境自動切り替えに外部ツール「direnv」が必要だったが、2.1ではdevenv hookが内蔵機能として提供される。
シェル設定ファイルに1行追加するだけで、信頼されたディレクトリへのcd時に環境がアクティベートされ、ディレクトリから出ると元に戻る。.envrcファイルや外部依存は不要で、信頼管理はdevenv allowとdevenv revokeコマンドで行う。この変更により、devenvの導入障壁が大幅に下がった。
OpenTelemetry対応でトレーシングが可能に
運用面では**OpenTelemetryによるOTLPトレースのエクスポート機能**が追加された。Nixの評価、derivationのビルド、タスク実行、管理プロセスがすべてスパンとして記録され、devenv.activity.kind、devenv.derivation_path、devenv.outcomeなどの属性が付与される。
$ devenv --trace-to otlp-grpc shell
$ devenv --trace-to otlp-http-protobuf:http://localhost:4318 shell
3つのOTLP形式(otlp-grpc、otlp-http-protobuf、otlp-http-json)をサポートし、プロセス境界を越えてトレースコンテキストが伝播する。これにより、複雑な開発環境での問題特定が容易になる。
その他の改善点
2.1では他にも多数の改善が含まれる。最新版Nixの採用によりマルチスレッドでのtarball展開や評価パフォーマンスが向上。devenv.yamlでのrequire_version設定により最小バージョンの強制が可能。ROCmサポートによりAMD GPU環境での機械学習開発に対応、完全なスタックトレース表示、TUIでのCtrl+Xによる個別プロセス停止、ポート割り当ての修正など、数十の機能追加とバグ修正が行われた。
なお、devenv tasks runがデフォルトで依存関係も実行するbeforeモードに変更された点は破壊的変更として注意が必要だ。
詳細はdevenv 2.1: Nix with zsh, fish, and nushell via libghosttyを参照していただきたい。