• fetchの隠蔽:URL構築やエラーハンドリングを内部で完結。 • クライアント/サーバー両対応:Next.jsのクライアントコンポーネントでもサーバーコンポーネントでも使える。 • キャメルケース変換:バックエンドのsnake_caseをフロントエンドのcamelCaseに統一。 type CamelCase<T> = T extends Record<string, unknown> ? { [K in keyof T]: CamelCase<T[K]> } : T extends (infer U)[] ? U extends Record<string, unknown> ? CamelCase<U>[] : T : T; const toCamelCase = <T extends Record<string, unknown>>(obj: T): CamelCase<T>