開発用の分離シェルを簡単に作成できるJetpack.io製のCLIツール「Devbox」を試してみた

2023.03.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!DA(データアナリティクス)事業本部 サービスソリューション部の大高です。

私は普段開発環境を分離する方法としてコンテナを利用しているのですが、最近コンテナを起動させるのがちょっと面倒になってきたので、以前から気になっていた「Devbox」を試してみました。

なお、コンテナ利用が辛くなってきた理由としては以下がありました。

  • VM環境のメンテナンスが手間
    • CPUやメモリ、ハードディスクの割り当ての調整が面倒になってきた
  • コンテナをビルドし直すのに時間が掛かる
    • たまにコンテナの設定を変えたくなる場合があるが、その際のビルドに時間がかかる
  • Docker Daemonがたまに落ちている
    • 原因が特定できていないが、Docker Daemonがたまに落ちていて立ち上げ直すのが手間

Devboxとは?

Devboxは、分離された開発環境(シェル環境)を提供してくれるCLIツールです。

DockerなどのようにVMによる仮想レイヤーを利用しないため、軽量に動作させることができます。イメージとしてはpoetrynvmが近いかもしれません。ただ、Devboxは特定言語に限らずに、様々なツールのパッケージを利用できる点が特徴です。

devbox.jsonというファイルに定義されたパッケージ情報をもとに、Devbox用に分離されたシェル環境に入って開発を行うことができます。

なお、このツールはJetpack.io製のツールで、Microsoft製のMicrosoft Dev Boxとは別物ですのでご注意ください。

インストール

では早速インストールしていきます。インストールは以下のドキュメントを参考に行います。

私はMacOSを利用しているので以下のコマンドでセットアップを行いました。

% curl -fsSL https://get.jetpack.io/devbox | bash

Devbox環境の初期セットアップ

インストールを行ったら、Devbox環境をセットアップしていきます。

フォルダの作成と初期化

まずは適当に空のフォルダを作成して、そのフォルダ内部で以下のコマンドを実行します。

% devbox init

コマンドを実行するとdevbox.jsonというファイルがフォルダ内に作成されます。このファイルは以降のパッケージの追加時などにパッケージ情報を保存するために利用されます。

パッケージのインストール

次に、このフォルダのDevbox環境に追加したいパッケージをインストールしていきます。

今回わたしはNode v16をインストールしたかったので、以下のコマンドで追加しました。

% devbox add nodejs-16_x

このときに指定するパッケージ名は、ドキュメントにも記載のとおりパッケージマネージャーである「Nix」で利用されるパッケージ名を指定します。

例えば、以下のサイトでpythonなどと検索するとpython311などが見つかり、Python3.11.1をインストールするためにはこのパッケージ名を利用すれば良いことが分かります。

Devboxの利用方法

利用方法は簡単でコマンドラインで以下を打つだけです。以下のように表示されてシェル環境に入ることができます。

% devbox shell
Ensuring packages are installed.
Starting a devbox shell...
(devbox)

このシェル環境では、追加済みのパッケージが設定された環境になっており、私の環境の例では以下のようにNode v16が利用できることが分かります。

% node --version
v16.19.0

VS Codeを利用しているので、いちいちシェルを切り替えるのが面倒なのですが?

私もそう思いました。ですが、VS Codeを利用しているユーザー向けに以下の拡張機能がちゃんと用意されていました。

こちらを導入すると、devbox.jsonが配置されているプロジェクト(フォルダ)をVS Codeで開くと、自動的にdevbox shellを実行してDevboxのシェルに切り替えてくれます。

まとめ

以上、開発用の分離シェルを簡単に作成できるJetpack.io製のCLIツール「Devbox」を試してみました。

devboxの強みはNixを利用した多くのパッケージを利用できる点だと思います。公式サイトには8万を超えるパッケージを利用できる旨が記載してあり、AWS CLI v2なども確認できました。環境分離したいものはNixのパッケージとして用意されていれば利用できるので、うまく活用して分離できると良さそうですね。

どなたかのお役に立てば幸いです。それでは!