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 init | devenv.nix + devenv.yaml スキャフォルド |
devenv shell | 環境に入る |
devenv up | 定義プロセス/サービス開始 |
devenv test | 設定テスト/チェック実行 |
devenv update | inputs 更新(新バージョンに 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 | すべての processes と services 開始 |
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.enable | JS/TS など フォーマット |
ruff.enable | Python lint |
nixpkgs-fmt.enable | Nix フォーマット |
shellcheck.enable | shell スクリプト lint |
CI・コンテナ
| 用途 | 実行方法 |
|---|
| CI | devenv test / devenv shell -- <cmd> で同じ環境 |
| コンテナ | devenv container build が OCI イメージ生成 |
| direnv | .envrc で use 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
| 項目 | devenv | Devbox | Nix(生) |
|---|
| 設定 | Nix 言語 | JSON | Nix 言語 |
| 力 | 高(完全 Nix) | 中程度 | 最高 |
| サービス/プロセス | ビルトイン、豊富 | 基本サービス | DIY |
| 学習曲線 | 中程度(Nix) | 穏やか | 急勾配 |
| 最適用途 | 力強い宣言環境 | 簡単再現環境 | 完全制御 |
Nix 構文が障壁の場合、Devbox は同じ基礎を超えた JSON 代替を提供。基礎の場合は Nix 参照。
リソース