Tech Blog
技術ブログ
自社で運用している本番システムで実際に起きたことを、運用している当事者が書いています。障害の症状・原因・直し方を、どのファイルの何行目を見て書いたかまで記事ごとに残しています。日本語と英語で同じ内容を公開しています。
- impressions集計がcontent_id経由だけでpayload.adId経由を辿らず常に0件だった
- withTenantContextのトランザクション内で別接続を取るレート制限が、プール最大接続数で詰まった
- Next.jsのmetadata.titleがlayoutのtitle.templateと二重に表示される
- レートリミッタのMapにmaxKeys上限が無いと、対策自体がメモリ枯渇で落ちる
- Next.jsのmiddleware matcherは文字列prefix一致、api/auth-adminも除外する
- adIdはUUID形式でしか検証せず、実在照合をしないと到達数ビーコンは水増しできる
- SwitchBotはDETECTED/NOT_DETECTEDの2通で検知回数が2倍になる
- RLS PERMISSIVEはOR結合、system_adminの全校policyが常に発火しテナント越境した
- AndroidのHDMI-CEC電源制御はsideloadだとSecurityExceptionで落ちる
- cqhはsize containerが無いとviewportへフォールバックして文字が2倍に膨張した
- 入金消込のreconcilePaymentは入金額を照合せず入金済にしていた
- X-Forwarded-Forの左端をレート制限キーにすると詐称で突破できる
- 採点APIがリクエストボディのuserIdを信用し、他人のプロフィールを書き換えられた
- 広告枠のcompany_idは契約終了後も残留し、自社枠チェックだけでは元顧客が終了枠に無審査で掲載できていた
- AbortSignal.timeoutをサーバー内部処理より短くすると成功した配信まで恒久失敗扱いになる
- share_links.kindのCHECK制約に'receipt'が無く、領収証機能が本番デプロイで消えていた
- Supabase Authのemail_existsはメール重複でユーザー作成に失敗、救済できず無音の穴に
- DeliveryAd型のAPIレスポンスにフィールド名を送信漏れし、全ての広告が「(無題の広告)」のまま配信された
- durationSec上限300秒を入力時に見ておらず、合計時間上限を超えても保存後の配信時に恒久400エラー
- new row violates check constraintでdocumentsへの保管insertが無音全滅した
- StripeのfallbackToInvoiceがメール送信失敗を送付済みと誤って数えた
- .vercelignoreで/scriptsを除外したら本番ビルドがTS2307で落ちた
- 一括申込みでbundleUnavailableを足すまで、一部だけ失敗した原因がユーザーに伝わらなかった
- 広告の差し替え承認で、valid_fromが未来の予約済み素材まで退役させていた
- AbortSignal.timeout無しのfetchでSlack webhook無応答がJobごと殺し記録が残る
- snapshotSignedPoliciesはSupabaseのupdateがnullの時だけ効き、二度目は効かない
- gcloud sql clone point-in-time で本番DB復元の記録
- 配列を空行で挟む実装は空配列で2連続、endsWithでは検出できない
- is_pinned=falseだけでは特別回を除外できず、日程追加の雛形に選ばれた
- TOTP登録直後、session cookieは第2要素未達のまま残る