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.rbpackage-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
# ここから作業開始