実際のところDevBoxはDocker比較でどこまで速いのか

最近Dockerで作った開発環境でのnpm系インストールコマンド速度問題に悩んでいました。
そんな時、ふとこの記事が目に入りました。

https://www.itmedia.co.jp/news/articles/2212/23/news095.html

なんだか速そうな言葉が目につきますが、本当に速いといえるほど速いのか気になったので試してみることにしました。

## 環境

- WSL2
- Almalinux

## インストール

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

秒で終わりました。
速くていいっすね

## 環境作成

空のフォルダで以下を実行

```
devbox init
```

nodejsの追加

```
devbox add nodejs
```

shellの立ち上げ

```
devbox shell
```

`devbox shell`は重いですよとドキュメントに書かれていましたが、`devbox add nodejs`の方が長かったくらいでした。
fishだと中にいるかわかりにくかったので、bashで入りなおしました。

## 比較する

以下のpackage.jsonの`yarn install`にどれくらい時間がかかるかで比較します。

```package.json
{
  "dependencies": {
    "next": "13.0.5",
    "next-themes": "^0.2.1",
    "react": "18.2.0",
    "react-dom": "18.2.0",
    "tsconfig-paths-webpack-plugin": "^4.0.0"
  },
  "devDependencies": {
    "@babel/core": "^7.20.5",
    "@storybook/addon-actions": "^6.5.14",
    "@storybook/addon-essentials": "^6.5.14",
    "@storybook/addon-interactions": "^6.5.14",
    "@storybook/addon-links": "^6.5.14",
    "@storybook/addon-postcss": "^2.0.0",
    "@storybook/builder-webpack5": "^6.5.14",
    "@storybook/client-api": "^6.5.15",
    "@storybook/manager-webpack5": "^6.5.14",
    "@storybook/react": "^6.5.14",
    "@storybook/testing-library": "^0.0.13",
    "@testing-library/jest-dom": "^5.16.5",
    "@testing-library/react": "^13.4.0",
    "@testing-library/user-event": "^14.4.3",
    "@types/node": "18.11.9",
    "@types/react": "18.0.25",
    "@types/react-dom": "18.0.9",
    "@types/testing-library__jest-dom": "^5.14.5",
    "@vitejs/plugin-react": "^2.2.0",
    "autoprefixer": "^10.4.13",
    "babel-loader": "^8.3.0",
    "eslint": "8.28.0",
    "eslint-config-next": "13.0.5",
    "eslint-config-prettier": "^8.5.0",
    "eslint-plugin-storybook": "^0.6.7",
    "hygen": "^6.2.11",
    "jsdom": "^20.0.3",
    "npm-run-all": "^4.1.5",
    "postcss": "^8.4.19",
    "prettier": "^2.8.0",
    "sass": "^1.56.1",
    "sass-loader": "^13.2.0",
    "storybook-addon-next-router": "^4.0.2",
    "storybook-css-modules": "^1.0.8",
    "tailwindcss": "^3.2.4",
    "typescript": "4.9.3",
    "vite": "^3.2.4",
    "vite-tsconfig-paths": "^3.6.0",
    "vitest": "^0.25.3"
  }
}

```

適当に色々入れていたら膨れ上がってしまった系のパッケージ群です。
普通に実行しても眉をひそめるくらいには時間かかるので、比較にはちょうど良いと思います。
ロックファイルはなしで、計測のたびに削除します。

まず参考として、通常の環境での実行結果です


```
success Saved lockfile.
Done in 80.94s.

________________________________________________________
Executed in   81.05 secs    fish           external
   usr time   15.79 secs   41.00 micros   15.79 secs
   sys time    9.73 secs  166.00 micros    9.73 secs
```

1分ちょっと。
なかなか時間がかかります。

### docker

以下の`docker-compose.yaml`で立ち上げた環境です。
COPY等せずに、`vim`をinstallしてそのまま直接`package.json`ファイルを書き込みました。

実行結果は以下の通りです。

```
success Saved lockfile.
Done in 125.46s.

real    2m5.580s
user    0m51.004s
sys     0m37.533s
```

2分5秒。
まあこんなもんですね。

### devbox

```
success Saved lockfile.
Done in 70.69s.

real    1m10.803s
user    0m15.943s
sys     0m9.392s
```

速すぎて草。
通常の環境と特に変わりのない速度が出ています。すげー。
この後何度か計測し直しましたが、どれも大体変わりませんでした。

## おわりに

本番環境とするかといえばまた話は変わってくるのですが、開発環境としてはかなり有用ではないでしょうか。
もちろん、対応している環境などでいろいろ制限はあったりするので現時点で完全にDocker開発環境を追いやるとはまだ言えない気がします。
とはいえMariaDBやPosgreSQL、nginxなんかは対応していたので、標準的なアプリケーションは作れるといえるでしょう。

Dockerfileなんかも吐き出せますし、悩まされがちな速度でここまで出てくれるのであれば、今後にとても期待が持てそうです。