devboxで作成した環境を削除及び掃除する時
- t_o_dです。
- 新しい開発環境構築の選択肢として登場したdevboxを試しています。
- ローカル内で独立した環境を手軽に作成でき便利ですが、色々追加したりしているとキャッシュ等が溜まりメモリが逼迫します。
- 今回はdevboxで作成した環境の掃除の方法を調査したので記録いたします。
環境
- mac OS Ventura 13.1
- devbox v0.2.2
結論
- 作成した環境を簡単に掃除するには以下の2つで可能でした。
- 環境用に作成したディレクトリを削除
nix-store --gc
コマンドを実行
内容
- devboxではnixというパッケージマネージャーの仕組みを利用してパッケージを管理しています。
- nixではパッケージを全体管理のstoreディレクトリに「一意のハッシュ名+パッケージ名」ディレクトリを作成してその中に格納していく方式をとっており、これで各バージョンや依存関係の衝突を防いでいるそうです。
- storeは
/nix/store
ディレクトリにあり、devboxでのパッケージの「追加前」と「追加後」の状態は以下でした。
# 初期状態 $ ls /nix/store xxxxx-libcxxabi-11.1.0 xxxxx-libcxx-11.1.0 xxxxx-nghttp2-1.47.0-lib xxxx-apple-framework-IOKit $ ls /nix/store | wc -l 68 # プロジェクト作成及びパッケージ追加 $ mkdir ~/sample $ cd sample $ devbox init $ devbox add nodejs $ ls /nix/store | wc -l 1086 # 別プロジェクト作成及びパッケージ追加 $ mkdir ~/sample2 $ cd sample2 $ devbox init $ devbox add go $ ls /nix/store | wc -l 1668
- 上記のように環境作成毎に
/nix/store
に貯まっていきます。 - 作成した環境を消すのであれば
devbox.json
があるディレクトリを削除すれば良いですが、/nix/store
の中身は残ったままです。 - 貯めておけばキャッシュとして利用するらしいですが、沢山あるとメモリを食うことになります。
- そこで利用できるのがnix-storeコマンドのgcオプションです。
- devboxではnixを利用しているため、当然nix自体のコマンドも利用できます。
- nix-storeコマンドのgcオプションは使われていない不要なパッケージを自動で削除してくれるらしいです。
- 試しに以下のコマンドで
sample2
環境を削除してみます。
# sample2環境の削除 $ rm -rf ~/sample2 $ nix-store --gc finding garbage collector roots... removing stale link from '/nix/var/nix/gcroots/auto/xxx' to '$HOME/sample2/.devbox/nix/profile/default-1-link' deleting garbage... deleting '/nix/store/xxxx-user-environment' deleting '/nix/store/xxxx-user-environment.drv' deleting '/nix/store/xxxx-env-manifest.nix' deleting '/nix/store/xxxx-devbox-development' xxxxx # 削除後のstoreの数 $ ls /nix/store | wc -l 1066
- 上記のように
sample2
に紐づけられていたリンクと不要なパッケージは削除され、storeの数はsample2
作成前とほぼ同じになりました。 - 次に
sample
環境も削除して初期状態に戻してみます。
# sample環境の削除 $ rm -rf ~/sample $ nix-store --gc finding garbage collector roots... removing stale link from '/nix/var/nix/gcroots/auto/xxx' to '$HOME/sample/.devbox/nix/profile/default-1-link' deleting garbage... deleting '/nix/store/xxxxx-bash-interactive-5.1-p16.drv' deleting '/nix/store/xxxxx-bash51-012.drv' deleting '/nix/store/xxxxx-bash51-014.drv' deleting '/nix/store/xxxxx-bash51-011.drv' xxxxx # 削除後のstoreの数 $ ls /nix/store | wc -l 68
- 上記のように
sample
環境も同様に不要なリンクとパッケージが削除され、初期状態と同様のstoreの数になりました。 - これらのことから、devboxで作成した環境の掃除は「ディレクトリの削除」「
nix-store --gc
コマンドの実行」で一旦問題ないといたしました。- ※試しにローカルにインストールしていたnodeのバージョンはv17のままでした。
- 以上です。
まとめ
- 登場して日が浅く、機能や情報が乏しいため今後nixOSも含めてキャッチアップしていこうと思います。