devboxで作成した環境を削除及び掃除する時

2023.01.20

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

  • 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も含めてキャッチアップしていこうと思います。

参考