JavaScript
PWAの更新で他タブの作業を壊さない:Web Locks APIとService Workerの二段階排他制御新着!!

PWAの更新通知を見落とすと古い画面が残り、skipWaitingを強制すると他タブの入力中の内容まで壊れます。Web Locks APIで共有ロックと排他ロックを使い分け、Service Workerに有効化まで保持させ、他タブを壊さずに更新する二段階の排他制御を実装します。

続きを読む
生成AI
未発売プランの仮の料金が画面に出てしまう問題を、キーの有無と型で防ぐ

月額課金のSaaSで、まだ発売していないプランの料金が画面に表示されてしまう不具合に遭遇しました。

続きを読む
生成AI
複数Webhookが同じ列を書くと保護期間が壊れる:短縮方向だけを止めるクランプ設計

課金システムで、既存ユーザー向けに「90日間は権限を保護する」といった猶予期間を設けることがあります。

続きを読む
生成AI
認証Providerの障害時にリフレッシュを連打しない:セッション単位クールダウンと503の設計

認証Providerが障害中でも、セッション単位のクールダウンでリフレッシュを間引き、一時失敗直後はretryAfterSeconds付きの503を返す設計を解説します。失効確定と一時失敗を区別し、原因不明の失敗で全ユーザーを一斉ログアウトさせません。

続きを読む
生成AI
エラー自動起票で同じ Issue が大量に立つ問題を3層の防御で止める(fingerprint 正規化・クローズ済み照合・起票上限)

エラーログ集約からGitHub Issueを自動起票する仕組みで、同じ原因なのにIssueが大量に立つ問題を、fingerprintの変動値正規化・クローズ済みIssueとの照合・時間あたりの起票上限という3層の防御で止める実装方法を解説します。

続きを読む
生成AI
Cloudflare Workersのログ集約で通知暴発を防ぐ:D1のUPSERT判定・信頼度3値・p95間引き・ReDoS対策

Cloudflare WorkersとD1で通知暴発を防ぐ4つのガードレール。UPSERTで勝者判定とカウントを1クエリ化し、認可結果を信頼度3値の型で分け、p95計算を条件付きで間引き、メール正規表現にlookbehindを足して走査コストを抑える実装例を紹介します。

続きを読む
生成AI
ON CONFLICT DO NOTHINGの排他制御は「一度きり」にしか効かない: TTL付きUPSERTで直す

`INSERT ... ON CONFLICT DO NOTHING` による排他制御は、TTL付きキャッシュと組み合わせると「一度きりのイベント」にしか効かず、キャッシュ切れ後の再実行で永遠に失敗し続ける落とし穴がある。この記事では、実運用で踏んだその問題と、TTLを条件にした条件付きUPSERTによる解決策をコード例とともに解説します。

続きを読む
生成AI
エラーメッセージの文字列判定をやめて、AppErrorに一本化する

エラーメッセージの文言でHTTPステータスを判定する実装は壊れやすいです。code・status・userMessageを持つAppErrorへ一本化し、未分類の例外はfail closedで500に倒し、throw new ErrorをCIで検知する対策を紹介します。

続きを読む
Vitest
『overlapping act() calls』から学ぶ、React Testing Library × fake timer × MSWの罠

React Testing Libraryのact/waitFor、fake timer、MSWを組み合わせた際に起きる4つの罠(overlapping act、timeout、プロバイダ分裂、型チェック漏れ)と解決策を整理します。

続きを読む
生成AI
Playwrightでwebkitだけ落ちるE2Eを直す: cold-load nav-stallをin-contextで復帰させる

Playwrightのnightly E2Eでwebkitだけ失敗する「wedge」状態を、about:blank遷移で復帰させる方法と、flakyと実装バグを機械的に分類しCIノイズを減らす設計を解説します。

続きを読む