コンテンツにスキップ

環境構築で Homebrew から Devbox に乗り換えた話

これまで Homebrew を使って環境構築をしていた。環境構築が完了するまで 20 分以上かかっていたが、Devboxに乗り換えたら数分で環境構築できるようになった。

Devbox とは

Devbox は、分離された開発環境を構築するためのツール。次のような特徴がある。

  • Docker や Nix Language を使うことなく環境構築可能
  • プロジェクトごとに環境を分離でき、開発マシン全体で使う環境も構築できる
  • 設定ファイルを Git 管理することで共有・バックアップ・同期が容易
  • 豊富なパッケージをサポート
  • サービスのオーケストレーション
  • キャッシュを使った高速な環境構築

Homebrew からの乗り換え

Homebrew をメインの環境構築ツールとして使っていたが、環境構築に時間がかかっていた。環境構築を効率化するために次のツールを検討した。

Homebrew から移行を考えた理由は、環境構築に時間がかかることだった。そのため、ソースコードを一からビルドして環境構築する方法はなるべく避け、pre-built binary をインストールできれば環境構築が速くなると考えて調査を進めた。検討した主な候補と、選択肢から外した理由は次のとおりだ。

候補 選択肢から外した理由
pre-built binary 系ツール 対応するパッケージが少なく、メインとして使うのは難しいと判断
nix パッケージは豊富だが、使いこなすための学習コストが高いと感じた
whalebrew Docker イメージを使ってインストールするため、Mac で Docker を使う一工夫が必要

このような背景と次の理由で Devbox を選択した。

  • キャッシュを使って高速にインストールできる
  • 豊富なパッケージ
  • シンプルで利用にあたっての学習コストが低い
  • OS への依存が少なく、いろいろな環境で使える
  • プロジェクト単位と開発マシン全体のどちらの粒度でも環境を用意できる

Devbox の使い方

次のコマンドで Devbox をインストールする。

curl -fsSL https://get.jetify.com/devbox | bash

開発マシン全体で使うグローバル環境の操作コマンドは次のとおり。devbox global add jqのようにパッケージを追加することで、環境構築できる。

❯ devbox global
Manage global devbox packages

Usage:
  devbox global [command]

Available Commands:
  add         Add a new package to your devbox
  install     Install all packages mentioned in devbox.json
  list        List installed packages
  path        Show path to [global] devbox config
  pull        Pull a config from a file or URL
  push        Push a [global] config. Leave empty to use jetify cloud. Can be a git repo for self storage.
  rm          Remove a package from your devbox
  run         Run a script or command in a shell with access to your packages
  services    Interact with devbox services.
  shellenv    Print shell commands that create a Devbox Environment in the shell
  update      Update packages in your devbox

Flags:
  -h, --help   help for global

Global Flags:
  -q, --quiet   suppresses logs

Use "devbox global [command] --help" for more information about a command.

設定ファイルを GitHub に push することで、他のデバイスでも同じ環境を再現できる。私の設定は次のコマンドで保存・共有できる。

1
2
3
4
5
# push config to GitHub
devbox global push https://github.com/Nishikoh/devbox.git

# pull config from GitHub
devbox global pull https://github.com/Nishikoh/devbox.git

この記事執筆時点で 60 個くらいのパッケージ(実際の devbox.json)をインストールしているが、環境構築にかかる時間は数分程度に短縮された。

プロジェクト個別に環境構築できる点も気に入っており、プロジェクトごとに異なるバージョンのパッケージを使えるほか、何かツールを手軽に試すときにも便利だ。

まとめ

Homebrew を使っていた頃は環境構築に 20 分以上かかっていたが、Devbox に移行した後は数分で完了するようになった。Devbox はシンプルで使いやすく、設定を共有できるうえに、開発マシン全体とプロジェクトごとに環境を分離できる。そのため、気になるツールを試すときにも全体の環境に影響を与えずに済む。