BLOG

開発ブログ

個人開発した Web アプリの設計・技術選定・更新内容を、実際のリポジトリと計測値をもとに書き残すブログ。

RSSJSON(エージェント向け)

全 38 件

朝のダイジェストが 20 日のうち 8 日欠けていた — 503 の再試行と 13:00 の作り直し

AI ニュースの毎朝のダイジェストが直近 20 日で 8 日欠けていた。Gemini の 503 を 3 秒で諦めていたのを間隔を空けた再試行に変え、失敗した日を 13:00 に作り直し、応答が止まる場合の 2 分の上限とタグキャッシュも足した。

更新ダイジェスト 2026 年 10 月下旬〜11 月 2 日

2026-10-15〜11-02 に全リポジトリへ入った変更のまとめ。Next 16.4 の障害、古い RSC を読みに行く問題、全リポジトリのセキュリティレビュー、静的サイトの空の 404、chronoscroll の id の継続、sumai-log の CSP 本適用。

CDN 向けの s-maxage がブラウザに届いていた — デプロイ後に消えたチャンクを読みに行く

Vercel が書き換えていた Cache-Control が Workers ではそのままブラウザに届き、デプロイ後に古い RSC が消えたチャンクを読みに行って画面が崩れた。Worker のラッパーで書き換え、Next.js の 8 本に同じ修正を入れた。

/index.html の 307 でオフラインのシェルが空振りしていた — Service Worker のキャッシュキー

Workers の静的アセットは /index.html を 307 で / に転送する。これをそのまま precache すると転送済みの応答が保存され、ナビゲーションには使えない。PWA 4 本のシェルのキーを / に揃え、sw.js に初めてテストを付けた。

止まった接続は、例外より長く待たされる — 外部呼び出しのタイムアウトを全部見直す

2026-10-26 の全リポジトリのレビューで共通して多かった指摘は、外部呼び出しにタイムアウトが無いことだった。SDK ごとの渡し方の違い、上限の値の決め方、再試行に乗せる形、CI の audit-gate が失敗を合格にしていた件を整理する。

更新

更新ダイジェスト 2026 年 10 月中旬

2026-10-11〜14 に全リポジトリへ入った変更のまとめ。Next.js 7 本の nonce CSP とページのキャッシュ、chronoscroll の特集 64 本と監査と表示の高速化、CSS Atelier の当たり判定、Service Anatomy の期限つきの記述、学習アプリと技の追加。

Next.js 7 本の CSP を Worker の nonce にして、Observatory を A+ にした

Next.js 7 本の CSP を、Worker が HTML ごとに nonce を付ける方式に揃えて Observatory を A+ 125 にした。'strict-dynamic' を付けない理由と、nonce の信頼境界、塞いだ SVG の script href の穴。

事前生成したページを毎回描き直していた — OpenNext の incrementalCache と 1102

OpenNext で載せた Next.js 6 本が incrementalCache を設定しておらず、事前生成したページをリクエストごとに描画し直していた。ai-primer ではプリフェッチの一斉リクエストで CPU 上限(1102)に当たった。直し方と、キャッシュで出た 404 の言語の罠。

更新

更新ダイジェスト 2026 年 9 月下旬〜10 月上旬

2026-09-22〜10-06 に全リポジトリへ入った変更のまとめ。依存更新と ESLint 10、undici の脆弱性対応、axe 違反ゼロ化、UI 層のテスト、SHIG 2 巡目、Effect 4、chronoscroll の Workers 移行、Service Anatomy の新記事 8 本。

Lighthouse 100×4 と Observatory A+ を複数アプリで取るための定石

複数のアプリで繰り返し効いた手順。Three.js の動的 import、インライン polyfill の無効化、Next のフォント方針、CSP から unsafe-inline を外すこと、ビーコンに SRI を付けない理由、中央値判定の CI ガード。

ソシオメディア HIG 100 項目を UI 見直しの物差しにしている話

確認ダイアログを取り消し通知に置き換える(57・54)、戻るで閉じる(59・60・82)、色だけに頼らない(96)、7mm のタップ領域(78)、寛容な入力(50)。コミットに番号を添えて 2026 年 9〜10 月に全リポジトリを 2 巡した記録。

テスト方針 — 純ロジック層は 100% ゲート、UI 層は jsdom の振る舞いテスト

engine/lib を純関数に寄せて 100% の閾値を CI で強制し、2026-09-28〜10-01 に全リポジトリで UI 層にも jsdom + Testing Library の振る舞いテストと「実測値の 2 ポイント下」のゲートを足した経緯。書いて見つかったバグも。

Vercel から Cloudflare Workers へ公開アプリをまとめて移した記録

2026-08-11 の Vercel 停止から始まった移行の定型手順と、_headers のカンマ連結・html_handling の 307・OpenNext の Cron ラッパー・nonce CSP・esbuild 未宣言・SITE_URL の localhost 化といった罠。