Back to Blog
Tech

Devbox で実現する「使い捨て可能」で「ポータブル」な開発環境

Devbox で実現する「使い捨て可能」で「ポータブル」な開発環境

新しい技術を試す際やプロジェクトごとに異なるツールのバージョンが必要な際、ローカル環境が汚染されることを懸念したことはないでしょうか。 今回は、Nix の堅牢さを手軽に享受できる Devbox を紹介します。

また、私が作成した構築用リポジトリで実践している、より踏み込んだカスタマイズ手法についても解説します。

Devbox とは

Devbox は、パッケージマネージャである Nix を利用して、隔離された開発環境(Dev Environments)を作成するためのコマンドラインツールです。

最大の特徴は、**「プロジェクトごとに独立した環境を、JSON 形式の定義ファイル一つで構築できる」**点にあります。バックエンドで動作する Nix は、依存関係を完全に分離して管理するため、ホスト OS に一切の影響を与えずに、特定のバージョンのツール群を即座に揃えることができます。

詳細な設定方法については、公式サイトのConfiguration Referenceも併せて参照してください。

導入の手順

Devbox の導入は非常にシンプルです。以下の手順で、すぐにクリーンな環境を手に入れることができます。

1. インストール

まずは、公式サイトの指示に従って Devbox をインストールします。

# macOS / Linux
curl -fsSL https://get.jetpack.io/devbox | bash

2. プロジェクトの初期化

新しいプロジェクトで Devbox を使い始めるには、init コマンドを実行します。

devbox init

これにより、カレントディレクトリに devbox.json が生成されます。

3. パッケージの追加と環境の起動

必要なツール(例: Python 3.11)を追加し、シェルを起動します。

# パッケージの追加
devbox add python@3.11

# 環境の起動
devbox shell

これだけで、Python 3.11 がインストールされた隔離環境に入ることができます。

開発を支える独自の工夫

単にツールをインストールするだけでなく、より便利に、そして「ポータブル」にするために以下の工夫を取り入れています。

1. 設定ファイルの「カプセル化」

通常、エディタやシェルの設定ファイルはホームディレクトリ(~/.config 等)に配置されます。しかし、これでは環境の持ち運びが困難です。

このリポジトリでは、devbox.json 内で環境変数を制御し、設定の参照先をプロジェクト内のディレクトリへ向けています。

{
  "env": {
    "XDG_CONFIG_HOME": "$PWD/.config",
    "MY_DEV_ENV": "true"
  }
}

これにより、リポジトリをクローンするだけで、設定済みの Neovim やシェル環境がその場で即座に立ち上がります。

2. 並列環境の構築と .env の活用

Devbox は $PWD(カレントディレクトリ)の .env ファイルを自動的に読み込ませることができます。

これを利用することで、**「同じ構成のリポジトリを複数クローンし、それぞれ異なる設定で並列に動かす」**ことが容易になります。 プロジェクト A ではこの API キー、プロジェクト B では別の環境変数、といった使い分けが、環境を切り替えるだけで完結します。

3. 初回起動時の自動 Git 設定

複数の環境を使い分ける際、意外と面倒なのが Git のユーザー設定です。 init_hook を活用することで、環境の初回起動時にのみ特定の Git 設定を適用するといった制御が可能です。

# init_hook 内での記述例
if [ ! -f .git/config_done ]; then
  git config --local user.email "project-specific@example.com"
  touch .git/config_done
fi

これにより、クローンした先ごとに異なる Git アイデンティティを自動で使い分けることができます。

4. init_hook によるシェルの動的セットアップ

devbox shell が起動するたびに実行される init_hook を使い、エイリアスや補完設定を動的にロードしています。

"shell": {
  "init_hook": [
    "source .config/bash/bash_setup.sh"
  ]
}

「ツールは入っているが使いにくい」という隔離環境特有のストレスを解消し、常に自分の「いつもの環境」で作業を開始できます。

まとめ:環境は「作る」から「クローンする」へ

Devbox を活用することで、開発環境は「苦労して構築するもの」から「必要な時にクローンし、不要になればディレクトリごと削除するもの」へと変わります。

バックエンドの Nix が提供する強力な再現性と、Devbox の手軽なインターフェースを組み合わせることで、より本質的な開発作業に集中できるはずです。 興味のある方は、ぜひ一度触れてみてください。