bun.lockbのVersion管理をGitでどうやる?問題

2023/10/03に公開

はじめに

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.

https://bun.sh/docs/install/lockfile

困ること

まさにこのツイートの問題で、Git管理したいのにバイナリが出力されるのは不便で、どうしよう? と実際の本番利用では困るだろう。

https://x.com/voluntas/status/1708467606817308837

解決方法

案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での設定もできる。

bunfig.toml
[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があるらしい。

https://x.com/kawaz/status/1708667121147035935?s=20

このbunコマンドで出力する技はドキュメントに無さそうだが、作者Twitterに載っていた様子。

https://x.com/jarredsumner/status/1577356694476050432

要はGithub Actionsなどで、こういうCIを書けば十分チェックできそう。

githubaction.yaml
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