Open9
Devboxを試してみる

作業場所
ひとまず
めも
- devbox環境だとfishのhistoryが個別で作られる
- 無効化したい

セットアップ
Devboxのインストール
- Nixが入ってなかったら勝手に入れてくれるらしい
curl -fsSL https://get.jetify.com/devbox | bash
Devboxの初期設定
-
devbox.json
が生成される -
.devbox/
も生成される (こっちは.gitignore
に追加したほうが良さそう)
devbox init
{
"$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.14.2/.schema/devbox.schema.json",
"packages": [],
"shell": {
"init_hook": [
"echo 'Welcome to devbox!' > /dev/null"
],
"scripts": {
"test": [
"echo \"Error: no test specified\" && exit 1"
]
}
}
}

Python環境を作ってみる
こいつ
パッケージの検索
-
--show-all
で省略されているバージョンを全部表示してくれる
> devbox search python
Found 7+ results for "python":
* python (3.14.0a6, 3.14.0a5, 3.14.0a4, 3.14.0a2, 3.14.0a1, 3.13.2, 3.13.1, 3.13.0, 3.13.0rc3, 3.13.0rc2 ...)
* python-cosmopolitan (3.6.14)
* python-launcher (1.0.1, 1.0.0)
* python-qt (3.6.0, 3.5.7, 3.5.6, 3.5.4, 3.5.2, 3.5.1, 3.4.2, 3.3.0, 3.2)
* python-swiftclient (4.2.0, 4.1.0, 4.0.0, 3.13.1, 3.13.0, 3.12.0)
* python-language-server (2022-02-18, 2021-09-08, 2021-05-20, 2020-10-08, 2020-06-19, 2020-04-24)
* python-matter-server (7.0.1, 6.6.0, 6.3.0, 6.2.2, 6.1.0, 5.10.0, 5.9.0, 5.8.1, 5.8.0, 5.7.0b2 ...)
Warning: Showing top 10 results and truncated versions. Use --show-all to show all.
パッケージの追加
-
python3.10
を入れてみる
devbox add python@3.10

環境の立ち上げ
devbox shell
確認
- ちゃんと
python3.10
が入ってるっぽい
python
Python 3.10.16 (main, Dec 3 2024, 17:27:57) [Clang 19.1.7 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

環境の再現
-
devbox.lock
から環境構築する場合のコマンド
devbox install

pythonパッケージの確認
- デフォルトでpipがインストールされるので,そのまま使える
- ただし,
devbox shell
しただけでは仮想環境がactivateされないので注意 -
devbox.json
のinit_hook
を設定しておくと自動でactivateできる- これは
fish
の場合
- これは
"shell": {
"init_hook": [
"source .venv/bin/activate.fish"
],
"scripts": {
"test": [
"echo \"Error: no test specified\" && exit 1"
]
}
}
Pythonパッケージのインストール
-
flask
を入れてみる
pip install flask
- インストール確認
pip list
Package Version
------------ -------
blinker 1.9.0
click 8.1.8
Flask 3.1.0
itsdangerous 2.2.0
Jinja2 3.1.6
MarkupSafe 3.0.2
mccabe 0.7.0
pip 23.0.1
pycodestyle 2.13.0
pyflakes 3.3.2
setuptools 65.5.0
Werkzeug 3.1.3
グローバル環境汚してない? -> 大丈夫そう
- Devbox環境を抜けたあとも
pip list
の結果が変わってない (VSCodeのターミナル上)- ターミナルアプリから
pip list
するとflask
が入ってなかった (そもそもpip
のパスが通ってない) VSCodeのターミナルだとデフォルトでDevbox環境が読み込まれるかも- 違った.VSCodeが
.venv
を勝手に読み込んでるっぽい
- ターミナルアプリから

venv -> uvに切り替える
- uv使いたいよねって話
devbox add uv@latest
- devbox環境外ではパスはそのまま
which uv
> ~/.local/bin/uv
- devbox環境だとインストールした
uv
を使ってくれる
devbox shell
(devbox) which uv
> ~/project/devbox-exp/.devbox/nix/profile/default/bin/uv
-
devbox.json
のinit_hook
にuv sync
を入れとけば良さそう
"shell": {
"init_hook": [
"uv sync"
],
"scripts": {
"test": [
"echo \"Error: no test specified\" && exit 1"
]
}
}
Python環境の切り替え
-
devbox
とuv
どっちもpythonランタイムを管理できるので,一方に統一したい-
uv
に統一するのが楽かな
-
-
.python-version
を作ってdevbox.json
からpythonを削除すれば良さそう

VSCodeのターミナル起動時に自動でDevbox shellを立ち上げる
- Devboxの拡張機能で出来るみたい
インストール数少ないので今はいらないかな- こいつで
Reopen in Devbox shell environment
しないとLSPとかFormatterが機能しないことがあった
- 代わりに
.vscode/settings.json
を書く
{
"terminal.integrated.profiles.osx": {
"WithDevbox": {
"path": "fish",
"args": ["-c", "devbox shell && fish"]
}
},
"terminal.integrated.defaultProfile.osx": "WithDevbox",
}

Dockerfileを生成
- コマンドで雛形を作ってくれる
devbox generate dockerfile
- ちょっと書き換えた
FROM jetpackio/devbox:0.14.2
# Installing your devbox project
WORKDIR /code
USER root:root
RUN mkdir -p /code && chown ${DEVBOX_USER}:${DEVBOX_USER} /code
USER ${DEVBOX_USER}:${DEVBOX_USER}
COPY devbox.json devbox.lock pyproject.toml uv.lock ./
RUN devbox run -- echo "Installed Packages." && nix-store --gc && nix-store --optimise
CMD ["devbox", "shell"]