コンテンツにスキップ

devenv - 宣言的 Nix 開発環境 チートシート

devenv - 宣言的 Nix 開発環境 チートシート

devenv(Cachix)は 高速・宣言的・再現可能・構成可能開発環境を Nix で構築。Nix を JSON の後ろに隠さず、Nix 言語を設定に使用するため より力強く柔軟:言語、パッケージ、サービス(データベース・キャッシュ)、長実行プロセス、スクリプト、環境変数、pre-commit/git hooks — すべて 1 つ devenv.nix で定義。完全 Nix 能力を備えたバッテリー付属開発者向けレイヤーが選択肢。

インストール

方法コマンド
要件Nix(flakes 有効)
インストールnix profile install nixpkgs#devenv(または Cachix 手順)
Cachixバイナリキャッシング高速化推奨
確認devenv version

始める

コマンド説明
devenv initdevenv.nix + devenv.yaml スキャフォルド
devenv shell環境に入る
devenv up定義プロセス/サービス開始
devenv test設定テスト/チェック実行
devenv updateinputs 更新(新バージョンに pin)
devenv gc古い環境ガベージコレクション

設定(devenv.nix

{ pkgs, ... }:
{
  # シェルで利用可能なパッケージ
  packages = [ pkgs.git pkgs.jq ];

  # 言語(管理ツールチェーン)
  languages.javascript.enable = true;
  languages.python = {
    enable = true;
    version = "3.12";
  };

  # サービス
  services.postgres.enable = true;
  services.redis.enable = true;

  # Env vars
  env.APP_ENV = "development";

  # スクリプト
  scripts.hello.exec = "echo hello from devenv";

  # 長実行プロセス
  processes.web.exec = "npm run dev";

  # Git hooks(pre-commit)
  pre-commit.hooks = {
    prettier.enable = true;
    ruff.enable = true;
  };
}

キー ビルディングブロック

ブロック目的
packagesシェル内の任意 Nix パッケージ
languages.*第一級言語サポート(node、python、go、rust など)
services.*データベース/キャッシュ(postgres、redis、mysql、mongodb など)
processes.*devenv up で管理される長実行コマンド
scripts.*シェル内で実行可能な名前付きコマンド
env.*環境変数
pre-commit.hooks.*Git pre-commit 統合

サービス・プロセス

コマンド説明
devenv upすべての processesservices 開始
devenv up -dバックグラウンドで開始
devenv processes downプロセス停止
services.postgres.enable = true;管理 Postgres 追加
services.postgres.initialDatabases開始時にデータベース初期化

Git Hooks(pre-commit)

devenv は pre-commit hooks を宣言的に統合 — hook を有効化するとコミット時に実行。

Hook 例実行内容
prettier.enableJS/TS など フォーマット
ruff.enablePython lint
nixpkgs-fmt.enableNix フォーマット
shellcheck.enableshell スクリプト lint

CI・コンテナ

用途実行方法
CIdevenv test / devenv shell -- <cmd> で同じ環境
コンテナdevenv container build が OCI イメージ生成
direnv.envrcuse devenv で自動 cd
Flakes広い Nix flake 生態系と構成可能

一般的なワークフロー

# 再現可能フルスタック環境:言語 + データベース + プロセス
devenv init
# devenv.nix 編集:python 有効化、services.postgres、processes.web
devenv shell        # ツール利用可能
devenv up           # postgres + web プロセス実行中

# 同じ定義からコンテナビルド
devenv container build web

devenv vs Devbox vs 生 Nix

項目devenvDevboxNix(生)
設定Nix 言語JSONNix 言語
高(完全 Nix)中程度最高
サービス/プロセスビルトイン、豊富基本サービスDIY
学習曲線中程度(Nix)穏やか急勾配
最適用途力強い宣言環境簡単再現環境完全制御

Nix 構文が障壁の場合、Devbox は同じ基礎を超えた JSON 代替を提供。基礎の場合は Nix 参照。

リソース