bin setup 後に出る db schema.rb 、package‐lock.json の差分について - fjordllc/bootcamp GitHub Wiki

TL;DR

bin/setup 実行後に以下2ファイルに差分が出ますが、いずれもコミットしないでくださいgit checkout -- db/schema.rb package-lock.json で破棄してから作業を始めてください。

  • db/schema.rb
  • package-lock.json

差分の内容

1. db/schema.rb

pair_work_schedules.proposed_at / events.published_at / events.reserved_at などの datetime カラムから precision: nil が消える差分が出ます。

-    t.datetime "proposed_at", precision: nil, null: false
+    t.datetime "proposed_at", null: false

原因

  • 本番DB にあるこれらのカラムは過去の Rails で作られているため precision 0(秒単位) で保存されている
  • 一方、ローカルで bin/rails db:prepare が migration を流すと、Rails 8.1 + load_defaults 7.2 のデフォルトで precision 6(マイクロ秒) のカラムが作られる
  • schema.rb は本番DB の実状態に合わせて手動で precision: nil が書き足されている(コミット 77d42ba549 参照)ので、ローカルの再ダンプ結果とズレる

2. package-lock.json

fsevents パッケージに "dev": true が追加される差分が出ます。

       "version": "2.3.3",
       "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+      "dev": true,

原因

  • fsevents は macOS 専用の optional 依存
  • コミットされているロックファイルは Linux (CI など) で生成されたもので、Mac 以外ではこのパッケージが解決されないため dev フラグも書かれない
  • ローカル(Mac)で npm install すると実際に解決され、devDependencies 経由でしか参照されないため "dev": true が付く

なぜコミットしてはいけないのか

  • db/schema.rb: precision を消した状態でコミットすると、本番DB の実態とさらに乖離します。過去にも同じ差分を逆方向に戻すコミット (77d42ba549) が入っており、コミットしてもまた誰かが書き戻すイタチごっこになります。
  • package-lock.json: "dev": true を追加してコミットすると、今度は CI (Linux) や Mac 以外の開発者で逆差分が出ます。

根本的に直すには(参考)

個人で完結しない問題なので、対応する場合は事前に Issue / Discord で相談してください。

  • schema.rb 側: 本番DB に対し change_column ..., precision: 6 の ALTER migration を流して precision 6 に揃える、もしくは migration 側で precision: nil を明示する
  • package-lock.json 側: npm のプラットフォーム依存問題で決定打なし。生成環境を Mac に揃える等が考えられるが当面は許容

推奨ワークフロー

bin/setup
git checkout -- db/schema.rb package-lock.json
# ここから作業開始