devenv-ecosystem について
devenv-ecosystemは、devenvの設定を作成する人向けのスキルで、言語環境、サービス、ツール、プロセス、出力、プロファイルを扱います。devenv固有のパターンに絞り、2.0でのデフォルトのプロセスマネージャー変更と設定上の注意点も説明します。
主な機能
- 01言語、サービス、ツールの設定
- 02スクリプト、タスク、管理対象プロセスの設定
- 03複数シェルとカスタム出力の整理
- 04プロファイルによる環境の構成
- 05Gitフックと環境変数の設定
活用シーン
- 01プロジェクトで一貫した開発環境を構成
- 02ローカル開発用のサービスとプロセスを設定
- 03CIと開発向けに異なるシェルを定義
- 04プロファイルによる環境差異の調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ takeokunn/ nixos-configuration --skill devenv-ecosystemインストール後、Claude Code で/devenv-ecosystemを入力して読み込まれたか確認します。
詳細
devenv の設定パターン — 言語のセットアップ、サービス、ツール(git-hooks、スクリプト、プロセス)、出力、プロファイルについて説明します。Nix 言語の構文、flake の構造、一般的な NixOS モジュールのパターンについては、nix-ecosystem を参照してください。このスキルの対象は devenv 固有の内容のみです。
devenv 2.0
2026 年 3 月にリリースされました。既存の設定に直接影響する変更が 2 つあります。
-
ネイティブプロセスマネージャーがデフォルトになり、process-compose に取って代わりました。ヘルスチェック、
depends_on、準備完了プローブなど、process-compose の動作を前提とする設定では、process.manager.implementation = "process-compose";を明示的に設定しない限り、エラーにならずネイティブマネージャーが使われます。エラーは発生せず、devenv upの実行時の動作が変わるだけです。process-compose を使い続けるには、次のようにします。process.manager.implementation = "process-compose"; processes.api = { exec = "cargo run"; process-compose.readiness_probe.http_get = { host = "localhost"; port = 8080; path = "/health"; }; }; -
devenv 0.x は非推奨になりました。devenv 3 でサポートが終了します。
2.0 のその他の変更は、設定を記述する側には見た目上のものです。すべてのコマンドでライブ TUI が表示されること、ネイティブシェルでバックグラウンド再ビルドが行われること(ファイルを保存して Ctrl+Alt+R を押すと、シェルを終了せずに新しい環境が適用されます)、起動した nix サブプロセスに代わる C FFI バックエンド、属性ごとのインクリメンタルな評価キャッシュ、リポジトリをまたいだ出力参照が含まれます。
devenv と flakes の比較
手作業でサービスの導出定義を書くより簡単な services.*、git-hooks の統合、プロセス監視、または languages.* によるバージョン管理が必要な場合は、純粋な flakes より devenv を使ってください。純粋な導出定義や NixOS のシステム設定には flakes を直接使ってください。その場合、devenv はオーバーヘッドになります。
複数のシェルとカスタム出力(2.0 以降)
devenv.shells.<name> を使うと、1 つのファイルで複数のシェル設定を定義できます。それぞれはデフォルト設定へのオーバーレイではなく、完全な devenv モジュールです。
{ pkgs, ... }:
{
devenv.shells.default = {
languages.python.enable = true;
packages = [ pkgs.git ];
};
devenv.shells.ci = {
languages.python.enable = true;
env.CI = "true";
};
}
devenv.outputs を使うと、モジュール内から任意の flake 出力(パッケージ、チェック)を公開できます。
{ pkgs, config, ... }:
{
devenv.outputs = {
packages.my-app = config.languages.rust.import ./. {};
checks.lint = pkgs.runCommand "lint" {} ''
${pkgs.clippy}/bin/cargo-clippy
touch $out
'';
};
}
言語モジュールは、シェルで使うツールチェーンと同じものを使ってアプリをパッケージ化するための import ビルダーを公開します。手作業で stdenv.mkDerivation を書く代わりに、config.languages.rust.import ./rust-app {} のように指定できます。
プロファイル(1.9 以降)
混同しやすい、相互に異なる 3 つの仕組みがあります。
- 値のオーバーライド —
profiles."python-3.12".config = { languages.python.version = "3.12"; };と設定し、devenv shell --profile python-3.12で選択します。 - 組み合わせ可能なモジュール —
profiles.backend.module = { ... }、profiles.frontend.module = { ... }を設定し、profiles.fullstack.extends = [ "backend" "frontend" ];で組み合わせます。 - 環境に応じた自動選択 —
profiles.hostname."ci-server".moduleとprofiles.user."developer".moduleは、マシンのホスト名や実行ユーザーに基づいて適用されるため、明示的な--profileフラグは不要です。これは、選択が通知されない仕組みです。シェルはコマンドラインの指定ではなく、実行場所や実行者によってプロファイルを読み込みます。「自分のマシンでは動く」という設定のずれをデバッグする前に、確認しておくとよいでしょう。
git-hooks
git-hooks.hooks は、コミット前のフックを設定します(フォーマッター:nixfmt-rfc-style、prettier、black、rustfmt、ormolu、gofmt。リンター:eslint、clippy、shellcheck、yamllint、actionlint、hadolint、markdownlint。セキュリティ/衛生チェック:detect-private-keys、check-merge-conflicts、check-case-conflicts、editorconfig-checker。汎用フォーマッターラッパーとしての treefmt)。カスタムフックでは、entry にシェルコマンドを、files に正規表現を指定します。
git-hooks.hooks.my-custom-hook = {
enable = true;
entry = "${pkgs.bash}/bin/bash -c 'echo Running custom hook'";
files = "\\.nix$";
pass_filenames = true;
};
スクリプト、タスク、プロセス
scripts.<name>.exec を使うと、シェル内の $PATH にコマンドを追加できます。tasks.<name> は before/after による依存関係の順序付けを行い、シェルへの入場時に実行する設定(before = [ "devenv:enterShell" ];)にも対応しています。このように設定すると、タスクは devenv shell の実行ごとに自動で実行されます。ほかは静的に見える設定を読む際に見落としやすい点です。
processes.<name>.exec は、アクティブなプロセスマネージャー(2.0 では上記のとおりネイティブがデフォルト)によって管理されます。enterShell はシェルへの入場ごとに実行されるため、処理を高速にし、オフラインで動作できるようにしてください。ネットワーク依存のセットアップや時間のかかる処理は、明示的なトリガーを指定した task に移してください。
環境とシークレット
dotenv.enable = true;(デフォルト以外のファイルを指定するには dotenv.filename を使用)を設定すると、バージョン管理の対象外にしておくべき .env 形式のファイルが読み込まれます。実際のシークレットを env 属性に直接記述しないでください。値は Nix ストアに保存され、ローカルマシン上で誰でも読み取り可能になります。
Context7
ライブラリ ID /cachix/devenv(信頼スコア 9.7、約 1354 個のスニペット)を使用してください。languages.*/services.* の現在のオプション形式、利用可能な git-hooks、devenv 2.0 の移行ガイドを確認できます。このファイルの更新よりも、オプションの構成はマイナーバージョン間で頻繁に変更されるためです。
関連項目
- nix-ecosystem — Nix 言語の構文、flake の構造と入力、NixOS モジュールの一般的なパターン、
lib.*関数を扱います。devenv はこれらすべてを基盤としていますが、改めて説明はしません。 - serena-usage — devenv の構成をナビゲートするためのシンボル操作を扱います。
- context7-usage — Context7 MCP を使って最新の devenv ドキュメントを取得する方法を扱います。