スキル一覧に戻る
tirtza-weinfeld

next-16

by tirtza-weinfeld

0🍴 0📅 2026年1月22日
GitHubで見るManusで実行

SKILL.md


name: next-16 description: Next.js 16.1+ App Router patterns. Use when working with pages, routing, caching, params, or middleware.

Next.js 16.1+

Async params

Type params and searchParams as Promise<>, await in component body.

examples/async-params.tsx

Caching Overview

Enable cacheComponents: true in next.config.ts.

DirectiveRuntime APIsStorageUse Case
"use cache"NoIn-memoryStatic shared content
"use cache: private"YesBrowser onlyUser-specific data
"use cache: remote"NoRemote cacheMulti-instance shared

"use cache"

Cache routes, components, or functions. Data fetching cached as part of static shell.

Serialization Rules

Supported: primitives, plain objects, arrays, Date, Map, Set, React elements (pass-through only)

Unsupported: class instances, functions (except pass-through), Symbols, WeakMap/WeakSet

Pass-Through Pattern

Accept non-serializable values (children, actions) without introspecting them.

Runtime API Constraint

Cannot access cookies(), headers(), searchParams inside cached scope. Read outside and pass as args.

examples/use-cache.tsx

"use cache: private"

Allows runtime APIs inside cache. Results cached in browser memory only, never on server.

Constraints:

  • Executes on every server render
  • Excluded from static shell
  • cacheLife stale time must be ≥30s

examples/use-cache-private.tsx

"use cache: remote"

Stores output in remote cache. Durable across instances/deployments.

Use when:

  • Rate-limited APIs
  • Slow/expensive backends
  • Serverless (ephemeral memory)

Avoid when:

  • Fast operations (<50ms)
  • High-cardinality cache keys
  • Frequently changing data

examples/use-cache-remote.tsx

"use client"

Marks client-side entry point. Add at top of file before imports.

'use client'

import { useState } from 'react'

export default function Counter() {
  const [count, setCount] = useState(0)
  return <button onClick={() => setCount(c => c + 1)}>{count}</button>
}

Props must be serializable. Functions cannot be passed from server to client.

"use server"

Marks Server Actions. Can be file-level or inline.

// File-level
'use server'
export async function createUser(formData: FormData) {
  await db.user.create({ data: Object.fromEntries(formData) })
  revalidatePath('/users')
}

// Inline
async function submitForm(formData: FormData) {
  'use server'
  await saveData(formData)
}

Invalidation

import { cacheTag, revalidateTag, updateTag } from 'next/cache'

// Tag cached data
async function getData() {
  'use cache'
  cacheTag('products')
  return fetch('/api/products')
}

// Invalidate
revalidateTag('products', 'hours')  // SWR-style with profile
updateTag('products')               // Server Actions: immediate

Profiles: 'hours' (1h), 'days' (1d), 'weeks' (1w), 'max' (1y)

Cache Lifetime

import { cacheLife } from 'next/cache'

async function getData() {
  'use cache'
  cacheLife('hours')  // Profile shorthand
  // or
  cacheLife({ stale: 300, revalidate: 900, expire: 3600 })
}

Proxy (auth/routing)

Use proxy.ts instead of middleware.ts. Runs on Node.js runtime.

examples/proxy.ts

Common Mistakes

❌ Wrong✅ Correct
'use cache' with cookies() insideRead cookies outside, pass as arg
Creating JSX inside cache, passing to clientPass data to client, render there
middleware.tsproxy.ts
revalidateTag(tag)revalidateTag(tag, 'hours')
Cache high-cardinality keysCache low-cardinality, filter in-memory

スコア

総合スコア

50/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

レビュー

💬

レビュー機能は近日公開予定です