devbox環境でnode.js入れてみた
ご挨拶・背景
こんにちは!
現在、SHIFTの開発支援プロダクト推進部でTB Projectに参加しております、yasudaです。
今回は、2022年のクリスマス前にver0.2.0が出た、devboxという開発用の独立したシェルを作れるコマンドラインツールを触っていこうと考えております。
過去記事:
想定している対象読者
devboxが気になる人
Nixが気になる人
devboxとは?
公式のドキュメント曰く、Instantでeasyなpredictible 開発環境とのことです。実態としては、jetpack.ioというバックエンド開発ツールを作っている2020年設立の会社が、NixOSのパッケージマネジャーであるNixのwrapperとして作られています。
Virtual Boxなどの仮想環境を用意せずとも、Dockerのような環境構築ができるのが魅力ですね。
参照記事:
devboxを使うメリットとは?
5つあります。
プロジェクトで必要なツールのリストをdevbox.jsonファイルで宣言して、devbox shellで実行できるので、プロジェクトメンバー全員が同じ環境で作業できる。
開発環境がノートPC内の他のものから隔離されているので、PCが汚れない。
仮想化レイヤーを追加せず、PC上で孤立した環境を作るため、ファイルシステムやコマンドの処理速度が低下しない。
プロジェクトごとに隔離された環境なので、複数バージョンの対立などが起きない。
vscodeのdevcontainer.jsonやDockerfileを出力できる。
devboxをインストールするには?
curl -fsSL https://get.jetpack.io/devbox | bash
でインストールできます。
ちなみにcurlのoptionの-fsSLは、 サーバーへのリクエストに失敗してエラーが返ってきても標準出力に何も表示させない -f
進捗は表示されないが、エラーは表示されるの -sS
リダイレクト設定されているURLにアクセスした時に、リダイレクト先のURLに対してもリクエストを発行する -L
の組み合わせになっております。
参照記事:
インストールすると、下記のようにインストール場所の確認をされるので、良ければYと答えます。
Devbox 📦 by jetpack.io
Instant and predictable development environments and containers.
This script downloads and installs the latest devbox binary.
Confirm Installation Details
Location: /usr/local/bin/devbox
Download URL: <https://releases.jetpack.io/devbox>
? Install devbox to /usr/local/bin (requires sudo)? [Y/n]
Downloading and Installing
✓ Downloading devbox binary... [DONE]
→ Installing in /usr/local/bin/devbox (requires sudo)...
✓ Installing in /usr/local/bin/devbox... [DONE]
✓ Successfully installed devbox 🚀
インストールが完了しました。
devboxと入力すると下記が出ます。
$devbox
Instant, easy, predictable development environments
Usage:
devbox [flags]
devbox [command]
Available Commands:
add Add a new package to your devbox
completion Generate the autocompletion script for the specified shell
generate
help Help about any command
info Display package info
init Initialize a directory as a devbox project
rm Remove a package from your devbox
run Starts a new devbox shell and runs the target script
services Interact with devbox services
shell Start a new shell or run a command with access to your packages
version Print version information
Flags:
-h, --help help for devbox
Use "devbox [command] --help" for more information about a command.
$devbox version
0.2.0
devboxにnode.jsをインストールしてみる
まずは任意の名前で空のフォルダを作成
$ devbox init でdevbox.jsonファイルを作成
初期設定は下記のようになっています。
{
"packages": [],
"shell": {
"init_hook": null
},
"nixpkgs": {
"commit": "52e3e80afff4b16ccb7c52e9f0f5220552f03d04"
}
}
3.$ devbox add nodejs でNix Packagesからnode.jsをインストール
ちなみにこの時、nodejsをnode.jsと書くとパッケージが見つからないので注意。
また、ここで、Nixが手元にインストールされていないと、自動的にインストールされる流れになります。
そして、nodejsがインストール成功すると下記のように表示が出ます。
Installing nix packages. This may take a while... done.
nodejs (nodejs-18.12.1) is now installed.
4.$ devbox add yarn でyarnもインストールする
同じく下記の表示が出ます。
Installing nix packages. This may take a while... done.
yarn (yarn-1.22.19) is now installed.
5.$ devbox shell でdevbox環境の新しいシェルを起動します。
この段階で、実際に必要なパッケージをnix/storeにfetchしてシェルを起動してくれます。
Installing nix packages. This may take a while... done.
these 25 paths will be fetched (80.56 MiB download, 500.09 MiB unpacked):
/nix/store/039c4vhb9s848cqyh9gwixxc6a31rm5v-libSystem-11.0.0
/nix/store/17590a5bp47rym08i2h70a2ji1z18q6w-expand-response-params
/nix/store/33yb640sh8ac5ky9ak7fjnrb3mw559q1-cctools-binutils-darwin-wrapper-973.0.1
/nix/store/3f0g6j019vy5njy80ya5g6k8843vyzbw-compiler-rt-libc-11.1.0
/nix/store/3ns8fjjfv67h30g341757j60bpx8fing-llvm-11.1.0
/nix/store/4w2rv6s96fwsb4qyw8b9w394010gxriz-stdenv-darwin
/nix/store/5ni656fm1mig17801hs14f9wdqbih4ri-libtapi-1100.0.11
/nix/store/9m49xk9l6dn16b515clqbzv3fyj27pxr-openssl-3.0.7
/nix/store/c85j441hrgg8b63k9iq0m6q5gkqpsvmz-libobjc-11.0.0
/nix/store/d8hcl0rdr85qjhk5hwwpk5mmz3yf93cc-bash-interactive-5.1-p16
/nix/store/g8b81w9kpb82gm7702ca692mp5flm7pf-apple-framework-CoreFoundation-11.0.0
/nix/store/gqvp3m95nbnzlinvbhdwqwfh6bh1bwj1-sigtool-0.1.3
/nix/store/i92bgxw5ns8zbv8yk3b0anvip0dlak3g-binutils-2.39
/nix/store/jmxf2kh5f96s2gw8kvqlq3vckpx7lh2k-cctools-port-973.0.1
/nix/store/kn8ahinf4kbh9zwnw44a0hhps6ia1swy-clang-11.1.0
/nix/store/lqiqj6s5jx196bpx0mr53d232b57y768-clang-wrapper-11.1.0
/nix/store/nlrnyahaj2aw7kgzcslmkf65g10d6syr-libxml2-2.10.1
/nix/store/nm5f2lmgn13058mim1m6n7gk7q6cxm8j-ncurses-6.3-p20220507
/nix/store/qk7lhszzq0c96vysk4y3z2rapwsjnsyd-readline-8.1p2
/nix/store/ra4asalsj40viq45x408v49y748anrg4-clang-11.1.0-lib
/nix/store/sgbfgh7abygpwycn9vmd9f0idfnwcs32-signing-utils
/nix/store/x0b1kda81p0w0qqp7abvsprcf7s7qp64-cctools-binutils-darwin-973.0.1
/nix/store/y4w6ssx5i5qk6zw4nl4k2qyw8m8p3i5i-llvm-11.1.0-lib
/nix/store/ykkl3w3z4v661mjj47lfb6ryxicjrlyv-post-link-sign-hook
/nix/store/zidx8v13phsbzg3pjwjqil95iazq9l5y-compiler-rt-libc-11.1.0-dev
copying path '/nix/store/nm5f2lmgn13058mim1m6n7gk7q6cxm8j-ncurses-6.3-p20220507' from '<https://cache.nixos.org>'...
copying path '/nix/store/i92bgxw5ns8zbv8yk3b0anvip0dlak3g-binutils-2.39' from '<https://cache.nixos.org>'...
copying path '/nix/store/3f0g6j019vy5njy80ya5g6k8843vyzbw-compiler-rt-libc-11.1.0' from '<https://cache.nixos.org>'...
copying path '/nix/store/17590a5bp47rym08i2h70a2ji1z18q6w-expand-response-params' from '<https://cache.nixos.org>'...
copying path '/nix/store/zidx8v13phsbzg3pjwjqil95iazq9l5y-compiler-rt-libc-11.1.0-dev' from '<https://cache.nixos.org>'...
copying path '/nix/store/039c4vhb9s848cqyh9gwixxc6a31rm5v-libSystem-11.0.0' from '<https://cache.nixos.org>'...
copying path '/nix/store/c85j441hrgg8b63k9iq0m6q5gkqpsvmz-libobjc-11.0.0' from '<https://cache.nixos.org>'...
copying path '/nix/store/5ni656fm1mig17801hs14f9wdqbih4ri-libtapi-1100.0.11' from '<https://cache.nixos.org>'...
copying path '/nix/store/g8b81w9kpb82gm7702ca692mp5flm7pf-apple-framework-CoreFoundation-11.0.0' from '<https://cache.nixos.org>'...
copying path '/nix/store/jmxf2kh5f96s2gw8kvqlq3vckpx7lh2k-cctools-port-973.0.1' from '<https://cache.nixos.org>'...
copying path '/nix/store/nlrnyahaj2aw7kgzcslmkf65g10d6syr-libxml2-2.10.1' from '<https://cache.nixos.org>'...
copying path '/nix/store/9m49xk9l6dn16b515clqbzv3fyj27pxr-openssl-3.0.7' from '<https://cache.nixos.org>'...
copying path '/nix/store/y4w6ssx5i5qk6zw4nl4k2qyw8m8p3i5i-llvm-11.1.0-lib' from '<https://cache.nixos.org>'...
copying path '/nix/store/qk7lhszzq0c96vysk4y3z2rapwsjnsyd-readline-8.1p2' from '<https://cache.nixos.org>'...
copying path '/nix/store/ra4asalsj40viq45x408v49y748anrg4-clang-11.1.0-lib' from '<https://cache.nixos.org>'...
copying path '/nix/store/d8hcl0rdr85qjhk5hwwpk5mmz3yf93cc-bash-interactive-5.1-p16' from '<https://cache.nixos.org>'...
copying path '/nix/store/kn8ahinf4kbh9zwnw44a0hhps6ia1swy-clang-11.1.0' from '<https://cache.nixos.org>'...
copying path '/nix/store/3ns8fjjfv67h30g341757j60bpx8fing-llvm-11.1.0' from '<https://cache.nixos.org>'...
copying path '/nix/store/gqvp3m95nbnzlinvbhdwqwfh6bh1bwj1-sigtool-0.1.3' from '<https://cache.nixos.org>'...
copying path '/nix/store/x0b1kda81p0w0qqp7abvsprcf7s7qp64-cctools-binutils-darwin-973.0.1' from '<https://cache.nixos.org>'...
copying path '/nix/store/ykkl3w3z4v661mjj47lfb6ryxicjrlyv-post-link-sign-hook' from '<https://cache.nixos.org>'...
copying path '/nix/store/sgbfgh7abygpwycn9vmd9f0idfnwcs32-signing-utils' from '<https://cache.nixos.org>'...
copying path '/nix/store/33yb640sh8ac5ky9ak7fjnrb3mw559q1-cctools-binutils-darwin-wrapper-973.0.1' from '<https://cache.nixos.org>'...
copying path '/nix/store/lqiqj6s5jx196bpx0mr53d232b57y768-clang-wrapper-11.1.0' from '<https://cache.nixos.org>'...
copying path '/nix/store/4w2rv6s96fwsb4qyw8b9w394010gxriz-stdenv-darwin' from '<https://cache.nixos.org>'...
Starting a devbox shell...
6.devbox内にて、node.jsのバージョンを確認します。無事、devbox環境に入れました。
(devbox) $ node -v
v18.12.1
最後に
いかがだったでしょうか。かなり簡単にnode.jsをdevboxに追加できてしまいますね。恐るべし。
どうやらバージョンを分離させているのはNixの機能らしく、その辺りの詳細や、実際にちゃんとした開発環境を作るとなった場合の問題についてもまた次の機会に掘り下げていければと思います。
この記事が皆様のdevboxに対する理解に一役買うことができたら幸いです。
この記事を最後まで読んだ方は是非、ハートボタンからスキしていただけたら嬉しいです(^O^)/
ご清覧ありがとうございました!
参考文献
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/