Next.jsの「use cache」を学んで気づいた、キャッシュ戦略の発想の転換ほか — Web Dev Digest: 2026‑07‑05
Top 20
S3 Annotation を使って S3 Files によるエージェンティックサーチ基盤を改良する
Source: Zenn | Published: 2026-07-05 16:49 JST
- 2026年6月にGAされたS3 Annotationsを組み込み、S3 FilesベースのエージェンティックサーチをNaive実装(精度0.75)から精度0.95・レスポンス8倍・コスト55%削減へ引き上げた
- 検証は29本のAWSドキュメントPDF(1.1GB・約8万ページ)に対する55問ベンチマークで、Strands Agentsツール内で
boto3経由でannotationを取得しつつPDF本体はS3 Files NFSマウントから読む二経路構成 - 制限は1オブジェクトバージョンあたり1,000アノテーション・各1MiBまで(合計1GiB)、UTF-8テキスト(JSON/XML/YAML)を許容し、バイナリはBase64エンコード必須
PutObjectAnnotation/ListObjectAnnotations/GetObjectAnnotationの3つのAPIのみで操作でき、get-objectのようなペイロード出力ファイルで扱う運用例が示された- Object Tagsと異なり、
CopyObject後もアノテーションが保持され、ETag更新でも失われないため、独立したメタデータライフサイクルを持てる点が実装上のキーだった
Next.jsの「use cache」を学んで気づいた、キャッシュ戦略の発想の転換
Source: Zenn | Published: 2026-07-05 09:55 JST
- Next.js 15 で導入された
'use cache'ディレクティブは「デフォルト暗黙キャッシュ」から「デフォルトは動的、明示的にキャッシュ宣言する」という発想転換を強制するもので、次期の中核キャッシュ機構と位置付けられた - 有効化には
next.config.tsのcacheComponentsフラグが必要で、対象関数の先頭に'use cache'を書きcacheLife('hours')などで有効期限プロファイルを与える - バリアントは3種で、
use cache(サーバーインメモリ)、use cache: private(ブラウザ側専用)、use cache: remote(Redis相当の外部ストア、サーバーレス環境で必須) - 実例として
async function getUsers()に'use cache' + cacheLife('hours')を付けるとDBクエリがユーザー横断でグローバルキャッシュされる形になる use cache関数内ではcookies()/headers()を直接呼べない制約があり、ユーザー間の情報漏洩を仕組みで防いでいる。またPPR(Partial Prerendering)は本ディレクティブが「静的にする境界」を宣言する機構として機能する
Node.jsの集計をRustに書き換えて4.9倍速くなったが、数字が2.16倍間違っていた話
Source: Zenn | Published: 2026-07-05 12:16 JST
- Claude Codeの使用量ダッシュボード向けJSONLパース・集計ロジックをNode.jsからRust CLIに移植したところ105ms → 21msの4.9倍高速化を達成した反面、集計値が実際1.76B tokenに対して3.8B tokenと2.16倍過大計上されていることが発覚した
- 内訳はファイルI/O 2.0倍、JSONパース 4.7倍、集計 8.0倍で、集計処理が最も効いた
- 過大計上の原因は Claude Code が同じAPI応答を「ストリーミングの逐次書き込み」と「セッションのfork/resume」のためJSONLに複数回出力するためで、単純な件数集計だと重複を拾ってしまう
- 修正は
message.id + requestIdを複合キーにして重複を排除し、各キーでusage_totalが最大のエントリを残す「最大値採用」戦略。ストリーミングの途中値は最終値より小さく、fork重複は同一値なので最大値で正解を拾える - 副次的にRust版がすべてのモデルにSonnet固定価格を使う簡易実装だったバグも発覚。最終的にNode.js版とRust版で1,762,902,617 tokenまで1トークン・1セント単位で一致することを検証した
ローカル完結ボイスジャーナルの設計 ― QuickScribe を Tauri + Rust + Svelte でつくる
Source: Zenn | Published: 2026-07-05 13:58 JST
- Tauri + Rust + Svelte で構築するローカル完結型ボイスジャーナル「QuickScribe」の設計本で、要約せずニュアンスを保持したまま話し言葉を整形する方針を軸に据えた
- 交換可能なエンジン境界を Rust の trait とファクトリで表現し、文字起こしエンジンや整形エンジンを差し替え可能にする設計を全面採用
- 整形はローカルLLMのプロンプト設計に委ね、要約ではなく「ニュアンス保持変形」を担わせる。中間出力を破棄せず素ファイルで非破壊的に保管する記録層と切り離す
- 起動トリガーは1つの物理ボタンで完結、独自デバイスAPIを使わず OS 公式APIのみに寄せる設計判断が明示されている
- 配布は CI に品質ゲートを組み込み、コードサイニング済みバイナリで配布する運用がチャプター構成に含まれる(章立てでCI/CD・配布まで扱う)
複式簿記の家計簿SaaSを React + AWS SAM で作る
Source: Zenn | Published: 2026-07-05 12:24 JST
- localStorage 単一 HTML ファイル(約980行)で動いていた複式簿記家計簿を、React + AWS SAM(Lambda / DynamoDB / Cognito)のSaaSへ移行した個人開発の設計記録
- Cognito でJWTを発行し API Gateway で検証→Lambda 実行、という「Lambda到達時点で認証済み」構成でサーバー側の権限判定コストを削減
- DynamoDBは単一テーブル・PAY_PER_REQUEST・ユーザーID をパーティションキーに置き「アイドル時のコストほぼゼロ」を明示的な選定理由に挙げる
- 複式簿記の不変条件(借方合計=貸方合計、0.01未満誤差で許容)と1仕訳2〜100行の範囲を、サーバー側で書き込み前検証しクライアント発の破壊を防ぐ
- クライアントが送るPK/SKや余分なフィールドはサーバー側でホワイトリストで上書き・サニタイズし、金額は正の値のみを許可し
side: 'dr'|'cr'で符号操作を封じる
Next.js App Router で Client → service の value import が build を壊す罠 — src/config 分離で防ぐ
Source: Qiita | Published: 2026-07-05 20:23 JST
- Client Component から
project.service.tsの定数(例:PROJECT_NAME_MAX_LENGTH)を value import すると、Webpack が service の依存する Prisma まで巻き取ってしまい、build がCannot find module '.prisma/client/default'と「PrismaClient is unable to be run in the browser」で壊れる罠を報告 - 原因は Webpack が Client Component からの import を推移的にたどり、サーバー専用パッケージまでクライアントバンドルに含めてしまうこと
- 恒久策として、定数を
src/config/配下の純粋モジュール(例:src/config/validation.ts)に切り出し、.service.tsからは常にファンクションだけをexport、src/config/は Prisma や認証ライブラリを絶対にimportしないという構造的ルールを敷く - 一時回避としての
import typeはビルド時に型情報が消えるため成立するが、「常に維持するのは非現実」と評価し規約化に不十分と結論 - 「定数は
.service.tsから出さない」「src/config/は DB / auth をimportしない」という2つのプロジェクトルールを明文化することで、Client → server の推移的持ち込みを組織的に予防できる
Next.js 16 (Turbopack) はフォルダリネームに弱い? 高速リロードループの正体を調べた
Source: Qiita | Published: 2026-07-05 20:15 JST
- Next.js 16 の Turbopack はプロジェクトフォルダをリネームすると「An unexpected Turbopack error occurred」で dev サーバーがクラッシュし、HMR 経由で高速リロードループに突入することを実測し原因を特定した
- Turbopackはファイルシステムキャッシュのキーとして「絶対パス」を保持しており、フォルダをリネームすると
/Users/xxx/旧フォルダ名/src/...を指す古いキャッシュエントリと現在の実パスが不整合を起こす - Rustコアはこの不整合を検出すると
panic!で回復不能クラッシュを起こし、Next.jsのHMRクライアントはWebSocket切断で自動リロード→再度同じキャッシュを踏む、を無限に繰り返す - 破損キャッシュは
.next/turbopackと.next/dev/cache/turbopackに残るため、.nextとnode_modules/.cacheを削除すればモジュールグラフが正しい絶対パスで再構築される - 影響はコールドスタートの遅延のみでコードの正しさや依存インストールには波及しない。webpackが同様の状況を静かにキャッシュミスとして扱うのに対し、Turbopackはクラッシュする点が固有の弱さと結論
ClerkをChrome拡張機能と組み合わせたらProduction認証が3段階で詰まった話
Source: Qiita | Published: 2026-07-05 20:52 JST
- Clerk のProduction Keys は登録済みドメイン(例: ad4n.dev)以外からの接続を弾き、
chrome-extension://...オリジンからの直リクエストは全滅するため、syncHostで Web アプリと Cookie を共有する構成に切り替えて解消した - 2段階目は
routing="path"で/login/client-trustなどのURL遷移が発生するとSignInコンポーネントがunmountされてClient Trustフローが途切れる問題。ワイルドカードルート("/login/*")で暫定回避したが二次障害を招いた - 3段階目はルート変更が副作用を再発火させ確認コードのメールが二重送信される事故で、
routing="hash"に切り替えて#/factor-twoなどフラグメントで状態管理させ、コンポーネントをマウントし続ける形で根治 syncHost={SYNC_HOST}をClerkProviderに渡しhttps://clerk.ad4n.devを参照、manifest にはcookiesパーミッションを追加してセッション情報にアクセスする実装コードが具体的に提示されているhashモードでは URL のパスが変わらないため React Router が Clerk 内部の状態遷移をルート変更と誤認せず、コンポーネントの再マウントを回避できる点が本質的な解決策と結論
setStateは次のレンダー用に値を予約するだけ
Source: Qiita | Published: 2026-07-05 17:28 JST
- Reactの
setStateは「今の状態を変える」のではなく「次のレンダー用に値を予約する」だけである、という原則をコード実例で徹底整理した記事 - 1回のレンダー内では state は
const相当のスナップショットで凍結され、setCount(count+1)を3回呼んでもすべて同じcountを参照するため結果は +1 にしかならない - 関数アップデーター
setState(prev => prev + 1)を使えば各キュー更新が直前の結果を引き継ぐため、複数呼び出しでも正しく累積できる setStateの直後に state をログしても古い値が見えるのはこの予約仕様のためで、更新後の値を扱いたい場合はuseEffectを state 依存で使うのが正解- 「即時に変わる」との思い込みで発生するデバッグの誤りを防ぐには、新しい値を事前計算するかライフサイクルフックに処理を遅延させる、という2択に集約される
Vue3 + Express + MySQLで携帯図書館フルスタックアプリ(初学者開発)
Source: Qiita | Published: 2026-07-05 12:39 JST
- Vue3(TypeScript)+Express+MySQLで蔵書登録・冊数カウントを備えた携帯図書館フルスタックアプリを初学者が構築した実装記録
- 構成はVue3でレスポンシブUI、Expressで軽量APIサーバー、MySQLでリレーショナル整合性を担保する三層で、Vueの
@submit.preventやv-model.numberの型変換など初学者ならではの発見が具体名で列挙されている - 詰まった3点は、(1)
Module not foundを親ディレクトリではなくbackend/でnpm installすべきだった話、(2) DB認証エラーで接続情報を実環境に合わせ直した話、(3) users → books の親子関係で外部キー制約違反を踏み、親レコード先行登録で解消した話 - 将来の課題として、routes / controllers / models のMVC分離リファクタリングをコードベース拡大に備えて予定していると明記
- 「初学者が最初に踏む3つの罠」を再現手順込みで残しており、他の初学者が同じ地雷を踏まないための参考実装として機能する
Show HN: Small World – The “Preact” of 3D Web Engines (TypeScript, WebGPU)
Source: Hacker News | Published: 2026-07-05 23:53 JST
- WebGL2 / WebGPU 両対応の3DレンダリングエンジンをstrictなTypeScriptで実装した「Small World」を Show HN で公開、「Preact of 3D Web Engines」という位置付けで軽量さと最新API対応を訴求している
- レンダリングはCook-Torrance PBRシェーディングをWebGL2/WebGPU向けに動的コンパイルし、ナイトビジョン・VHS・フィルムノワールなど専用ポストプロセスも含む
- 挙動系は「ゼロアロケーションのFinite State Machine」、レイキャストは O(log n) のoctreeベースでDOMライクな hover / click ポインタ操作を提供
- 高度なグラフィックスとして、鏡面ジオメトリによるコンフォーマル反射、プロシージャルマッピング、実時間の球面反転数学まで扱う
- 具体のAPIサイズやThree.js比較値はランディングページ上には明示されておらず、詳細はGetting Startedガイドに委ねられているが、TypeScript strict モードで書き切ったことが差別化ポイントとして提示されている
Self-hosted email client with an AI agent, running on Cloudflare Workers
Source: Hacker News | Published: 2026-07-05 23:38 JST
- Cloudflareがサーバレス基盤だけで完結するセルフホスト型メールクライアント「agentic-inbox」を公開、Durable Objects(メールボックス毎のSQLite)、R2(添付ファイル)、Email Routing(受信)、Email Service(送信)、Workers AI(エージェント本体)というフルバインディング構成
- AIエージェントは受信箱閲覧・会話検索・返信ドラフト・送信を含む9つの専用ツールを持ち、Cloudflare Agents SDK上でストリーミングレスポンス対応で動く
- フロントエンドは React 19 + React Router v7、Tailwind CSS、Zustand、TipTap(リッチテキスト作成)というモダン構成で、バックエンドは Hono on Cloudflare Workers
- メールボックスごとに独立したDurable Object+SQLite+R2で完全分離する per-mailbox 隔離設計を採用
- 認証は本番環境で Cloudflare Access(JWT検証)を必須とし、Access ポリシー通過ユーザーは同一トラスト境界内で全メールボックスを操作可能という単純な権限モデル
All Articles
Zenn
| # | Title | Summary | Author | Published |
|---|---|---|---|---|
| 1 | Lisp設定なしで始めるEmacsライクなテキストエディタ「elecxzy」入門 | init.el記述やパッケージ管理に手を出せないEmacs興味層向けにIME対応・フォント同梱で「Lisp設定ゼロ」で使える軽量エディタelecxzyを紹介 | @くろうな | 16:04 |
| 2 | [Mastra Announce] Browser Recording で「後から追えるブラウザ実行」が標準化 | Mastraがブラウザ操作の再生・レビュー機能を標準化し、後追い検証・チーム協働・失敗分析を1機能に統合したアナウンス | @jun shiromizu | 14:25 |
| 3 | Discordを運用ダッシュボードにする:Webhook・embed・週次レポートの実装 | 複数事業/プロジェクトの状況把握をDiscord Webhook+embedで束ね、AI駆動運用向けの週次レポート実装として構築 | @asoventure | 10:00 |
| 4 | Next.js 外部データの扱い方(取得方法)について理解する | Server Componentのfetch、Client ComponentからのRoute Handler API、Server Actionの3系統をエラーハンドリング差分含め比較 | @y | 17:46 |
| 5 | ECMAScriptにおけるグレゴリオ暦: iso8601とgregory | gregory は国際化文脈の現実のグレゴリオ暦、iso8601 は文化中立・モデル化された「人工的」グレゴリオ暦という区別を仕様レベルで整理 | @ふぁぼん | 16:57 |
| 6 | ベジェ曲線と De Casteljau 法 — 制御点が形をつくる仕組み | 制御点でなめらかな曲線を「形づくる」De Casteljau法を、ベクターグラフィックス・CSSアニメへの応用を意識して分解 | @NovaSolver | 11:54 |
| 7 | バイブコーディングしてみた2 | フロント/バックエンドを分離した日記アプリをGitHub Copilot+CodexでOpenAPI経由のクライアント自動生成含め実装レビュー | @kishimin | 13:30 |
| 8 | そのブログ、AIにどれだけ読まれてる?CloudflareのAIボット制御機能まとめ | 2026-07-01発表のCloudflare AIボット管理機能を、個人ブログのAIトラフィック可視化のためのデフォルト挙動として整理 | @りょた | 09:37 |
| 9 | 今週取り組んだこと | 日記アプリで未来日付を「過去記録」と誤ラベルするバグを isFuture 条件追加で切り分け解消した週次ログ | @Fumika | 17:54 |
| 10 | ネットワークエンジニアの「図とドキュメント地獄」を解決したくて、Tauriで作図ツールを自作している話 | 機器情報1入力から図と表を自動生成する自作作図ツール「NET/DRAFT」をTauriで実装、ネットワーク文書の重複作業を撲滅 | @sendai_origin | 16:41 |
| 11 | Supabaseローカル開発をはじめる — CLI 導入から最初のスキーマ適用まで | macOS + Supabase CLI 2.108.0 で supabase start からローカルスタック起動、最初のテーブル作成までを実行手順で示す入門 | @tatsumura | 12:11 |
| 12 | Supabaseローカル開発の全体像 — コンテナ / config.toml / migrations の役割を整理する | Dockerコンテナ・config.toml・migrationsそれぞれの役割を、Supabaseローカル開発でよく詰まる質問ベースで再整理 | @tatsumura | 12:11 |
| 13 | Claude Codeと二人三脚で卵料理パズル「タマリス」を作ってリリースした話 | 卵料理パズル「タマリス」を人間はゲーム設計とテストFB、Claude Codeが実装という役割分担でCloudflare Pagesにリリース | @コロネ | 13:52 |
| 14 | SIerで培った「仕事の仕方」が、個人開発で初めて活きた話 | 「AIを使い倒す」ではなくチームメンバーとして設計するSIer流の仕事の仕方が個人開発の生産性に効いた振り返り | @Ten056 | 16:15 |
| 15 | インフラをTypeScriptで管理する - はじめてのAWS CDK | Infrastructure as CodeとしてのAWS CDKを、Terraformとの選定比較を絡めながらTypeScriptでのクラウド構成管理入門 | @cruise | 15:05 |
| 16 | AWS Bedrockを使用したレストラン検索LINE Bot作ってみた | 幹事の店選び負担を減らすため、AWS Bedrockを使ったレストラン検索LINE Botを作った実装記 | @shimiharu | 14:03 |
| 17 | AWS SAA ― 学習ログ⑤:アウトプットの強化Ⅱ | AWS SAA合格に向けたアウトプット強化フェーズ第2弾、演習の位置付けとノート運用を実践形式で継続 | @hitakaha | 13:10 |
| 18 | 業務UIをAIに8パターン作らせて分かった、使いやすいデザインの境界線 | 同一業務UIをAIに8パターン生成させ、色/枠線/影/フォントの各選択が「印象と使い勝手」を左右する境界を比較検証 | @shun@AI Builder | 10:00 |
Qiita
| # | Title | Summary | Author | Published |
|---|---|---|---|---|
| 1 | Next.js + FastAPI — フロントとバックエンドをつないだ | 一体型Laravelと対比し「フロントはNext.js・APIはFastAPI」に完全分離した構成で初めて統合した実践記録 | @cozy_666_tech | 22:18 |
| 2 | JSON によるスキーマ管理はどこまで可能か? | 静的サイト+軽量フォームAPI開発者向けに Zod / Valibot / Ajv / Pydantic をJSONスキーマ視点で管理可能範囲を検討 | @masakielastic | 20:58 |
| 3 | ダミーデータを消そうとしてメニューがおかしくなった。【高校生のバグ解決録002】 | 学食予約システムで日替わり価格管理の設計不備が画像なし枠として表面化した高校生のデバッグ録 | @fairy876 | 23:18 |
| 4 | 作成したReactアプリ(未完成)をGithub Pagesで公開してみた | 未完成でも公開すべきか葛藤しつつ、駆け出しエンジニアがReactアプリをGitHub Pagesに載せた第一歩 | @orka_1928 | 23:21 |
| 5 | Docker初心者がフルスタックアプリを構築してみた【React/Hono/PostgreSQL/Docker】 | 学習内容と勉強時間の記録アプリを題材に、React + Hono + PostgreSQLをDocker初心者がコンテナ化した学習ログ | @keikeigo | 20:32 |
| 6 | componentsに何でも入れないためのフロントエンド構成整理 | 「Buttonをどこに置くか」「SearchFormは共通コンポーネントか」を判定する軸を、実務ディレクトリ整理の観点で定義 | @tonbi_attack | 00:09 |
| 7 | Node.js Token Bucket Rate Limiter | システム設計面接向けに、API GatewayレベルのRate LimitingをToken BucketでNode.js実装する題材整理 | @Karentia | 15:54 |
| 8 | Node.jsでのIndexNow実装 | Bing / Yandex 対応の URL 追加通知プロトコルIndexNowを、クロール頻度の低い新規ドメイン向けにNodeで叩く実装 | @TOSHIMITSU_MIYACHI | 08:09 |
| 9 | Codeably: 無料で使えるターミナル向けAIコーディングエージェント | 個人APIキーを使いターミナル完結でゼロコスト運用できる自律型AIコーディングツール「Codeably」の紹介 | @Addy | 03:02 |
| 10 | 全銀フォーマットの仕様とNode.js/TypeScriptでの実装ポイント | 銀行振込用の全銀フォーマットをNode.js/TypeScriptで扱う際の仕様解説と、実装時によく踏む落とし穴の対処 | @toruca | 00:05 |
| 11 | Databricks Free EditionでLakebaseをバックエンドにしたDatabricks Appsを動かしてみる | Databricks Free Editionで、Lakebaseを裏側に置いたDatabricks Appsをワークスペース内直接ホストで動かす手順 | @taka_yayoi | 16:13 |
| 12 | psycopg(psycopg3)でPostgreSQLに繋いでみた | psycopg3でのPostgreSQL接続、コネクションプール実装、システムテーブル経由の接続状態モニタリングを一通り実演 | @s4i | 15:45 |
| 13 | 結婚式で自作フォトコンテストアプリを作ってわかった、当日事故らせないための設計と運用 | 結婚式当日の写真投稿→夫婦選定→表彰までを回すため、Supabase製フォトコンテストアプリの本番設計と運用対策 | @ogison | 00:56 |
| 14 | ALBのアクセスログ用S3バケットポリシーがアカウントID不要で設定できるようになってた | ALBアクセスログ用S3バケットポリシーが以前のアカウントID指定から logdelivery.ela... 形式に置き換えられた変更を検証 | @sagochiko | 23:57 |
| 15 | いいねボタンの実装と考えたこと | 共有アプリの「いいね」機能を React + Hono + Cloudflare D1 + Drizzle ORM で設計・実装した記録 | @Uyuki_0409 | 15:00 |
| 16 | 自作AndroidアプリをCloudflare Pages + R2で「知り合い限定配布」する仕組みを無料枠だけで作った | Cloudflare Pages + R2 の無料枠のみで、ストア審査を経ずに知人限定でAndroid APKを配布する仕組み | @nak3761 | 02:19 |
| 17 | ❓️なぜ『運転性格診断クイズ』なのに、これだけ時間をかけたのか | ドライバー適性クイズにsql.jsを組み合わせ、完全ブラウザ内完結のアプリとして作り込んだ動機と工数の振り返り | @tosane932 | 19:11 |
Publickey
2026-07-05 付のWeb開発関連記事はありませんでした。
gihyo.jp
2026-07-05 付の記事はありませんでした。
GIGAZINE
2026-07-05 付のWeb開発関連記事はありませんでした。
ITmedia News
2026-07-05 付のWeb開発関連記事はありませんでした。
TypeScript Blog
2026-07-05 付の記事はありませんでした。
Node.js Blog
2026-07-05 付の記事はありませんでした。
Astro Blog
2026-07-05 付の記事はありませんでした。
Cloudflare Blog
2026-07-05 付の記事はありませんでした。
Vercel Changelog
2026-07-05 付の記事はありませんでした。
AWS What’s New
2026-07-05 付の記事はありませんでした。
Google Cloud Blog
2026-07-05 付の記事はありませんでした。
Supabase Blog
2026-07-05 付の記事はありませんでした。
web.dev
2026-07-05 付の記事はありませんでした。
Mozilla Hacks
2026-07-05 付の記事はありませんでした。
CSS-Tricks
2026-07-05 付の記事はありませんでした。
Smashing Magazine
2026-07-05 付の記事はありませんでした。
Hacker News
対象日の該当記事はすべて Top 20 に掲載されています。