最近Dockerで作った開発環境でのnpm系インストールコマンド速度問題に悩んでいました。
そんな時、ふとこの記事が目に入りました。
なんだか速そうな言葉が目につきますが、本当に速いといえるほど速いのか気になったので試してみることにしました。
環境
- WSL2
- Almalinux
インストール
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
にどれくらい時間がかかるかで比較します。
{
"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なんかも吐き出せますし、悩まされがちな速度でここまで出てくれるのであれば、今後にとても期待が持てそうです。