bun.lockbのVersion管理をGitでどうやる?問題
はじめに
bun install
で生成されるBunのロックファイルはbun.lockb
というバイナリファイルである。
公式を読むと性能向上のためにバイナリ化していることがわかる。
Why is it binary?
In a word: Performance. Bun’s lockfile saves & loads incredibly quickly, and saves a lot more data than what is typically inside lockfiles.
困ること
まさにこのツイートの問題で、Git管理したいのにバイナリが出力されるのは不便で、どうしよう? と実際の本番利用では困るだろう。
解決方法
案1. git diffで差分確認する
公式のページを読むと、どうやら設定追加でgit diff
ができるらしい。
*.lockb binary diff=lockb
以下のコマンドを設定する。
git config diff.lockb.textconv bun
git config diff.lockb.binary true
こんな感じでdiffが取れる。
bun install request
git diff bun.lockb
diff --git a/bun.lockb b/bun.lockb
index 37f3f65..65824e6 100755
--- a/bun.lockb
+++ b/bun.lockb
@@ -1,6 +1,6 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
-# bun ./bun.lockb --hash: BB24D46E059091F3-6863ea0d6e91177f-E2F1BC58FFF5A7A6-f5c78c31dcedc805
+# bun ./bun.lockb --hash: 2F8346725EE70931-e6f8a1d537954932-3115FCAF57FC88CD-33daa9249461a838
--- a/bun.lockb
+++ b/bun.lockb
@@ -1,6 +1,6 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
-# bun ./bun.lockb --hash: BB24D46E059091F3-6863ea0d6e91177f-E2F1BC58FFF5A7A6-f5c78c31dcedc805
+# bun ./bun.lockb --hash: 2F8346725EE70931-e6f8a1d537954932-3115FCAF57FC88CD-33daa9249461a838
+ajv@^6.12.3:
+ version "6.12.6"
+ resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
案2. yarn.lockの出力で差分確認する
こちらも先ほどのページに載っていたが、bun install -y
or bun install --yarn
を使うことで、ロックファイルと一緒にyarl.lock
が出力される。
How do I inspect Bun's lockfile?
Run bun install -y to generate a Yarn-compatible yarn.lock (v1) that can be inspected more easily.
Human Readableなのはyarn.lockで、というポリシーらしい。これで差分を見れば差分がわかる。
ちなみに、このようにConfigでの設定もできる。
[install.lockfile]
# whether to save the lockfile to disk
save = true
# whether to save a non-Bun lockfile alongside bun.lockb
# only "yarn" is supported
print = "yarn"
案3. yarn.lock + bun.lockbのdiffで差分確認する
yarn.lock
で差分確認するので、実質的なBunのロックファイルの差分は見れるが、結局bun.lockb
の差分が見れない件は解決しないのか?と焦ったが、こんなTipsがあるらしい。
このbunコマンドで出力する技はドキュメントに無さそうだが、作者Twitterに載っていた様子。
要はGithub Actionsなどで、こういうCIを書けば十分チェックできそう。
name: CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
workflow_dispatch:
jobs:
bunLockCheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v1
- name: check lock diff
run: diff <(bun bun.lockb) yarn.lock
まとめ
大体が公式の再掲になってしまったが、
- ロックファイルのコミットでの差分は
yarn.lock
で確認。 - bun.lockbの差分管理は
diff <(bun bun.lockb) yarn.lock
で確認。
である程度見れるので、個人的には案3が使いやすいと思った。みなさんがどう管理しているかも気になります。
Discussion