mcpField
D
devenv-ecosystem

devenv-ecosystem

github.com/takeokunn開発74143 回インストール今日更新
リポジトリ

devenv-ecosystem について

devenv-ecosystemは、devenvの設定を作成する人向けのスキルで、言語環境、サービス、ツール、プロセス、出力、プロファイルを扱います。devenv固有のパターンに絞り、2.0でのデフォルトのプロセスマネージャー変更と設定上の注意点も説明します。

主な機能

  1. 01言語、サービス、ツールの設定
  2. 02スクリプト、タスク、管理対象プロセスの設定
  3. 03複数シェルとカスタム出力の整理
  4. 04プロファイルによる環境の構成
  5. 05Gitフックと環境変数の設定

活用シーン

  1. 01プロジェクトで一貫した開発環境を構成
  2. 02ローカル開発用のサービスとプロセスを設定
  3. 03CIと開発向けに異なるシェルを定義
  4. 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 ドキュメントを取得する方法を扱います。

コメント