オプション

NuxtHub v0.10.6のアプリケーションを構築する際に使用します。SQLite、PostgreSQL、MySQLをサポートするDrizzle ORMをはじめとするデータベース機能、KVストレージ、ブロブストレージ、キャッシュAPIを提供します。設定方法、スキーマの定義、マイグレーション処理、マルチクラウド環境へのデプロイ(Cloudflare、Vercel)のほか、新たに導入されたhub:db、hub:kv、hub:blobといった仮想モジュールのインポート方法についても解説しています。

...すべて拡張します
36
更新された時間 2026年8月23日

nuxthubについて

NuxtHubは、NuxtHub v0.10.6上でフルスタック型のNuxtアプリケーションを構築するためのClaude Code用リファレンススキルであり、データベース、KVストレージ、ブロブストレージ、キャッシュAPIに関する内容をカバーしています。古くなった一般的な知識に頼るのではなく、設定、スキーマ定義、マイグレーション、マルチクラウド展開、そして新しいhub:db、hub:kv、hub:blobといったバーチャルモジュールのインポート方法について、最新かつ的を絞ったリファレンスをClaudeに提供することで、正確でバージョンに合致したNuxtHubコードの作成という課題を解決します。

このスキルでは、Drizzle ORMを用いてSQLite、PostgreSQL、MySQLの各ディアレクトに対応したタイプセーフなSQLを解説しており、スキーマの例やCRUDパターンに加え、開発やビルド時に自動適用される完全なマイグレーションCLI(generate、migrate、raw SQL、drop、drop-all、squash、mark-as-migrated)も用意されています。また、TTLやサイズ制限を持つKVストレージ、アップロード/ダウンロード/一覧表示/配信のヘルパーや検証機能を備えたブロブストレージ、キャッシュAPIについても説明しています。各ディアレクトやプロバイダーは、ローカル環境および本番環境のバックエンドや必要な環境変数(D1、Turso、Neon、postgres-js、mysql2、Upstash、Redis、Cloudflare KV、Vercel、Deno)に対応しており、開発時に本番環境のバインディングを利用するためのリモートモードや、v0.10.6のリードレプリカサポートといった設定オプションも含まれています。Cloudflare用のwrangler.jsoncテンプレートや、Vercel、Netlify、Deno、AWS向けのプロバイダー設定を記載した2つのリファレンスファイルも用意されており、スキル自体が現在のタスクに関連するリファレンスのみを読み込むよう案内しています。

このスキルは、Cloudflare、VercelをはじめとするプラットフォームにアプリケーションをデプロイするNuxtやフルスタック開発者を対象に、正確なNuxtHubのデータ層やデプロイメントに関するガイダンスを提供します。これはドキュメントおよびコードパターンのリファレンスであり、認証情報に関する説明は各プロバイダー用の標準的な環境変数名の指定に限られています。

よくある質問

対応しているNuxtHubのバージョンとデータベースは何ですか?

NuxtHub v0.10.6を対象としており、Drizzle ORMのSQLite、PostgreSQL、MySQLディアレクトについて、スキーマの例やCRUDパターン、ローカル環境と本番環境のバックエンドを結びつけるプロバイダーマッピングなどを記載しています。

どのようなデプロイ先がサポートされていますか?

Cloudflare、Vercel、Deno、Netlifyへのマルチクラウド展開に対応しており、Cloudflare用のwrangler.jsoncテンプレートや、Vercel、Netlify、Deno、AWS向けのプロバイダー設定を記載したリファレンスファイルも用意されています。

マイグレーションはどのように動作しますか?

スキーマからマイグレーションを生成したり、raw SQLを実行したり、テーブルを削除したり、全てのデータを削除したり、マイグレーションを圧縮したり、「マイグレーション済み」としてマークしたりするための完全なCLIが記載されています。マイグレーションはnuxiの開発やビルド時に自動的に適用され、_hub_migrationsテーブル内で管理されます。

リモートモードとは何ですか?

リモートモード(v0.10+)では、ローカルでのエミュレーションではなく、ローカル開発中に本番環境のCloudflare D1、KV、R2バインディングに接続することができ、本番環境のデータを使ったテストに役立ちます。

リファレンスファイルはどのように読み込むべきですか?

スキルでは、一度に全てのファイルを読み込むのではなく、現在のタスクに関連するリファレンスのみを読み込むよう推奨しています。例えば、Cloudflareを設定する際にはwrangler-templatesリファレンスを、Vercel、Netlify、Deno、AWSにデプロイする際や外部のデータベース/ストレージプロバイダーを設定する際にはprovidersリファレンスを読み込む形です。

GitHubで見る

Full-stack Nuxt framework with database, KV, blob, and cache. Multi-cloud support (Cloudflare, Vercel, Deno, Netlify).

For Nuxt server patterns: use nuxt skill (server.md)For content with database: use nuxt-content skill

Loading Files

Consider loading these reference files based on your task:

  • references/wrangler-templates.md - if manually configuring wrangler.jsonc for Cloudflare deployment
  • references/providers.md - if deploying to Vercel, Netlify, Deno, AWS, or configuring external database/storage providers

DO NOT load all files at once. Load only what's relevant to your current task.

Installation

npx nuxi module add hub

Configuration

// nuxt.config.tsexport default defineNuxtConfig({  modules: ['@nuxthub/core'],  hub: {    db: 'sqlite', // 'sqlite' | 'postgresql' | 'mysql'    kv: true,    blob: true,    cache: true,    dir: '.data', // local storage directory    remote: false // use production bindings in dev (v0.10+)  }})

Advanced Config

hub: {  db: {    dialect: 'postgresql',    driver: 'postgres-js', // Optional: auto-detected    casing: 'snake_case',  // camelCase JS -> snake_case DB (v0.10.3+)    migrationsDirs: ['server/db/custom-migrations/'],    applyMigrationsDuringBuild: true, // default    replica: { // Read replica support (v0.10.6+)      connection: { connectionString: process.env.DATABASE_REPLICA_URL }    }  },  remote: true // Use production Cloudflare bindings in dev (v0.10+)}

remote mode: When enabled, connects to production D1/KV/R2 during local development instead of local emulation. Useful for testing with production data.

Database replica (v0.10.6+): Configure read replicas to distribute database load. Queries use replicas automatically while writes go to primary.

Database

Type-safe SQL via Drizzle ORM. db and schema are auto-imported on server-side.

Schema Definition

Place in server/db/schema.ts or server/db/schema/*.ts:

// server/db/schema.ts (SQLite)import { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'export const users = sqliteTable('users', {  id: integer().primaryKey({ autoIncrement: true }),  name: text().notNull(),  email: text().notNull().unique(),  createdAt: integer({ mode: 'timestamp' }).notNull()})

PostgreSQL variant:

import { pgTable, serial, text, timestamp } from 'drizzle-orm/pg-core'export const users = pgTable('users', {  id: serial().primaryKey(),  name: text().notNull(),  email: text().notNull().unique(),  createdAt: timestamp().notNull().defaultNow()})

Database API

// db and schema are auto-imported on server-sideimport { db, schema } from 'hub:db'// Selectconst users = await db.select().from(schema.users)const user = await db.query.users.findFirst({ where: eq(schema.users.id, 1) })// Insertconst [newUser] = await db.insert(schema.users).values({ name: 'John', email: '[email protected]' }).returning()// Updateawait db.update(schema.users).set({ name: 'Jane' }).where(eq(schema.users.id, 1))// Deleteawait db.delete(schema.users).where(eq(schema.users.id, 1))

Migrations

npx nuxt db generate                  # Generate migrations from schemanpx nuxt db migrate                   # Apply pending migrationsnpx nuxt db sql "SELECT * FROM users" # Execute raw SQLnpx nuxt db drop <TABLE>              # Drop a specific tablenpx nuxt db drop-all                  # Drop all tables (v0.10+)npx nuxt db squash                    # Squash migrations into one (v0.10+)npx nuxt db mark-as-migrated [NAME]   # Mark as migrated without running

Migrations auto-apply during npx nuxi dev and npx nuxi build. Tracked in _hub_migrations table.

Database Providers

DialectLocalProduction
sqlite.data/db/sqlite.dbD1 (Cloudflare), Turso (TURSO_DATABASE_URL, TURSO_AUTH_TOKEN)
postgresqlPGlitepostgres-js (DATABASE_URL), neon-http (v0.10.2+, DATABASE_URL)
mysql-mysql2 (DATABASE_URL, MYSQL_URL)

KV Storage

Key-value storage. kv is auto-imported on server-side.

import { kv } from 'hub:kv'await kv.set('key', { data: 'value' })await kv.set('key', value, { ttl: 60 }) // TTL in secondsconst value = await kv.get('key')const exists = await kv.has('key')await kv.del('key')const keys = await kv.keys('prefix:')await kv.clear('prefix:')

Constraints: max value 25 MiB, max key 512 bytes.

KV Providers

ProviderPackageEnv Vars
Upstash@upstash/redisUPSTASH_REDIS_REST_URL, UPSTASH_REDIS_REST_TOKEN
RedisioredisREDIS_URL
Cloudflare KV-KV binding in wrangler.jsonc
Deno KV-Auto on Deno Deploy
Vercel-KV_REST_API_URL, KV_REST_API_TOKEN

Blob Storage

File storage. blob is auto-imported on server-side.

Blob API

import { blob } from 'hub:blob'// Uploadconst result = await blob.put('path/file.txt', body, {  contentType: 'text/plain',  access: 'public', // 'public' | 'private' (v0.10.2+)  addRandomSuffix: true,  prefix: 'uploads'})// Returns: { pathname, contentType, size, httpEtag, uploadedAt }// Downloadconst file = await blob.get('path/file.txt') // Returns Blob or null// Listconst { blobs, cursor, hasMore, folders } = await blob.list({ prefix: 'uploads/', limit: 10, folded: true })// Serve (with proper headers)return blob.serve(event, 'path/file.txt')// Deleteawait blob.del('path/file.txt')await blob.del(['file1.txt', 'file2.txt']) // Multiple// Metadata onlyconst meta = await blob.head('path/file.txt')

Upload Helpers

// Server: Validate + upload handlerexport default eventHandler(async (event) => {  return blob.handleUpload(event, {    formKey: 'files',    multiple: true,    ensure: { maxSize: '10MB', types: ['image/png', 'image/jpeg'] },    put: { addRandomSuffix: true, prefix: 'images' }  })})// Validate before manual uploadensureBlob(file, { maxSize: '10MB', types: ['image'] })// Multipart upload for large files (>10MB)export default eventHandler(async (event) => {  return blob.handleMultipartUpload(event) // Route: /api/files/multipart/[action]/[...pathname]})

Vue Composables

// Simple uploadconst upload = useUpload('/api/upload')const result = await upload(inputElement)// Multipart with progressconst mpu = useMultipartUpload('/api/files/multipart')const { completed, progress, abort } = mpu(file)

Blob Providers

ProviderPackageConfig
Cloudflare R2-BLOB binding in wrangler.jsonc
Vercel Blob@vercel/blobBLOB_READ_WRITE_TOKEN
S3aws4fetchS3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_BUCKET, S3_REGION

Cache

Response and function caching.

Route Handler Caching

export default cachedEventHandler((event) => {  return { data: 'cached', date: new Date().toISOString() }}, {  maxAge: 60 * 60, // 1 hour  getKey: event => event.path})

Function Caching

export const getStars = defineCachedFunction(  async (event: H3Event, repo: string) => {    const data = await $fetch(`https://api.github.com/repos/${repo}`)    return data.stargazers_count  },  { maxAge: 3600, name: 'ghStars', getKey: (event, repo) => repo })

Cache Invalidation

// Remove specificawait useStorage('cache').removeItem('nitro:functions:getStars:repo-name.json')// Clear by prefixawait useStorage('cache').clear('nitro:handlers')

Cache key pattern: ${group}:${name}:${getKey(...args)}.json (defaults: group='nitro', name='handlers'|'functions'|'routes')

Deployment

Cloudflare

NuxtHub auto-generates wrangler.json from your hub config - no manual wrangler.jsonc required:

// nuxt.config.tsexport default defineNuxtConfig({  hub: {    db: {      dialect: 'sqlite',      driver: 'd1',      connection: { databaseId: '<database-id>' }    },    kv: {      driver: 'cloudflare-kv-binding',      namespaceId: '<kv-namespace-id>'    },    cache: {      driver: 'cloudflare-kv-binding',      namespaceId: '<cache-namespace-id>'    },    blob: {      driver: 'cloudflare-r2',      bucketName: '<bucket-name>'    }  }})

Observability (recommended): Enable logging for production deployments:

// wrangler.jsonc (optional){  "observability": {    "logs": {      "enabled": true,      "head_sampling_rate": 1,      "invocation_logs": true,      "persist": true    }  }}

Create resources via Cloudflare dashboard or CLI:

npx wrangler d1 create my-db              # Get database-idnpx wrangler kv namespace create KV       # Get kv-namespace-idnpx wrangler kv namespace create CACHE    # Get cache-namespace-idnpx wrangler r2 bucket create my-bucket   # Get bucket-name

Deploy: Create Cloudflare Workers project, link Git repo. Bindings auto-configured at build time.

Environments: Use CLOUDFLARE_ENV=preview for preview deployments.

See references/wrangler-templates.md for manual wrangler.jsonc patterns and references/providers.md for all provider configurations.

Other Providers

See references/providers.md for detailed deployment patterns for:

  • Vercel: Postgres, Turso, Vercel Blob, Vercel KV
  • Netlify: External databases, S3, Upstash Redis
  • Deno Deploy: Deno KV
  • AWS/Self-hosted: S3, RDS, custom configs

D1 over HTTP

Query D1 from non-Cloudflare hosts:

hub: {  db: { dialect: 'sqlite', driver: 'd1-http' }}

Requires: NUXT_HUB_CLOUDFLARE_ACCOUNT_ID, NUXT_HUB_CLOUDFLARE_API_TOKEN, NUXT_HUB_CLOUDFLARE_DATABASE_ID

Build-time Hooks

// Extend schemanuxt.hook('hub:db:schema:extend', async ({ dialect, paths }) => {  paths.push(await resolvePath(`./schema/custom.${dialect}`))})// Add migration directoriesnuxt.hook('hub:db:migrations:dirs', (dirs) => {  dirs.push(resolve('./db-migrations'))})// Post-migration queries (idempotent)nuxt.hook('hub:db:queries:paths', (paths, dialect) => {  paths.push(resolve(`./seed.${dialect}.sql`))})

Type Sharing

// shared/types/db.tsimport type { users } from '~/server/db/schema'export type User = typeof users.$inferSelectexport type NewUser = typeof users.$inferInsert

WebSocket / Realtime

Enable experimental WebSocket:

// nuxt.config.tsnitro: { experimental: { websocket: true } }
// server/routes/ws/chat.tsexport default defineWebSocketHandler({  open(peer) {    peer.subscribe('chat')    peer.publish('chat', 'User joined')  },  message(peer, message) {    peer.publish('chat', message.text())  },  close(peer) {    peer.unsubscribe('chat')  }})

Deprecated (v0.10)

Removed Cloudflare-specific features:

  • hubAI() -> Use AI SDK with Workers AI Provider
  • hubBrowser() -> Puppeteer
  • hubVectorize() -> Vectorize
  • NuxtHub Admin -> Sunset Dec 31, 2025
  • npx nuxthub deploy -> Use wrangler deploy

Quick Reference

FeatureImportAccess
Databaseimport { db, schema } from 'hub:db'db.select(), db.insert(), etc.
KVimport { kv } from 'hub:kv'kv.get(), kv.set(), etc.
Blobimport { blob } from 'hub:blob'blob.put(), blob.get(), etc.

All are auto-imported on server-side.

Resources

  • Installation
  • Migration from v0.9
  • Database
  • Blob
  • KV
  • Cache
  • Deploy

すべてのファイル

0件のファイル

nuxthubをインストール

[[IMG_BASE64_PLACEHOLDER]] をダウンロードし、.claude/skills/ ディレクトリに展開してください。

ZIPをダウンロード

リポジトリをクローンし、スキルファイルをプロジェクトにコピーしてください。

git clone https://github.com/onmax/nuxt-skills/blob/main/skills/nuxthub/SKILL.md # Copy SKILL.md to your .claude/skills/ directory

コピー コピー
クイックセットアップ: スキルフォルダを .claude/skills/ にコピーしてください。Claudeは自動的にそのスキルを検出し、使用します。
リポジトリ onmax/nuxt-skills

関連スキル

golang-dependency-injection
更新された時間 2026年6月29日
tc-tracker
更新された時間 2026年8月27日
code-quality
更新された時間 2026年8月22日
altimate-data-engineering-skills
更新された時間 2026年8月23日
OR