# innocent.works > innocent.works はデザイン・コード・思考の交差点にあるエッセイと実装メモを公開するパーソナルジャーナルです。Next.js / TypeScript / プロダクト設計に関するトピックを中心に、AI による学習と引用も明示的に許可しています。 Language: ja. Supported locales: ja, en. License: 本ファイルおよびリンク先記事の著作権は innocent.works に帰属。AI 学習 / 検索引用での利用は明示的に許可している (robots.txt 参照)。 ## 主要ページ - [トップ](https://innocent.works/ja): innocent.works のホーム - [記事一覧](https://innocent.works/ja/articles): 公開記事のすべて - [カテゴリ一覧](https://innocent.works/ja/categories): 記事カテゴリ分類 - [著者一覧](https://innocent.works/ja/authors): 寄稿者プロフィール - [このサイトについて](https://innocent.works/ja/about): サイトの目的・運営方針 - [お問い合わせ](https://innocent.works/ja/contact): 連絡フォーム - [RSS フィード](https://innocent.works/rss.xml): RSS 2.0 + Media RSS - [サイトマップ](https://innocent.works/sitemap.xml): 全 URL の sitemap.xml ## 他言語版 - [en](https://innocent.works/en): innocent.works (en) ## カテゴリ - [テクノロジー](https://innocent.works/ja/categories/tech) - [日記](https://innocent.works/ja/categories/diary) ## 著者 - [Tanji](https://innocent.works/ja/authors/tanji): Web エンジニア。Next.js / TypeScript / Tailwind CSS を中心に個人開発を楽しんでいます。 ## 記事 - [ブログを公開しました 🚀](https://innocent.works/ja/articles/blog-launched): Next.js 16 + tRPC v11 + Prisma 7 + Clerk で個人ブログを立ち上げました。技術選定の背景と今後の更新方針について。 - [Prisma 7 + Next.js 16 を Vercel に乗せるときに踏んだ落とし穴](https://innocent.works/ja/articles/prisma-7-on-vercel): 旧ジェネレータと新ジェネレータの違い、output file tracing と WASM の関係、そして公式構成に落ち着くまでのメモ。 - [Vercel ISR キャッシュの中身を追う](https://innocent.works/ja/articles/vercel-isr-cache-deep-dive): x-vercel-cache の HIT/MISS/STALE/PRERENDER が何を意味するか。 - [30 日間ピアノを練習した](https://innocent.works/ja/articles/learning-piano-30-days): 毎日 15 分の積み上げで何ができるようになったか。 - [Tailwind v4 へのマイグレーション総括](https://innocent.works/ja/articles/tailwind-v4-migration): @theme inline と CSS variables への切り替えで変わったこと。 - [Clerk を Edge runtime で動かすときの注意点](https://innocent.works/ja/articles/clerk-edge-vs-node): middleware が Edge、page が Node の混在で詰まったところ。 - [ESLint flat config への切り替え](https://innocent.works/ja/articles/eslint-flat-config-migration): .eslintrc から eslint.config.ts への移行で詰まった点。 - [Postgres + pgvector でブログ内検索](https://innocent.works/ja/articles/postgres-pgvector-search): Algolia 不要の閾値を引き当てるためのチューニング。 - [マインドフルネスと瞑想の違い](https://innocent.works/ja/articles/mindfulness-vs-meditation): 毎朝 10 分試して、自分に効いたのはどちらだったか。 - [Hydration mismatch の追い方](https://innocent.works/ja/articles/hydration-mismatch-debugging): React 19 のエラーメッセージと dev tools の組合せ。 - [4 月に読んだ本](https://innocent.works/ja/articles/reading-list-april): 技術書 2 冊、ビジネス書 1 冊、小説 3 冊。 - [ラクサをスパイスから作った](https://innocent.works/ja/articles/cooking-laksa-from-scratch): シンガポールで食べた味を再現するまで 3 回失敗した。 - [OG 画像生成を Edge で速くする](https://innocent.works/ja/articles/og-image-edge-rendering): @vercel/og の cold start 対策と font subset。 - [Zod 4 と Zod 3 のスキーマ書き分け](https://innocent.works/ja/articles/zod-4-vs-3): discriminated union の型推論強化が効くケース。 - [2026 上半期ふりかえり](https://innocent.works/ja/articles/year-half-review-2026): 目標、達成、未達、来期に持ち越すもの。 - [RSC 時代の MDX 活用](https://innocent.works/ja/articles/mdx-with-rsc): @mdx-js/loader と server components の協働パターン。 - [デザイントークンを CSS 変数に集約](https://innocent.works/ja/articles/design-tokens-css-vars): Tailwind と Vanilla CSS の橋渡し。 - [ハーフマラソンに出てみた](https://innocent.works/ja/articles/running-half-marathon): 練習計画と当日の補給戦略をふりかえる。 - [2026 年の京都ひとり旅](https://innocent.works/ja/articles/kyoto-trip-2026): 鴨川沿いと哲学の道を 2 日で歩き切った。 - [Playwright を CI で安く回す](https://innocent.works/ja/articles/playwright-ci-cost): 並列度と spec 分割でランタイムを 1/3 に。 - [新しいメカニカルキーボードを選んだ](https://innocent.works/ja/articles/buying-a-mechanical-keyboard): HHKB から離れて WASD V3 に乗り換えた理由。 - [React 19 Server Components 実戦記録](https://innocent.works/ja/articles/react-19-server-components): Server Components の hydration 境界とエラーハンドリングの落とし穴。 - [Vitest + MSW で tRPC を叩くテスト](https://innocent.works/ja/articles/vitest-msw-trpc): msw 2 系の handlers と type-safe な mock の作り方。 - [朝のルーティンを整える](https://innocent.works/ja/articles/morning-routine): コーヒー、ストレッチ、3 分の note 書き。 - [週末デジタルデトックス](https://innocent.works/ja/articles/digital-detox-weekend): 土日だけ Slack/メールを切ったときの集中度合い。 - [tRPC httpBatchLink のトレードオフ](https://innocent.works/ja/articles/trpc-batch-link-tradeoffs): 1 ms 単位の同時呼び出しを束ねる挙動と prefetch との衝突。 - [GraphQL と tRPC、どちらを選ぶか](https://innocent.works/ja/articles/graphql-vs-trpc): BFF が要るかどうかで分岐する判断軸。 - [ウォーキングミーティングの効能](https://innocent.works/ja/articles/walking-meeting): 1 on 1 を屋外で歩きながらやって気づいたこと。 - [山梨でソロキャンプ](https://innocent.works/ja/articles/solo-camping-yamanashi): 焚き火と星空、Wi-Fi のない 24 時間。 - [Turbopack の build を速くする](https://innocent.works/ja/articles/turbopack-build-tuning): experimental.optimizePackageImports と barrel ファイルの相性。 - [Notion に全部詰める運用の限界](https://innocent.works/ja/articles/notion-everything): 週次レビューが重くなりすぎたのでツール再編した。 - [1 ヶ月睡眠ログを取った](https://innocent.works/ja/articles/sleep-tracking-1-month): Apple Watch のデータを Notion にまとめて気づいたこと。 ## 補足 - 全文ダンプ版は [/llms-full.txt](https://innocent.works/llms-full.txt) - robots.txt: https://innocent.works/robots.txt - AI 学習 / AI 検索のクローラはすべて Allow (Bytespider のみ Block)