日々の余白

きろく と ざっき

2. console.log の効かせ方(4つだけ)

① 必ずラベルを付ける
console.log('B conflicts:', conflicts)
L→A→B→C→D の記号をそのままラベルにすると、どこまで進んだかが一目で分かります。裸の console.log(x) は行が増えた瞬間どれがどれか分からなくなります。

② オブジェクトが [Object] に潰れたら

console.dir(conflicts, { depth: null })

Node の console.log はネストが深いと省略します。console.dir の depth: null で全部出ます。

③ Drizzle の select は「必ず配列」
だから conflicts が空かどうかは conflicts.length を見ます。ここ、C の分岐そのものなので、まず

console.log('B conflicts.length:', conflicts.length)

を出してから条件を書くと確実です。service を const [service] = ... で受けているのも「配列の1個目を取り出している」からで、該当行がないと undefined。ここも一度ログで確かめる価値があります。

④ 実際に発行された SQL を見る
④B の重なり判定は「自分が書いた条件が本当にその SQL になったか」が肝なので:

const q = tx.select().from(reservations).where(/* ... */)
console.log(q.toSQL())   // { sql: '...', params: [...] }
const conflicts = await q

where の中身が展開された SQL と、params に入った日時が見えます。/* ? */ に startsAt/endsAt のどっちを入れたかの答え合わせは、これが一番速いです。

(全クエリを自動で流したいなら db/index.ts:10 を drizzle(pool, { logger: true }) にする手もあります。配線なので必要なら私がやります。)

← 一覧へもどる