
Kubb
- 52 installs
- 2 repo stars
- Updated August 3, 2026
- fandhe-ai/agent-reference-skills
Helps with ai & agent building tasks.
About
kubb is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- kubb
- AI & Agent Building
- AI-coding skill
Kubb by the numbers
- 52 all-time installs (skills.sh)
- Ranked #7,086 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/fandhe-ai/agent-reference-skills --skill kubbAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 52 |
|---|---|
| repo stars | ★ 2 |
| Last updated | August 3, 2026 |
| Repository | fandhe-ai/agent-reference-skills ↗ |
What it does
Helps with ai & agent building tasks.
Files
Kubb リファレンス
Kubb(kubb.dev)の全ドキュメントを網羅したスキル。 ユーザーのタスクに応じて適切な README.md を読み、そこから個別ファイルへ辿ること。
ディレクトリ構成
skills/kubb/
SKILL.md
references/
getting-started/
README.md
configure.md
installation.md
introduction.md
quick-start.md
telemetry.md
troubleshooting.md
plugins/
README.md
overview.md
core.md
plugin-oas.md
plugin-ts.md
plugin-client.md
plugin-zod.md
plugin-react-query.md
plugin-vue-query.md
plugin-solid-query.md
plugin-svelte-query.md
plugin-swr.md
plugin-faker.md
plugin-msw.md
plugin-cypress.md
plugin-mcp.md
plugin-redoc.md
helpers/
README.md
cli.md
mcp.md
unplugin.md
examples/
README.md
simple.md
typescript.md
client.md
fetch.md
cypress.md
react-query.md
vue-query.md
svelte-query.md
solid-query.md
swr.md
zod.md
faker.md
msw.md
mcp.md
generators.md
advanced.md
guides/
README.md
migration-guide.md
tutorial.md
samples/
README.md
basic-typescript-generation.md
react-query-hooks.md
zod-schema-generation.md
api-client-generation.md
msw-mock-handlers.md
multi-plugin-workflow.md
multiple-specs.md
programmatic-build.md
filtering-and-grouping.md
scripts/
README.md
cli.md
generate.md
install.md
mcp.md探索手順
タスクからカテゴリを引き、カテゴリの README.md で目的のページを特定する:
1. 下記マッピング表でタスクに対応するカテゴリを探す 2. そのカテゴリの references/{category}/README.md を参照して目的のページを特定する 3. 該当ページの .md を Read して詳細を確認する
タスク → カテゴリ マッピング
| タスク | カテゴリ | 参照 README |
|---|---|---|
| インストール、初期設定、kubb.config.ts オプション | getting-started | references/getting-started/README.md |
| トラブルシューティング、テレメトリー設定 | getting-started | references/getting-started/README.md |
| OpenAPI パース、TypeScript 型・API クライアント生成 | plugins | references/plugins/README.md |
| Zod スキーマ・Faker モック・MSW ハンドラー生成 | plugins | references/plugins/README.md |
| React Query / Vue Query / Solid Query / Svelte Query / SWR hooks 生成 | plugins | references/plugins/README.md |
| Cypress テスト定義・MCP サーバー・Redoc ドキュメント生成 | plugins | references/plugins/README.md |
| CLI コマンド詳細、MCP サーバー統合、Vite / webpack / Rollup / esbuild 統合 | helpers | references/helpers/README.md |
| 各プラグインの kubb.config.ts 設定例、カスタムジェネレーター | examples | references/examples/README.md |
| v3→v5 マイグレーション、ステップバイステップチュートリアル | guides | references/guides/README.md |
| 典型的な使い方・ワークフローを知りたい | samples | samples/README.md |
| インストール・CLI コマンド・generate コマンドを実行したい | scripts | scripts/README.md |
Advanced Configuration Example
複数プラグインを組み合わせた高度な設定例。TypeScript 型、API クライアント、React Query hooks、Zod スキーマ、MSW ハンドラーを同時に生成する。
kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginClient } from '@kubb/plugin-client'
import { pluginReactQuery } from '@kubb/plugin-react-query'
import { pluginZod } from '@kubb/plugin-zod'
import { pluginFaker } from '@kubb/plugin-faker'
import { pluginMsw } from '@kubb/plugin-msw'
export default defineConfig({
input: { path: './petStore.yaml' },
output: {
path: './src/gen',
clean: true,
barrelType: 'named',
},
plugins: [
pluginOas({
validate: true,
collisionDetection: true,
}),
pluginTs({
output: { path: './types' },
enumType: 'asConst',
dateType: 'date',
unknownType: 'unknown',
optionalType: 'questionTokenAndUndefined',
}),
pluginClient({
output: { path: './clients' },
client: 'fetch',
group: { type: 'tag' },
parser: 'zod',
}),
pluginReactQuery({
output: { path: './hooks' },
group: { type: 'tag' },
suspense: {},
infinite: {
queryParam: 'page',
initialPageParam: 0,
},
}),
pluginZod({
output: { path: './zod' },
group: { type: 'tag' },
typed: true,
dateType: 'stringOffset',
}),
pluginFaker({
output: { path: './mocks' },
group: { type: 'tag' },
dateType: 'date',
seed: [42],
}),
pluginMsw({
output: { path: './msw' },
group: { type: 'tag' },
handlers: true,
parser: 'faker',
}),
],
hooks: {
done: [
'npm run typecheck',
'biome format --write ./',
'biome lint --fix --unsafe ./src',
],
},
})依存関係
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-ts @kubb/plugin-client @kubb/plugin-react-query @kubb/plugin-zod @kubb/plugin-faker @kubb/plugin-msw
npm install @tanstack/react-query zod @faker-js/faker msw生成されるディレクトリ構造
src/gen/
├── types/ ← TypeScript 型・インターフェース
├── clients/ ← Fetch ベース API クライアント(Zod パース付き)
├── hooks/ ← React Query hooks(Suspense・無限クエリ対応)
├── zod/ ← Zod バリデーションスキーマ
├── mocks/ ← Faker モックデータジェネレーター
├── msw/ ← MSW ハンドラー
│ └── handlers.ts ← 全ハンドラーの統合ファイル
└── index.ts ← バレルエクスポートポイント
parser: 'zod'(client)— レスポンスを Zod スキーマでバリデーションparser: 'faker'(msw)— Faker でモックレスポンスを生成collisionDetection: true— スキーマ名の衝突を自動解決hooks.done— 生成後に型チェック・フォーマット・リントを実行
Axios Client Example
OpenAPI 仕様から Axios ベースの API クライアントを生成する設定例。
kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginClient } from '@kubb/plugin-client'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({ generators: [] }),
pluginTs({
output: { path: 'models' },
enumType: 'asConst',
}),
pluginClient({
output: { path: './clients' },
client: 'axios',
group: {
type: 'tag',
name: ({ group }) => `${group}Service`,
},
exclude: [{ type: 'tag', pattern: 'store' }],
pathParamsType: 'object',
}),
],
})依存関係
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-ts @kubb/plugin-client
npm install axios生成コードの使用例
import { getPetById } from './gen/clients/PetService'
const pet = await getPetById({ petId: 1 })Cypress Example
OpenAPI 仕様から Cypress リクエスト定義を生成する設定例。
kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginCypress } from '@kubb/plugin-cypress'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas(),
pluginTs({ output: { path: 'models' } }),
pluginCypress({
output: { path: './cypress' },
group: {
type: 'tag',
name: ({ group }) => `${group}Requests`,
},
}),
],
})依存関係
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-ts @kubb/plugin-cypress cypressFaker Example
OpenAPI 仕様から Faker.js モックデータジェネレーターを生成する設定例。
kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginFaker } from '@kubb/plugin-faker'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({ generators: [] }),
pluginTs({ output: { path: 'models' } }),
pluginFaker({
output: { path: './mocks' },
group: {
type: 'tag',
name: ({ group }) => `${group}Mocks`,
},
dateType: 'date',
seed: [100],
}),
],
})依存関係
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-ts @kubb/plugin-faker
npm install @faker-js/fakerFetch Client Example
OpenAPI 仕様から Fetch ベースの API クライアントを生成する設定例。
kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginClient } from '@kubb/plugin-client'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({ validate: false }),
pluginTs({
output: { path: 'models.ts' },
}),
pluginClient({
client: 'fetch',
output: { path: './clients' },
}),
],
hooks: {
done: ['npm run typecheck', 'biome format --write ./', 'biome lint --fix --unsafe ./src'],
},
})依存関係
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-ts @kubb/plugin-clientCustom Generators Example
カスタムジェネレーターを使って生成コードをカスタマイズする設定例。
概要
Kubb のジェネレーターシステムにより、プラグインの出力をカスタマイズできる。generators オプションにカスタム関数を渡すことで、スキーマやオペレーションの生成ロジックを制御する。
kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginClient } from '@kubb/plugin-client'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({
generators: [], // JSON スキーマ生成を無効化
}),
pluginTs({
output: { path: 'models' },
generators: undefined, // デフォルトのジェネレーターを使用
}),
pluginClient({
output: { path: './clients' },
transformers: {
name: (name, type) => {
if (type === 'file') {
return `${name}Client`
}
return name
},
},
}),
],
})ポイント
generators: []— 特定のプラグインの生成を無効化generators: undefined— デフォルトのジェネレーターを使用transformers.name— 生成されるファイル名・関数名をカスタマイズ- カスタムジェネレーターの詳細は
@kubb/plugin-oasの generators オプションを参照
MCP Example
OpenAPI 仕様から MCP(Model Context Protocol)サーバーを生成する設定例。
kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginClient } from '@kubb/plugin-client'
import { pluginMcp } from '@kubb/plugin-mcp'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({ generators: [] }),
pluginTs({ output: { path: 'models' } }),
pluginClient({
output: { path: './clients' },
client: 'fetch',
}),
pluginMcp({
output: { path: './mcp' },
client: {
baseURL: 'https://petstore.swagger.io/v2',
},
group: {
type: 'tag',
name: ({ group }) => `${group}Handlers`,
},
}),
],
})依存関係
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-ts @kubb/plugin-client @kubb/plugin-mcpMSW Example
OpenAPI 仕様から MSW(Mock Service Worker)ハンドラーを生成する設定例。
kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginFaker } from '@kubb/plugin-faker'
import { pluginMsw } from '@kubb/plugin-msw'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({ generators: [] }),
pluginTs({ output: { path: 'models' } }),
pluginFaker({ output: { path: './mocks' } }),
pluginMsw({
output: { path: './msw' },
group: {
type: 'tag',
name: ({ group }) => `${group}Handlers`,
},
handlers: true,
parser: 'faker',
}),
],
})依存関係
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-ts @kubb/plugin-faker @kubb/plugin-msw
npm install msw @faker-js/fakerReact Query Example
OpenAPI 仕様から React Query(TanStack Query)hooks を生成する設定例。
kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginReactQuery } from '@kubb/plugin-react-query'
import { QueryKey } from '@kubb/plugin-react-query/components'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({ generators: [] }),
pluginTs({ output: { path: 'models' } }),
pluginReactQuery({
client: { bundle: true },
output: { path: './hooks' },
group: { type: 'path' },
paramsType: 'inline',
pathParamsType: 'object',
suspense: {},
transformers: {
name: (name, type) => {
if (type === 'file' || type === 'function') {
return `${name}Hook`
}
return name
},
},
queryKey(props) {
const keys = QueryKey.getTransformer(props)
return ['"v5"', ...keys]
},
override: [
{
type: 'operationId',
pattern: 'findPetsByTags',
options: {
client: { dataReturnType: 'full' },
infinite: {
queryParam: 'pageSize',
initialPageParam: 0,
},
},
},
],
}),
],
})依存関係
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-ts @kubb/plugin-react-query
npm install @tanstack/react-query生成コードの使用例
import { useGetPetByIdHook } from './gen/hooks'
function PetDetail({ petId }: { petId: number }) {
const { data: pet } = useGetPetByIdHook({ petId })
return <div>{pet?.name}</div>
}Examples
Kubb の各プラグインを使った kubb.config.ts の設定例集。
| Name | Description | Path |
|---|---|---|
| Advanced Configuration Example | 複数プラグインを組み合わせた高度な設定例。TypeScript 型、API クライアント、React Query hooks、Zod スキーマ、MSW ハンドラーを同時に生成する。 | advanced.md |
| Axios Client Example | OpenAPI 仕様から Axios ベースの API クライアントを生成する設定例。 | client.md |
| Cypress Example | OpenAPI 仕様から Cypress リクエスト定義を生成する設定例。 | cypress.md |
| Custom Generators Example | カスタムジェネレーターを使って生成コードをカスタマイズする設定例。 | generators.md |
| Faker Example | OpenAPI 仕様から Faker.js モックデータジェネレーターを生成する設定例。 | faker.md |
| Fetch Client Example | OpenAPI 仕様から Fetch ベースの API クライアントを生成する設定例。 | fetch.md |
| MCP Example | OpenAPI 仕様から MCP(Model Context Protocol)サーバーを生成する設定例。 | mcp.md |
| MSW Example | OpenAPI 仕様から MSW(Mock Service Worker)ハンドラーを生成する設定例。 | msw.md |
| React Query Example | OpenAPI 仕様から React Query(TanStack Query)hooks を生成する設定例。 | react-query.md |
| Simple Example | 最小限の Kubb 設定例。OpenAPI 仕様から基本的なコードを生成する。 | simple.md |
| Solid Query Example | OpenAPI 仕様から Solid Query hooks を生成する設定例。 | solid-query.md |
| Svelte Query Example | OpenAPI 仕様から Svelte Query hooks を生成する設定例。 | svelte-query.md |
| SWR Example | OpenAPI 仕様から SWR hooks を生成する設定例。 | swr.md |
| TypeScript Example | OpenAPI 仕様から TypeScript 型を生成する設定例。複数の enum スタイルと出力形式を示す。 | typescript.md |
| Vue Query Example | OpenAPI 仕様から Vue Query hooks を生成する設定例。 | vue-query.md |
| Zod Example | OpenAPI 仕様から Zod バリデーションスキーマを生成する設定例。 | zod.md |
Simple Example
最小限の Kubb 設定例。OpenAPI 仕様から基本的なコードを生成する。
kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
export default defineConfig({
root: '.',
input: {
path: './petStore.yaml',
},
output: {
path: './src/gen',
clean: true,
},
plugins: [
pluginOas(),
],
})依存関係
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas実行
npx kubb generateSolid Query Example
OpenAPI 仕様から Solid Query hooks を生成する設定例。
kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginSolidQuery } from '@kubb/plugin-solid-query'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({ generators: [] }),
pluginTs({ output: { path: 'models' } }),
pluginSolidQuery({
output: { path: './hooks' },
group: {
type: 'tag',
name: ({ group }) => `${group}Hooks`,
},
}),
],
})依存関係
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-ts @kubb/plugin-solid-query
npm install @tanstack/solid-querySvelte Query Example
OpenAPI 仕様から Svelte Query hooks を生成する設定例。
kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginSvelteQuery } from '@kubb/plugin-svelte-query'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({ generators: [] }),
pluginTs({ output: { path: 'models' } }),
pluginSvelteQuery({
output: { path: './hooks' },
group: {
type: 'tag',
name: ({ group }) => `${group}Hooks`,
},
}),
],
})依存関係
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-ts @kubb/plugin-svelte-query
npm install @tanstack/svelte-querySWR Example
OpenAPI 仕様から SWR hooks を生成する設定例。
kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginSwr } from '@kubb/plugin-swr'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({ generators: [] }),
pluginTs({ output: { path: 'models' } }),
pluginSwr({
output: { path: './hooks' },
group: {
type: 'tag',
name: ({ group }) => `${group}Hooks`,
},
client: { dataReturnType: 'full' },
}),
],
})依存関係
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-ts @kubb/plugin-swr
npm install swrTypeScript Example
OpenAPI 仕様から TypeScript 型を生成する設定例。複数の enum スタイルと出力形式を示す。
kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
export default defineConfig([
// 基本: 単一ファイルに interface で出力
{
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({ validate: false }),
pluginTs({
output: { path: 'models.ts', barrelType: false },
syntaxType: 'interface',
enumType: 'enum',
}),
],
},
// タグでグループ化、asConst enum
{
input: { path: './petStore.yaml' },
output: { path: './src/gen2' },
plugins: [
pluginOas({ validate: false }),
pluginTs({
output: { path: 'models' },
group: { type: 'tag' },
enumType: 'asConst',
}),
],
},
])依存関係
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-tsenumType の比較
| 設定 | 出力例 |
|---|---|
'enum' | enum Status { Active = 'active' } |
'asConst' | const status = { Active: 'active' } as const |
'asPascalConst' | const Status = { Active: 'active' } as const |
'constEnum' | const enum Status { Active = 'active' } |
'literal' | `type Status = 'active' \ |
Vue Query Example
OpenAPI 仕様から Vue Query hooks を生成する設定例。
kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginVueQuery } from '@kubb/plugin-vue-query'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({ generators: [] }),
pluginTs({ output: { path: 'models' } }),
pluginVueQuery({
output: { path: './hooks' },
group: {
type: 'tag',
name: ({ group }) => `${group}Hooks`,
},
client: { dataReturnType: 'full' },
}),
],
})依存関係
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-ts @kubb/plugin-vue-query
npm install @tanstack/vue-queryZod Example
OpenAPI 仕様から Zod バリデーションスキーマを生成する設定例。
kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginZod } from '@kubb/plugin-zod'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({ generators: [] }),
pluginTs({ output: { path: 'models' } }),
pluginZod({
output: { path: './zod' },
group: {
type: 'tag',
name: ({ group }) => `${group}Schemas`,
},
typed: true,
dateType: 'stringOffset',
unknownType: 'unknown',
}),
],
})依存関係
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-ts @kubb/plugin-zod
npm install zod生成コードの使用例
import { petSchema } from './gen/zod'
const result = petSchema.safeParse(apiResponse)
if (result.success) {
console.log(result.data.name)
}Configure
kubb.config.ts の全オプションリファレンス。
基本構造
defineConfig ヘルパーを使うことで型安全な設定が得られる:
import { defineConfig } from '@kubb/core'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen' },
plugins: [],
})設定オプション一覧
name
| 項目 | 内容 |
|---|---|
| 型 | string |
| デフォルト | - |
| 説明 | CLI出力に表示される設定の表示名 |
root
| 項目 | 内容 |
|---|---|
| 型 | string |
| デフォルト | process.cwd() |
| 説明 | プロジェクトのルートディレクトリ |
input
OpenAPI仕様のソースを指定する。path と data のどちらか一方を使う。
input.path
| 項目 | 内容 |
|---|---|
| 型 | string |
| 説明 | OpenAPI仕様ファイルのパス(YAML/JSONまたはURL) |
input.data
| 項目 | 内容 |
|---|---|
| 型 | `string \ |
| 説明 | インラインOpenAPI仕様(文字列またはオブジェクト) |
output
output.path(必須)
| 項目 | 内容 |
|---|---|
| 型 | string |
| 説明 | 生成ファイルの出力ディレクトリ(rootからの相対パスまたは絶対パス) |
output.clean
| 項目 | 内容 |
|---|---|
| 型 | boolean |
| デフォルト | false |
| 説明 | 生成前に出力ディレクトリを削除するか |
output.format
| 項目 | 内容 |
|---|---|
| 型 | `'auto' \ |
| デフォルト | 'prettier' |
| 説明 | コードフォーマッターの選択。'auto' はインストール済みのものを自動検出(prettier / biome / oxfmt に対応) |
output.lint
| 項目 | 内容 |
|---|---|
| 型 | `'auto' \ |
| デフォルト | false |
| 説明 | 実行するリンター。'auto' はインストール済みのものを自動検出 |
output.write(非推奨)
| 項目 | 内容 |
|---|---|
| 型 | boolean |
| デフォルト | true |
| 説明 | ファイルをディスクに書き込むか(dry-runモード用)。storage の使用を推奨 |
output.storage
| 項目 | 内容 |
|---|---|
| 型 | Storage |
| デフォルト | fsStorage() |
| 説明 | カスタムストレージバックエンド(S3, Redis, インメモリ等) |
output.extension
| 項目 | 内容 |
|---|---|
| 型 | Record<string, string> |
| デフォルト | { '.ts': '.ts' } |
| 説明 | インポート文のファイル拡張子を上書きする |
output.barrelType
| 項目 | 内容 |
|---|---|
| 型 | `'all' \ |
| デフォルト | 'named' |
| 説明 | バレルファイル(index.ts)の生成方法 |
output.defaultBanner
| 項目 | 内容 |
|---|---|
| 型 | `'simple' \ |
| デフォルト | 'simple' |
| 説明 | 生成ファイル冒頭の自動生成コメントのスタイル |
output.override
| 項目 | 内容 |
|---|---|
| 型 | boolean |
| デフォルト | false |
| 説明 | 既存の外部ファイルを上書きするか |
plugins
| 項目 | 内容 |
|---|---|
| 型 | Array<KubbUserPlugin> |
| デフォルト | [] |
| 説明 | コード生成プラグインの配列 |
高度な設定
カスタムストレージ
ファイルシステム以外のバックエンド(S3, Redis, インメモリ等)に出力する場合は createStorage を使用:
import { createStorage, defineConfig } from '@kubb/core'
const memoryStorage = createStorage(() => {
const store = new Map<string, string>()
return {
name: 'memory',
async hasItem(key) { return store.has(key) },
async getItem(key) { return store.get(key) ?? null },
async setItem(key, value) { store.set(key, value) },
async removeItem(key) { store.delete(key) },
async getKeys(base) { /* ... */ },
async clear(base) { /* ... */ },
}
})
export default defineConfig({
input: { path: './petStore.yaml' },
output: {
path: './src/gen',
storage: memoryStorage,
},
plugins: [],
})条件付き設定(CLI引数を動的に参照)
import { defineConfig } from '@kubb/core'
export default defineConfig(({ config, watch, logLevel }) => ({
input: { path: './petStore.yaml' },
output: {
path: './src/gen',
clean: !watch,
},
plugins: [],
}))複数設定(配列エクスポート)
複数のOpenAPI仕様を処理したり、異なる設定で複数回生成する場合:
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
export default defineConfig([
{
name: 'petStore',
input: { path: './petStore.yaml' },
output: { path: './src/gen/petStore' },
plugins: [pluginOas(), pluginTs()],
},
{
name: 'userApi',
input: { path: './userApi.yaml' },
output: { path: './src/gen/userApi' },
plugins: [pluginOas(), pluginTs()],
},
])設定ファイルの検索順序
Kubbは以下の順序で設定ファイルを検索する:
1. kubb.config.ts 2. kubb.config.mts(v4.36.5+) 3. kubb.config.cts(v4.36.5+) 4. kubb.config.js 5. kubb.config.mjs 6. kubb.config.cjs 7. .kubbrc 8. 上記の configs/ または .config/ サブディレクトリ内のバリエーション
Related
- quick-start.md
- troubleshooting.md
Installation
Kubb のインストール方法とシステム要件。
システム要件
- Node.js: 20以上(必須)
- TypeScript: 4.7以上(任意)
- パッケージマネージャー: npm / pnpm / yarn / bun いずれも対応
インストール方法
推奨: インタラクティブセットアップ
npx kubb initこのコマンドが自動的に以下を行う:
1. package.json を検出または作成 2. OpenAPI/Swagger 仕様ファイルの場所を確認 3. 出力ディレクトリパスを確認 4. 使用プラグインを選択(TypeScript, React Query, Zod など) 5. 必要なnpmパッケージをすべてインストール 6. kubb.config.ts を生成
セットアップ完了後:
npx kubb generate手動インストール
コアパッケージ:
npm install --save-dev @kubb/cli @kubb/coreオプションプラグイン(カテゴリ別):
TypeScript & HTTP:
npm install --save-dev @kubb/plugin-ts # TypeScriptインターフェース生成
npm install --save-dev @kubb/plugin-client # HTTPクライアント生成Data Fetching:
npm install --save-dev @kubb/plugin-react-query
npm install --save-dev @kubb/plugin-swr
npm install --save-dev @kubb/plugin-vue-query
npm install --save-dev @kubb/plugin-solid-query
npm install --save-dev @kubb/plugin-svelte-queryValidation & Testing:
npm install --save-dev @kubb/plugin-zod # ランタイムバリデーション
npm install --save-dev @kubb/plugin-faker # モックデータ生成
npm install --save-dev @kubb/plugin-msw # Mock Service Workerハンドラー生成
npm install --save-dev @kubb/plugin-cypress # E2Eテストユーティリティ生成推奨 TypeScript 設定
{
"compilerOptions": {
"module": "ESNext",
"moduleResolution": "bundler",
"target": "ES2022",
"lib": ["ES2023"]
}
}インストール確認
npx kubb --versionNotes
- グローバルインストールよりプロジェクトごとのインストールを推奨
- ピア依存関係の警告は通常無視して問題ない
- 必要なプラグインだけをインストールすればよい
Related
- introduction.md
- quick-start.md
- configure.md
Introduction
Kubb はプラグインベースのコードジェネレーターで、OpenAPI/Swagger 仕様から本番環境で使えるTypeScriptコードを自動生成する。
概要
フロントエンド開発者が APIクライアントを手動で保守すると、バックエンドAPIの変更時に型の陳腐化・クライアント関数の更新漏れ・フロントエンドとバックエンドの不整合が生じる。Kubb はOpenAPI仕様を唯一の真実源として読み込み、単一コマンドで完全な本番対応コードを生成することでこの問題を解決する。
生成できるコード
| カテゴリ | 内容 |
|---|---|
| TypeScript Types | API仕様に対応したインターフェース・型・スキーマ |
| HTTP Clients | Axios / Fetch / カスタムHTTPクライアントラッパー(型安全) |
| Data Fetching Hooks | React Query, Vue Query, Solid Query, Svelte Query, SWR |
| Validation | Zodスキーマ(Zod v4サポート済み) |
| Mock Data | Faker.jsジェネレーターおよびMSW(Mock Service Worker)ハンドラー |
| Testing | Cypressコマンド(E2Eテスト用ユーティリティ) |
| Documentation | ReDoc連携によるAPIドキュメント |
| AI Integration | AIアシスタント向けMCP(Model Context Protocol)サーバー |
対応OpenAPIバージョン
- OpenAPI 2.0(Swagger)
- OpenAPI 3.0
- OpenAPI 3.1
システム要件
- Node.js: 20以上
クイックスタート
npx kubb init
npx kubb generateinit コマンドは以下を実行する:
1. package.json がなければ作成 2. OpenAPI/Swagger ファイルの場所を対話形式で確認 3. 使用プラグインを選択(TypeScript, React Query, Zod など) 4. 依存パッケージをインストール 5. kubb.config.ts を生成
プラグインエコシステム
コアプラグイン
| パッケージ | 用途 |
|---|---|
@kubb/plugin-oas | OpenAS仕様のパース(多くのプラグインの依存) |
@kubb/plugin-ts | TypeScript型・インターフェース生成 |
@kubb/plugin-client | HTTPクライアント生成 |
@kubb/plugin-zod | Zodスキーマ生成 |
@kubb/plugin-react-query | React Query フック生成 |
@kubb/plugin-vue-query | Vue Query フック生成 |
@kubb/plugin-solid-query | Solid Query フック生成 |
@kubb/plugin-svelte-query | Svelte Query フック生成 |
@kubb/plugin-swr | SWR フック生成 |
@kubb/plugin-faker | Faker.jsモックデータ生成 |
@kubb/plugin-msw | MSWハンドラー生成 |
@kubb/plugin-cypress | Cypressテストユーティリティ生成 |
@kubb/plugin-mcp | MCPサーバー生成 |
@kubb/plugin-redoc | ReDocドキュメント生成 |
ビルドツール
| パッケージ | 用途 |
|---|---|
@kubb/core | コアライブラリ(プログラマティック利用) |
@kubb/cli | CLIツール |
@kubb/mcp | MCPサーバー |
unplugin-kubb | Vite/Webpack/Rollupプラグイン |
Kubbを選ぶ理由
- 単一の真実源: OpenAPI仕様のみを管理
- プラグインベース: 必要な生成物だけを選択
- ゼロメンテナンス: API変更時は再生成するだけ
- コンパイル時型安全: ランタイムエラーを排除
- 拡張可能: カスタムプラグインで任意の生成ロジックを追加
FAQ
JavaScriptプロジェクトでも使えるか? Kubbは TypeScriptファイルを生成するが、JavaScriptとして利用するかトランスパイルして使用可能。
GraphQLはサポートされているか? No。KubbはOpenAPI/Swagger REST APIのみを対象とする。
生成コードの更新方法は? npx kubb generate を再実行するだけで最新のAPI変更が反映される。
カスタマイズはできるか? はい。ジェネレーター、トランスフォーマー、カスタムプラグインで対応可能。
本番環境で使えるか? はい。広く本番環境で利用されており、TypeScriptのベストプラクティスに従った型安全なコードを生成する。
コミュニティ・サポート
- Discord: discord.gg/shfBFeczrm
- GitHub: github.com/kubb-labs/kubb
Related
- installation.md
- quick-start.md
- configure.md
Quick Start
2分以内にOpenAPI仕様からコードを生成するためのガイド。
前提条件
- Node.js 20以上
- TypeScript 4.7以上(任意)
- 有効なOpenAPI 2.0, 3.0, または 3.1 ファイル(YAML or JSON)
方法1: インタラクティブセットアップ(推奨)
npx kubb initウィザードが以下を順に実行する:
1. package.json を検出または作成 2. OpenAPI仕様ファイルのパスを確認 3. 出力ディレクトリパスを確認 4. プラグインを選択(React Query, Zod など) 5. 依存パッケージを自動インストール 6. kubb.config.ts を生成
その後、コードを生成:
npx kubb generate方法2: 手動セットアップ
Step 1: コアパッケージをインストール
npm install --save-dev @kubb/cli @kubb/coreStep 2: kubb.config.ts を作成
import { defineConfig } from '@kubb/core'
export default defineConfig({
root: '.',
input: {
path: './petStore.yaml',
},
output: {
path: './src/gen',
},
plugins: [],
})Step 3: npm スクリプトを追加
{
"scripts": {
"generate": "kubb generate"
}
}Step 4: コードを生成
npm run generate設定例
TypeScript + React Query
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginReactQuery } from '@kubb/plugin-react-query'
export default defineConfig({
root: '.',
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas(),
pluginTs(),
pluginReactQuery(),
],
})複数OpenAPI仕様を同時処理
export default defineConfig([
{
name: 'petStore',
input: { path: './petStore.yaml' },
output: { path: './src/gen/petStore' },
plugins: [pluginOas(), pluginTs()],
},
{
name: 'userApi',
input: { path: './userApi.yaml' },
output: { path: './src/gen/userApi' },
plugins: [pluginOas(), pluginTs()],
},
])プログラマティック利用
@kubb/core の build 関数を使ってNode.jsスクリプトやビルドシステムに組み込める:
import { build } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
const { error, files } = await build({
config: {
root: '.',
input: { path: './petStore.yaml' },
output: { path: './gen' },
plugins: [pluginOas(), pluginTs()],
},
})Notes
input.pathにはURLも指定可能output.clean: trueで生成前に出力ディレクトリをクリーンアップ- プラグインの
include/excludeオプションで生成するエンドポイントを絞り込める - 仕様変更後は
npx kubb generateを再実行するだけ
Related
- installation.md
- configure.md
- troubleshooting.md
Getting Started
| Name | Description | Path |
|---|---|---|
| Configure | kubb.config.ts の全オプションリファレンス。 | configure.md |
| Installation | Kubb のインストール方法とシステム要件。 | installation.md |
| Introduction | Kubb はプラグインベースのコードジェネレーター… | introduction.md |
| Quick Start | 2分以内にOpenAPI仕様からコードを生成するための… | quick-start.md |
| Telemetry | Kubb CLIが収集する匿名使用データについての説明。 | telemetry.md |
| Troubleshooting | Kubbでよく発生する問題とその解決方法。 | troubleshooting.md |
Telemetry
Kubb CLIが収集する匿名使用データについての説明。
収集される情報
各コマンド実行後に以下の匿名情報が収集される:
| 項目 | 内容 |
|---|---|
| コマンドの種類 | generate, validate, mcp, agent |
| バージョン情報 | Kubbのバージョン、Node.jsのバージョン |
| 環境 | OS、CI環境の検出 |
| プラグイン詳細 | プラグイン名と設定オプション(generate コマンドのみ) |
| パフォーマンス | 実行時間、生成ファイル数 |
| 結果 | 成功または失敗 |
収集されない情報
プライバシー保護のため、以下は明示的に除外される:
- OpenAPI仕様の内容
- ファイルパスやディレクトリ構造
- 認証情報・APIキー・トークン
- ソースコードや生成されたコード
- IPアドレスやユーザー識別子
テレメトリーの無効化
2つの環境変数のいずれかで無効化できる。
方法1: 標準的な方法(DO_NOT_TRACK)
export DO_NOT_TRACK=1方法2: Kubb固有の変数(KUBB_DISABLE_TELEMETRY)
export KUBB_DISABLE_TELEMETRY=1どちらも "1" または "true" を受け付ける。
データの送信方法
- フォーマット: OpenTelemetry OTLPスタンダード
- 送信先:
https://otlp.kubb.dev/v1/traces(単一のHTTP POSTリクエスト) - タイムアウト: 5秒
- フォールバック: 送信失敗時はサイレントに無視(CLI操作を妨げない)
- 前提: アクティブなインターネット接続がある場合のみ送信
データの活用目的
収集されたメトリクスは以下の目的で利用される:
- フィーチャーの採用状況の把握
- パフォーマンス問題の特定
- 非推奨オプションへの依存の検出
- 開発優先順位の決定
Related
- introduction.md
- troubleshooting.md
Troubleshooting
Kubbでよく発生する問題とその解決方法。
インストール問題
Node.jsバージョンエラー
症状: バージョン関連のエラーが発生する
解決策: Kubbは Node.js 20以上 が必須。
node --version
# v20.x.x 以上であることを確認パッケージマネージャーの競合
症状: 依存関係のインストールが失敗する、または予期しないバージョンが入る
解決策: キャッシュをクリアして依存関係を再インストールする:
# npm
npm cache clean --force && npm install
# pnpm
pnpm store prune && pnpm install
# yarn
yarn cache clean && yarn install
# bun
bun pm cache rm && bun install設定問題
設定ファイルが認識されない
症状: kubb generate 実行時に設定ファイルが見つからないエラー
解決策: Kubbが受け付ける設定ファイル名は以下のいずれか:
kubb.config.tskubb.config.jskubb.config.mjskubb.config.cjs
OpenAPI仕様のバリデーションエラー
症状: OpenAPIファイルのパースエラー
解決策: Swagger Editor でOpenAPI仕様を事前にバリデーションする。
モジュールエラー(ESM)
症状: require is not defined または Cannot use import statement エラー
解決策: package.json に "type": "module" を追加するか、設定ファイルの拡張子を .mjs にする:
{
"type": "module"
}生成の失敗
プラグインが見つからない
症状: プラグイン関連のエラーが発生する
解決策: ほとんどのプラグインは @kubb/plugin-oas を依存として必要とする:
npm install --save-dev @kubb/plugin-oas出力が空になる
症状: 生成コマンドは成功するが、ファイルが生成されない
解決策: 1. OpenAPIファイルの内容を確認する 2. プラグインの include / exclude 設定を確認する
TypeScriptエラー
症状: 生成されたコードでTypeScriptコンパイルエラーが発生する
解決策: tsconfig.json の moduleResolution 設定を確認する:
{
"compilerOptions": {
"moduleResolution": "bundler"
}
}パフォーマンス問題
生成が遅い
解決策: include オプションで必要なエンドポイントのみを生成し、不要なプラグインを無効化する。
メモリ不足エラー
症状: JavaScript heap out of memory エラー
解決策: Node.jsのヒープサイズを増やす:
NODE_OPTIONS="--max-old-space-size=4096" npx kubb generateランタイム問題
インポートエラー
症状: 生成されたコードのインポートが解決できない
解決策:
- 出力パスとインポート文が一致しているか確認する
- バレルファイル(
index.ts)の生成設定を確認する(output.barrelType)
クライアントリクエストの失敗
症状: 生成されたHTTPクライアントがリクエストに失敗する
解決策:
baseURLの設定が正しいか確認する- CORSの設定を確認する
デバッグモード
詳細なログを .kubb ディレクトリに出力する:
kubb generate --debugこのログファイルを使って問題を特定できる。
サポート
問題が解決しない場合は以下を活用する:
- GitHub Issues: github.com/kubb-labs/kubb/issues(バージョン番号と最小再現手順を添えて報告)
- Discord: discord.gg/shfBFeczrm
Related
- installation.md
- configure.md
- telemetry.md
マイグレーションガイド
Kubb v5 への移行
Node.js 22 必須
Kubb v5 は Node.js 22 以上が必要。
ファクトリ関数のリネーム
define* プレフィックスが create* に変更(Vite エコシステムの慣例に合わせ、define* は純粋な型/設定ヘルパー用に予約):
// v5 以前
import { definePlugin } from '@kubb/core'
// v5 以降
import { createPlugin } from '@kubb/core'対象: definePlugin → createPlugin, defineAdapter → createAdapter, defineGenerator → createGenerator, defineLogger → createLogger, defineStorage → createStorage
単一プラグインインスタンスルール
同一プラグインを設定内で複数回使用できなくなった。複数インスタンスは単一に統合する必要がある。
PluginManager → PluginDriver
| v5 以前 | v5 以降 |
|---|---|
PluginManager | PluginDriver |
pluginManager | driver |
usePluginManager | usePluginDriver |
プラグイン形式の統一
オブジェクト形式・JSON 形式は削除。配列形式のみ有効:
import { pluginTs } from '@kubb/plugin-ts'
export default defineConfig({
plugins: [pluginTs({})],
})@kubb/plugin-ts の変更
mapper オプションが削除。新しい transform オプション(AST ノード変換)が計画されている。
---
Kubb v3 への移行
新機能
- Static Class Client:
clientType: 'staticClass'でクラスベースのクライアント生成 - Generators: テンプレートに代わる新しいコード生成システム
- CLI 改善: 20-30% の高速化、プログレスバー、
--debugモード - `output.extension`: ファイル拡張子の制御
- `output.barrelType`:
exportTypeの後継
パッケージリネーム
| v2 パッケージ | v3 パッケージ |
|---|---|
@kubb/swagger-client | @kubb/plugin-client |
@kubb/swagger-faker | @kubb/plugin-faker |
@kubb/swagger-msw | @kubb/plugin-msw |
@kubb/swagger | @kubb/plugin-oas |
@kubb/swagger-ts | @kubb/plugin-ts |
@kubb/swagger-zod | @kubb/plugin-zod |
@kubb/swagger-redoc | @kubb/plugin-redoc |
@kubb/swagger-swr | @kubb/plugin-swr |
TanStack Query パッケージの分割
統合パッケージがフレームワーク別に分割。TanStack Query v4 のサポートは廃止(v5 必須):
@kubb/plugin-react-query@kubb/plugin-vue-query@kubb/plugin-svelte-query@kubb/plugin-solid-query
MSW v2 必須
MSW v1 のサポートは廃止。v2 が必須。
出力設定の変更
| v2 | v3 |
|---|---|
output.extName | output.extension に統合 |
output.exportAs | group 設定に統合 |
exportType | output.barrelType |
group.output | 自動生成(root + plugin パスから) |
プラグイン固有の変更
@kubb/plugin-client:
client.importPath→importPath- 新オプション:
operations,parser('client'\|'zod'),paramsType
@kubb/plugin-ts:
enumSuffixデフォルト:'enum'mapperで TypeScript ノードオーバーライド
@kubb/plugin-zod:
typedSchema→inferred- 新オプション:
operations,mapper
@kubb/plugin-swr / @kubb/plugin-react-query:
dataReturnType→client.dataReturnType- 新オプション:
paramsType - ミューテーションに
mutationKey生成 - 必須パラメータに基づく
enabled自動生成
@kubb/plugin-oas:
experimentalFilter,experimentalSort削除(外部ツール openapi-format の使用を推奨)
Node.js サポート
v3 の最小要件は Node.js 20(v18 サポート廃止)。
guides
| Name | Description | Path |
|---|---|---|
| マイグレーションガイド | Kubb v5 への移行 | migration-guide.md |
| 基本チュートリアル | OpenAPI 仕様から TypeScript 型を生成するステップバイステップガイド | tutorial.md |
基本チュートリアル
OpenAPI 仕様から TypeScript 型を生成するステップバイステップガイド。
前提条件
- Node.js 20 以上
- TypeScript 4.7 以上
1. プロジェクト構造の作成
.
├── src/
├── petStore.yaml
├── kubb.config.ts
└── package.json2. OpenAPI 仕様の準備
petStore.yaml:
openapi: 3.0.0
info:
title: Pet Store API
version: 1.0.0
paths:
/pets:
get:
operationId: listPets
responses:
'200':
description: List of pets
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Pet'
components:
schemas:
Pet:
type: object
required:
- id
- name
properties:
id:
type: integer
format: int64
name:
type: string
tag:
type: string3. 設定ファイルの作成
kubb.config.ts:
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
export default defineConfig(() => {
return {
root: '.',
input: {
path: './petStore.yaml',
},
output: {
path: './src',
},
plugins: [
pluginOas({
generators: [],
validate: true,
}),
pluginTs({
output: {
path: 'models',
},
}),
],
}
})ポイント:
generators: []— JSON スキーマ生成をスキップvalidate: true— 処理前に仕様の妥当性を検証output.path: 'models'— TypeScript 型の出力先
4. 依存関係のインストール
package.json:
{
"name": "kubb-getting-started",
"scripts": {
"generate": "kubb generate"
},
"dependencies": {
"@kubb/cli": "latest",
"@kubb/core": "latest",
"@kubb/plugin-oas": "latest",
"@kubb/plugin-ts": "latest"
},
"devDependencies": {
"typescript": "^5.9.0"
}
}npm install5. コード生成の実行
npm run generate6. 生成結果
src/
├── index.ts
└── models/
├── Category.ts
├── Pet.ts
├── User.ts
└── index.ts生成される型の例(src/models/Pet.ts)
/**
* Generated by Kubb (https://kubb.dev/).
* Do not edit manually.
*/
export type Pet = {
/**
* @type integer, int64
*/
id: number
/**
* @type string
*/
name: string
/**
* @type string | undefined
*/
tag?: string
}次のステップ
- 追加プラグインの探索(React Query、Zod 等)
- TypeScript プラグインの詳細設定オプション
- 設定リファレンスの確認
@kubb/cli
OpenAPI 仕様からコードを生成する Kubb の CLI ツール。
インストール
bun add -d @kubb/cli
pnpm add -D @kubb/cli
npm install --save-dev @kubb/cli
yarn add -D @kubb/cliコマンド一覧
kubb init
新規プロジェクトのインタラクティブセットアップウィザード。
npx kubb initワークフロー: 1. package.json の作成/検出 2. パッケージマネージャーの検出(npm, pnpm, yarn, bun) 3. OpenAPI 仕様ファイルのパスを入力 4. 出力ディレクトリの指定 5. プラグイン選択メニュー表示 6. パッケージのインストール 7. kubb.config.ts の生成
デフォルトで @kubb/plugin-oas と @kubb/plugin-ts が選択される。
kubb generate(または kubb)
設定ファイルに基づいてコードを生成する。
kubb generate [OPTIONS]
kubb petStore.yamlオプション:
| オプション | 説明 |
|---|---|
-c, --config | 設定ファイルのパス |
-l, --logLevel | ログレベル: silent \ |
-w, --watch | 入力ファイルの変更を監視 |
-v, --verbose | プラグインのパフォーマンスメトリクスを含む詳細ログ |
-s, --silent | 全出力を抑制 |
-d, --debug | 完全なデバッグログ(.kubb/kubb-{name}-{timestamp}.log を作成) |
-h, --help | ヘルプを表示 |
-v, --version | バージョンを表示 |
ログレベル詳細:
silent: 出力なしinfo: 警告、エラー、情報メッセージ(デフォルト)verbose: プラグインのタイミングとパフォーマンスメトリクスを追加debug: 完全な実行トレースと詳細情報
kubb start
SSE(Server-Sent Events)ストリーミング付き HTTP サーバーを起動する。
kubb start petStore.yaml
kubb start --config kubb.config.tsオプション:
| オプション | デフォルト | 説明 |
|---|---|---|
-c, --config | — | 設定ファイルのパス |
-l, --logLevel | info | ログレベル |
-p, --port | 自動選択 | サーバーポート |
--host | localhost | サーバーホスト名 |
kubb validate
Swagger/OpenAPI ファイルの構文と構造をチェックする。oas-normalize を使用。
kubb validate --input petstore.yamlオプション:
| オプション | 説明 |
|---|---|
-i, --input | Swagger/OpenAPI ファイルのパス |
-h, --help | ヘルプを表示 |
@kubb/oas パッケージが必要。
kubb agent
Kubb Studio との WebSocket 連携用 HTTP サーバーを管理する。
kubb agent start
kubb agent start --config ./my-config.ts
kubb agent start --host 0.0.0.0 --port 8080
kubb agent start --allow-write
kubb agent start --allow-all`agent start` オプション:
| オプション | デフォルト | 説明 |
|---|---|---|
-c, --config | kubb.config.ts | 設定ファイルのパス |
-p, --port | 3000 | サーバーポート |
--host | localhost | サーバーホスト名 |
--allow-write | — | ファイルシステム書き込みを許可 |
--allow-all | — | 全権限を付与(--allow-write を含む) |
環境変数:
| 変数 | 説明 |
|---|---|
PORT | サーバーポート |
KUBB_ROOT | プロジェクトルート |
KUBB_CONFIG | 設定ファイルのパス |
KUBB_AGENT_TOKEN | 認証トークン(Kubb Studio で作成) |
KUBB_STUDIO_URL | Studio エンドポイント |
KUBB_ALLOW_WRITE | 書き込み許可 |
KUBB_ALLOW_ALL | 全権限 |
API エンドポイント: GET /api/health — サーバーステータス確認
kubb mcp
AI アシスタント用の MCP(Model Context Protocol)サーバーを起動する。v4.36.5 以降 kubb.config.mts / kubb.config.cts にも対応。
npx kubb mcp@kubb/mcp パッケージが必要。Claude Desktop、Cursor 等の MCP 対応ツールで利用可能。
デバッグ
--debug フラグで .kubb/ ディレクトリに詳細ログを作成:
- タイムスタンプ
- 設定詳細
- プラグイン実行タイミング
- スキーマパース情報
- ファイル生成進捗
- フォーマッター/リンター詳細
- エラースタックトレース
テレメトリ
kubb generate 実行後に匿名使用統計を収集。OpenAPI 仕様、ファイルパス、シークレットは収集されない。
無効化:
DO_NOT_TRACK=1 kubb generate # 標準的な無効化
KUBB_DISABLE_TELEMETRY=1 kubb generate # Kubb 固有の無効化@kubb/mcp
Kubb のコード生成機能を AI アシスタント(Claude、Cursor 等)に公開する MCP(Model Context Protocol)サーバー。
インストール
npm install --save-dev @kubb/mcp @kubb/cli両パッケージが必要。インストールせずに直接実行も可能:
npx @kubb/mcpクイックスタート
1. サーバーの起動
npx kubb mcpstdio 経由で通信する MCP サーバーが起動し、クライアントリクエストを待機する。
2. Claude Desktop の設定
設定ファイルに MCP サーバーを追加:
ファイルの場所:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"kubb": {
"command": "npx",
"args": ["kubb", "mcp"]
}
}
}3. 設定ファイルの作成
プロジェクトに kubb.config.ts が存在し、プラグインと入出力パスが定義されていることを確認する。
4. AI との対話
AI アシスタントに自然言語でコード生成をリクエストする。
利用可能なツール
generate ツール
OpenAPI/Swagger 仕様からコードを生成する。
パラメータ:
| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
config | string | kubb.config.ts | 設定ファイルのパス |
input | string | — | OpenAPI 仕様ファイルのパス(設定を上書き) |
output | string | — | 出力ディレクトリ(設定を上書き) |
logLevel | enum | info | silent \ |
startServer API
@kubb/plugin-mcp から startServer 関数がエクスポートされており、カスタムサーバーロジックの実装や追加トランスポート対応が可能:
import { startServer } from '@kubb/plugin-mcp'
startServer({ /* options */ })ユースケース
- 初回コード生成: 新規プロジェクトで OpenAPI 仕様から TypeScript 型を生成
- 仕様更新時の再生成: API 仕様変更後にクライアントコードを再生成
- トラブルシューティング: verbose ログで生成問題を診断
- カスタムトランスポート:
startServerで独自 MCP サーバー実装
トラブルシューティング
| 問題 | 解決策 |
|---|---|
| コマンドが見つからない | @kubb/cli をインストール: npm install --save-dev @kubb/cli |
| AI が接続できない | 設定ファイルの場所を確認、Claude Desktop を再起動、サーバーがエラーなく起動することを確認 |
| 生成が失敗する | kubb.config.ts の妥当性を確認、OpenAPI 仕様のパスを確認、logLevel: debug を使用 |
| 進捗が表示されない | MCP クライアントのバッファリングに依存、生成はバックグラウンドで継続 |
helpers
| Name | Description | Path |
|---|---|---|
| @kubb/cli | OpenAPI 仕様からコードを生成する Kubb の CLI… | cli.md |
| @kubb/mcp | Kubb のコード生成機能を AI アシスタントに公開… | mcp.md |
| unplugin-kubb | Kubb コード生成を複数のビルドツールに統合する… | unplugin.md |
unplugin-kubb
Kubb コード生成を複数のビルドツールに統合するユニバーサルプラグイン。 Vite、webpack、Rollup、esbuild、Nuxt、Astro、Rspack に対応。
インストール
bun add -d unplugin-kubb @kubb/core
pnpm add -D unplugin-kubb @kubb/core
npm install --save-dev unplugin-kubb @kubb/core
yarn add -D unplugin-kubb @kubb/core設定オプション
config
- 型:
UserConfig - 必須:
true - 説明: Kubb の生成設定(input, output, plugins 等)
ビルドツール別の統合例
Vite
// vite.config.ts
import kubb from 'unplugin-kubb/vite'
export default defineConfig({
plugins: [
kubb({
config: {
root: '.',
input: { path: './petStore.yaml' },
output: { path: './src/gen' },
plugins: [/* ... */],
},
}),
],
})Rollup
// rollup.config.js
import kubb from 'unplugin-kubb/rollup'
export default {
plugins: [
kubb({
config: {
// ...UserConfig
},
}),
],
}webpack
// webpack.config.js
const kubb = require('unplugin-kubb/webpack')
module.exports = {
plugins: [
kubb({
config: {
// ...UserConfig
},
}),
],
}Rspack
// rspack.config.js
const kubb = require('unplugin-kubb/rspack')
module.exports = {
plugins: [
kubb({
config: {
// ...UserConfig
},
}),
],
}esbuild
import { build } from 'esbuild'
import kubb from 'unplugin-kubb/esbuild'
build({
plugins: [
kubb({
config: {
// ...UserConfig
},
}),
],
})Vue CLI
// vue.config.js
const kubb = require('unplugin-kubb/webpack')
module.exports = {
configureWebpack: {
plugins: [
kubb({
config: {
// ...UserConfig
},
}),
],
},
}Nuxt
// nuxt.config.ts
export default defineNuxtConfig({
modules: [
['unplugin-kubb/nuxt', {
config: {
// ...UserConfig
},
}],
],
})Astro
// astro.config.mjs
import kubb from 'unplugin-kubb/astro'
export default defineConfig({
integrations: [
kubb({
config: {
// ...UserConfig
},
}),
],
})制限事項
hookオプションは unplugin では動作しない。生成後に Prettier や ESLint を実行する必要がある場合は、Kubb CLI を使用すること。
@kubb/core
全 Kubb プラグインの基盤となるコアモジュール。build() API を提供する。
インストール
bun add -d @kubb/core
pnpm add -D @kubb/core
npm install --save-dev @kubb/core
yarn add -D @kubb/corebuild() 関数
コード生成プロセスを開始する主要関数。設定に定義されたプラグインとライフサイクルメソッドをトリガーする。
import { build } from '@kubb/core'
const { error, files, driver } = await build({
config: {
root: '.',
input: {
data: '',
},
output: {
path: './gen',
},
},
})
console.log(files)戻り値
| プロパティ | 型 | 説明 |
|---|---|---|
error | `Error \ | undefined` |
files | KubbFile[] | 生成されたファイル出力 |
driver | PluginDriver | プラグイン実行を管理するドライバーインスタンス |
ストレージ API(v4.36.0+)
カスタムストレージバックエンドを定義するファクトリ関数:
import { defineStorage, fsStorage, memoryStorage } from '@kubb/core'| エクスポート | 説明 |
|---|---|
defineStorage() | カスタムストレージドライバーの定義 |
fsStorage() | ファイルシステムストレージ(デフォルト) |
memoryStorage() | インメモリストレージ(テスト用) |
URLPath ヘルパー(v4.36.1+)
カスタムプラグインでパスの標準化・組み立てに使用するユーティリティクラス:
import { URLPath } from '@kubb/core'設定の型
build() は UserConfig 型のオブジェクトを受け取る。詳細は configure を参照。
プラグイン概要
Kubb はプラグインベースのアーキテクチャで、OpenAPI 仕様から様々なコード成果物を生成する。
プラグインの依存関係
ほとんどのプラグインは @kubb/plugin-oas を基盤として必要とする。
@kubb/plugin-oas(必須基盤)
├── @kubb/plugin-ts(TypeScript 型生成)
├── @kubb/plugin-client(API クライアント)
│ ├── @kubb/plugin-react-query
│ ├── @kubb/plugin-vue-query
│ ├── @kubb/plugin-solid-query
│ ├── @kubb/plugin-svelte-query
│ └── @kubb/plugin-swr
├── @kubb/plugin-zod(バリデーション)
├── @kubb/plugin-faker(モックデータ)
├── @kubb/plugin-msw(MSW ハンドラー)
├── @kubb/plugin-cypress(Cypress テスト)
├── @kubb/plugin-mcp(MCP サーバー)
└── @kubb/plugin-redoc(API ドキュメント)カテゴリ別プラグイン
基盤レイヤー
- @kubb/plugin-oas: OpenAPI 仕様の読み込み・パース・バリデーション
型生成
- @kubb/plugin-ts: TypeScript インターフェース・型の生成
API クライアント
- @kubb/plugin-client: Axios/Fetch ベースの HTTP クライアント生成
データフェッチング
- @kubb/plugin-react-query: TanStack Query for React
- @kubb/plugin-vue-query: TanStack Query for Vue
- @kubb/plugin-solid-query: TanStack Query for SolidJS
- @kubb/plugin-svelte-query: TanStack Query for Svelte
- @kubb/plugin-swr: Vercel SWR hooks
バリデーション・モック
- @kubb/plugin-zod: Zod バリデーションスキーマ生成
- @kubb/plugin-faker: Faker.js モックデータ生成
- @kubb/plugin-msw: Mock Service Worker ハンドラー生成
テスト・ドキュメント
- @kubb/plugin-cypress: Cypress リクエスト定義(v3.7.0+)
- @kubb/plugin-redoc: Redoc HTML ドキュメント生成
AI 連携
- @kubb/plugin-mcp: MCP サーバー生成(v3.9.0+)
設定例
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginClient } from '@kubb/plugin-client'
export default defineConfig({
input: { path: './petstore.yaml' },
output: { path: './src/gen' },
plugins: [
pluginOas(),
pluginTs(),
pluginClient(),
],
})共通パターン
全プラグインは一貫したパターンに従う:
- パッケージマネージャーでインストール
kubb.config.tsのplugins配列に追加- 出力ディレクトリを指定
- 依存プラグインを宣言
@kubb/plugin-client
OpenAPI 仕様から API クライアントコード(Axios/Fetch)を生成するプラグイン。
インストール
npm install --save-dev @kubb/plugin-client設定オプション
output
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
output.path | string | 'clients' | 出力先パス |
output.barrelType | `'all' \ | 'named' \ | 'propagate' \ |
output.banner | `string \ | (oas) => string` | — |
output.footer | `string \ | (oas) => string` | — |
output.override | boolean | false | 既存ファイル上書き |
クライアント設定
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
client | `'axios' \ | 'fetch'` | 'axios' |
clientType | `'function' \ | 'class' \ | 'staticClass'` |
importPath | string | '@kubb/plugin-client/clients/${client}' | カスタムクライアントモジュールパス |
注意: Query プラグイン(React Query 等)は clientType: 'function' のみ対応。class ベースのクライアントとは非互換。
データ・パラメータ
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
dataReturnType | `'data' \ | 'full'` | 'data' |
parser | `'client' \ | 'zod'` | 'client' |
paramsType | `'object' \ | 'inline'` | 'inline' |
pathParamsType | `'object' \ | 'inline'` | 'inline' |
paramsCasing | 'camelcase' | — | パラメータ名を camelCase に変換 |
contentType | `'application/json' \ | string` | — |
その他
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
urlType | `'export' \ | false` | false |
baseURL | string | — | カスタムベース URL |
bundle | boolean | false | クライアントランタイムを .kubb にコピー |
operations | boolean | false | operations.ts の生成 |
wrapper.className | string | — | 複合ラッパークラス名 |
group.type | 'tag' | — | タグによるグループ化 |
include / exclude | Array<{type, pattern}> | — | フィルタリング |
override | Array<{type, pattern, options}> | — | 条件付きオーバーライド |
transformers.name | (name, type?) => string | — | 名前カスタマイズ |
generators | Generator[] | — | カスタムジェネレーター |
カスタムクライアントの要件
importPath 使用時は以下の型をエクスポートする必要がある:
RequestConfig<TData>ResponseConfig<TData>ResponseErrorConfig<TError>Client(Query プラグイン使用時に必須)
生成コードの例
Function スタイル(デフォルト)
export async function getPetById(
petId: GetPetByIdPathParams['petId'],
config?: Partial<RequestConfig>
): Promise<GetPetByIdQueryResponse>Static Class スタイル
export class Pet {
static async getPetById(
{ petId }: { petId: GetPetByIdPathParams['petId'] },
config?: Partial<RequestConfig>
): Promise<GetPetByIdQueryResponse>
}設定例
import { defineConfig } from '@kubb/core'
import { pluginClient } from '@kubb/plugin-client'
import { pluginOas } from '@kubb/plugin-oas'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen' },
plugins: [
pluginOas(),
pluginClient({
output: { path: './clients', barrelType: 'named' },
client: 'fetch',
clientType: 'staticClass',
group: { type: 'tag' },
dataReturnType: 'full',
paramsType: 'object',
}),
],
})@kubb/plugin-cypress
OpenAPI 仕様から Cypress リクエスト定義を生成するプラグイン。v3.7.0 で追加。
インストール
npm install --save-dev @kubb/plugin-cypress設定オプション
output
| オプション | 型 | デフォルト |
|---|---|---|
output.path | string | 'cypress' |
output.barrelType | `'all' \ | 'named' \ |
output.banner / output.footer | `string \ | (oas) => string` |
output.override | boolean | false |
パラメータ
| オプション | 型 | デフォルト |
|---|---|---|
paramsType | `'object' \ | 'inline'` |
pathParamsType | `'object' \ | 'inline'` |
paramsCasing | 'camelcase' | — |
その他
| オプション | 型 | デフォルト |
|---|---|---|
contentType | `'application/json' \ | string` |
baseURL | string | — |
group.type | 'tag' | — |
group.name | (context) => string | '${ctx.group}Requests' |
include / exclude | Array<{type, pattern}> | — |
override | Array<{type, pattern, options}> | — |
transformers.name | (name, type?) => string | — |
generators | Generator[] | — |
設定例
pluginCypress({
output: { path: './cypress', barrelType: 'named' },
group: { type: 'tag', name: ({ group }) => `${group}Requests` },
})@kubb/plugin-faker
OpenAPI スキーマから Faker.js モックデータジェネレーターを生成するプラグイン。
インストール
npm install --save-dev @kubb/plugin-faker設定オプション
output
| オプション | 型 | デフォルト |
|---|---|---|
output.path | string | 'mocks' |
output.barrelType | `'all' \ | 'named' \ |
output.banner / output.footer | `string \ | (oas) => string` |
output.override | boolean | false |
データ生成オプション
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
dateType | `'string' \ | 'date'` | 'string' |
dateParser | `'faker' \ | 'dayjs' \ | 'moment' \ |
regexGenerator | `'faker' \ | 'randexp'` | 'faker' |
seed | number | — | テスト用の固定シード値 |
unknownType | `'any' \ | 'unknown' \ | 'void'` |
emptySchemaType | `'any' \ | 'unknown' \ | 'void'` |
その他
| オプション | 型 | デフォルト |
|---|---|---|
mapper | Record<string, string> | — |
paramsCasing | 'camelcase' | — |
contentType | `'application/json' \ | string` |
group.type | 'tag' | — |
include / exclude | Array<{type, pattern}> | — |
override | Array<{type, pattern, options}> | — |
transformers.name | (name, type?) => string | — |
generators | Generator[] | — |
dateParser の例
// dateParser: 'dayjs', dateType: 'string'
dayjs(faker.date.anytime()).format("YYYY-MM-DD")
// dateType: 'date'
faker.date.anytime()設定例
pluginFaker({
output: { path: './mocks', barrelType: 'named' },
group: { type: 'tag', name: ({ group }) => `${group}Service` },
dateType: 'date',
seed: [100],
})@kubb/plugin-mcp
OpenAPI 仕様から MCP(Model Context Protocol)サーバーを生成するプラグイン。v3.9.0 で追加。 AI モデルが API と対話可能になる。
インストール
npm install --save-dev @kubb/plugin-mcp設定オプション
output
| オプション | 型 | デフォルト |
|---|---|---|
output.path | string | 'mcp' |
output.barrelType | `'all' \ | 'named' \ |
output.banner / output.footer | `string \ | (oas) => string` |
output.override | boolean | false |
client
| オプション | 型 | デフォルト |
|---|---|---|
client.importPath | string | — |
client.dataReturnType | `'data' \ | 'full'` |
client.baseURL | string | — |
その他
| オプション | 型 | デフォルト |
|---|---|---|
contentType | `'application/json' \ | string` |
paramsCasing | 'camelcase' | — |
group.type | 'tag' | — |
group.name | (context) => string | '${ctx.group}Requests' |
include / exclude | Array<{type, pattern}> | — |
override | Array<{type, pattern, options}> | — |
transformers.name | (name, type?) => string | — |
generators | Generator[] | — |
設定例
pluginMcp({
output: { path: './mcp', barrelType: 'named' },
client: { baseURL: 'https://petstore.swagger.io/v2' },
group: { type: 'tag', name: ({ group }) => `${group}Handlers` },
})@kubb/plugin-msw
OpenAPI 仕様から MSW(Mock Service Worker)ハンドラーを生成するプラグイン。
インストール
npm install --save-dev @kubb/plugin-msw設定オプション
output
| オプション | 型 | デフォルト |
|---|---|---|
output.path | string | 'handlers' |
output.barrelType | `'all' \ | 'named' \ |
output.banner / output.footer | `string \ | (oas) => string` |
output.override | boolean | false |
MSW 固有オプション
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
handlers | boolean | false | handlers.ts に全ハンドラーをグループ化して生成 |
parser | `'data' \ | 'faker'` | 'data' |
baseURL | string | — | カスタムベース URL |
contentType | `'application/json' \ | string` | — |
その他
| オプション | 型 |
|---|---|
group.type | 'tag' |
group.name | (context) => string |
include / exclude | Array<{type, pattern}> |
override | Array<{type, pattern, options}> |
transformers.name | (name, type?) => string |
generators | Generator[] |
設定例
pluginMsw({
output: {
path: './mocks',
barrelType: 'named',
banner: '/* eslint-disable no-alert, no-console */',
},
group: { type: 'tag', name: ({ group }) => `${group}Service` },
handlers: true,
parser: 'data',
baseURL: 'https://api.example.com',
})@kubb/plugin-oas
OpenAPI 仕様のパース・バリデーションを行う Kubb の基盤プラグイン。ほとんどの他プラグインがこのプラグインに依存する。
インストール
npm install --save-dev @kubb/plugin-oas設定オプション
output
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
output.path | string | 'schemas' | 生成ファイルの出力先パス |
output.barrelType | `'all' \ | 'named' \ | 'propagate' \ |
output.banner | `string \ | (oas: Oas) => string` | — |
output.footer | `string \ | (oas: Oas) => string` | — |
output.override | boolean | false | 既存ファイルの上書き |
group
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
group.type | 'tag' | — | グループ化の基準(group 定義時は必須) |
group.name | (context: GroupContext) => string | '${ctx.group}Controller' | グループ名の生成関数 |
バリデーション・サーバー
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
validate | boolean | true | @readme/openapi-parser による入力バリデーション |
serverIndex | number | — | servers 配列から使用するサーバーのインデックス |
serverVariables | Record<string, string> | — | OpenAPI サーバー変数のオーバーライド |
discriminator
- 型:
'strict' \| 'inherit' - デフォルト:
'strict'
discriminator の解釈方法:
- strict:
oneOfスキーマをそのまま使用。discriminator は型の絞り込みのみ - inherit: 子スキーマに discriminator プロパティと enum 値を追加
OpenAPI 3.0/3.1、oneOf/anyOf、インラインスキーマ、$ref 参照をサポート。
その他
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
collisionDetection | boolean | false | スキーマ間の名前衝突を解決(v5 でデフォルト化予定) |
contentType | `'application/json' \ | string` | — |
oasClass | typeof Oas | — | Oas クラスのオーバーライド |
generators | Generator[] | — | カスタムジェネレーター(空配列でスキーマ生成を無効化) |
設定例
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen' },
plugins: [
pluginOas({
validate: true,
output: { path: './json' },
serverIndex: 0,
contentType: 'application/json',
collisionDetection: true,
}),
],
})discriminator の例(inherit モード)
// 生成結果
export type Cat = {
type: CatTypeEnum
name?: string
indoor: boolean
}
export type Dog = {
type: DogTypeEnum
name: string
}@kubb/plugin-react-query
OpenAPI 仕様から React Query(TanStack Query)hooks を生成するプラグイン。
インストール
npm install --save-dev @kubb/plugin-react-query設定オプション
output
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
output.path | string | 'hooks' | 出力先パス |
output.barrelType | `'all' \ | 'named' \ | 'propagate' \ |
output.banner / output.footer | `string \ | (oas) => string` | — |
output.override | boolean | false | 既存ファイル上書き |
client
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
client.importPath | string | — | カスタムクライアントパス |
client.dataReturnType | `'data' \ | 'full'` | 'data' |
client.baseURL | string | — | ベース URL |
client.clientType | `'function' \ | 'class'` | 'function' |
client.bundle | boolean | false | クライアントランタイムバンドル |
query / mutation
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
query.methods | Array<HttpMethod> | ['get'] | クエリ対象 HTTP メソッド |
query.importPath | string | '@tanstack/react-query' | useQuery インポートパス |
query | false | — | クエリ生成を無効化(queryOptions のみ) |
mutation.methods | Array<HttpMethod> | ['post', 'put', 'delete'] | ミューテーション対象メソッド |
mutation.importPath | string | '@tanstack/react-query' | useMutation インポートパス |
パラメータ
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
paramsType | `'object' \ | 'inline'` | 'inline' |
pathParamsType | `'object' \ | 'inline'` | 'inline' |
paramsCasing | 'camelcase' | — | camelCase 変換 |
parser | `'client' \ | 'zod'` | 'client' |
contentType | `'application/json' \ | string` | — |
高度な機能
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
infinite | `Infinite \ | false` | false |
suspense | `object \ | false` | — |
customOptions | {importPath, name?} | — | カスタムフックオプション |
queryKey | (props) => unknown[] | — | クエリキーカスタマイズ |
mutationKey | (props) => unknown[] | — | ミューテーションキーカスタマイズ |
infinite の型
type Infinite = {
queryParam: string // デフォルト: 'id'
initialPageParam: unknown // デフォルト: 0
nextParam?: string | string[]
previousParam?: string | string[]
} | falseフィルタリング
| オプション | 型 | 説明 |
|---|---|---|
group.type | 'tag' | タグによるグループ化 |
include / exclude | Array<{type, pattern}> | フィルタリング |
override | Array<{type, pattern, options}> | 条件付きオーバーライド |
transformers.name | (name, type?) => string | 名前カスタマイズ |
generators | Generator[] | カスタムジェネレーター |
設定例
pluginReactQuery({
output: { path: './hooks' },
group: { type: 'tag', name: ({ group }) => `${group}Hooks` },
client: { dataReturnType: 'full' },
query: { methods: ['get'], importPath: '@tanstack/react-query' },
mutation: { methods: ['post', 'put', 'delete'] },
infinite: { queryParam: 'page', initialPageParam: 0 },
suspense: {},
parser: 'zod',
})@kubb/plugin-redoc
OpenAPI 仕様から Redoc HTML ドキュメントを生成するプラグイン。Redocly を使用。
インストール
npm install --save-dev @kubb/plugin-redoc設定オプション
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
output.path | string | 'docs.html' | 生成される HTML ファイルのパス |
設定例
import { defineConfig } from '@kubb/core'
import { pluginRedoc } from '@kubb/plugin-redoc'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen' },
plugins: [
pluginRedoc({
output: { path: './docs/index.html' },
}),
],
})@kubb/plugin-solid-query
OpenAPI 仕様から Solid Query(TanStack Query)hooks を生成するプラグイン。
インストール
npm install --save-dev @kubb/plugin-solid-query設定オプション
@kubb/plugin-react-query とほぼ同一の構成。主な違いは importPath のデフォルト値のみ。
output
| オプション | 型 | デフォルト |
|---|---|---|
output.path | string | 'hooks' |
output.barrelType | `'all' \ | 'named' \ |
client
| オプション | 型 | デフォルト |
|---|---|---|
client.importPath | string | — |
client.dataReturnType | `'data' \ | 'full'` |
client.baseURL | string | — |
client.clientType | `'function' \ | 'class'` |
client.bundle | boolean | false |
query / mutation
| オプション | 型 | デフォルト |
|---|---|---|
query.methods | Array<HttpMethod> | ['get'] |
query.importPath | string | '@tanstack/solid-query' |
mutation.methods | Array<HttpMethod> | ['post', 'put', 'delete'] |
mutation.importPath | string | '@tanstack/solid-query' |
その他
| オプション | 型 | デフォルト |
|---|---|---|
paramsType | `'object' \ | 'inline'` |
paramsCasing | 'camelcase' | — |
parser | `'client' \ | 'zod'` |
queryKey / mutationKey | (props) => unknown[] | — |
include / exclude / override | Array | — |
transformers.name | (name, type?) => string | — |
設定例
pluginSolidQuery({
output: { path: './hooks' },
group: { type: 'tag', name: ({ group }) => `${group}Hooks` },
client: { dataReturnType: 'full' },
query: { methods: ['get'], importPath: '@tanstack/solid-query' },
})@kubb/plugin-svelte-query
OpenAPI 仕様から Svelte Query(TanStack Query)hooks を生成するプラグイン。
インストール
npm install --save-dev @kubb/plugin-svelte-query設定オプション
@kubb/plugin-react-query とほぼ同一の構成。主な違いは importPath のデフォルト値のみ。
output
| オプション | 型 | デフォルト |
|---|---|---|
output.path | string | 'hooks' |
output.barrelType | `'all' \ | 'named' \ |
client
| オプション | 型 | デフォルト |
|---|---|---|
client.importPath | string | — |
client.dataReturnType | `'data' \ | 'full'` |
client.baseURL | string | — |
client.clientType | `'function' \ | 'class'` |
client.bundle | boolean | false |
query / mutation
| オプション | 型 | デフォルト |
|---|---|---|
query.methods | Array<HttpMethod> | ['get'] |
query.importPath | string | '@tanstack/svelte-query' |
mutation.methods | Array<HttpMethod> | ['post', 'put', 'delete'] |
mutation.importPath | string | '@tanstack/svelte-query' |
その他
| オプション | 型 | デフォルト |
|---|---|---|
paramsType | `'object' \ | 'inline'` |
paramsCasing | 'camelcase' | — |
parser | `'client' \ | 'zod'` |
queryKey / mutationKey | (props) => unknown[] | — |
include / exclude / override | Array | — |
transformers.name | (name, type?) => string | — |
設定例
pluginSvelteQuery({
output: { path: './hooks' },
group: { type: 'tag', name: ({ group }) => `${group}Hooks` },
client: { dataReturnType: 'full' },
query: { methods: ['get'], importPath: '@tanstack/svelte-query' },
})@kubb/plugin-swr
OpenAPI 仕様から SWR hooks を生成するプラグイン。
インストール
npm install --save-dev @kubb/plugin-swr設定オプション
output
| オプション | 型 | デフォルト |
|---|---|---|
output.path | string | 'hooks' |
output.barrelType | `'all' \ | 'named' \ |
output.banner / output.footer | `string \ | (oas) => string` |
output.override | boolean | false |
client
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
client.importPath | string | — | カスタムクライアントパス |
client.dataReturnType | `'data' \ | 'full'` | 'data' |
client.baseURL | string | — | ベース URL |
client.clientType | `'function' \ | 'class'` | 'function' |
client.bundle | boolean | false | ランタイムバンドル |
query / mutation
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
query.methods | Array<HttpMethod> | — | クエリ対象メソッド |
query.importPath | string | 'swr' | SWR インポートパス |
mutation.methods | Array<HttpMethod> | ['post', 'put', 'delete'] | ミューテーション対象メソッド |
mutation.importPath | string | 'swr/mutation' | SWR mutation インポートパス |
mutation.paramsToTrigger | boolean | false | trigger() 経由でパラメータを渡す(v5 でデフォルト化) |
パラメータ・パーサー
| オプション | 型 | デフォルト |
|---|---|---|
paramsType | `'object' \ | 'inline'` |
pathParamsType | `'object' \ | 'inline'` |
paramsCasing | 'camelcase' | — |
parser | `'client' \ | 'zod'` |
queryKey / mutationKey | (props) => unknown[] | — |
フィルタリング
| オプション | 型 |
|---|---|
group.type | 'tag' |
include / exclude | Array<{type, pattern}> |
override | Array<{type, pattern, options}> |
transformers.name | (name, type?) => string |
設定例
pluginSwr({
output: { path: './hooks' },
group: { type: 'tag', name: ({ group }) => `${group}Hooks` },
client: { dataReturnType: 'full' },
parser: 'zod',
})@kubb/plugin-ts
OpenAPI スキーマから TypeScript の型・インターフェースを生成するプラグイン。
インストール
npm install --save-dev @kubb/plugin-ts設定オプション
output
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
output.path | string | 'types' | 出力先パス |
output.barrelType | `'all' \ | 'named' \ | 'propagate' \ |
output.banner | `string \ | (oas: Oas) => string` | — |
output.footer | `string \ | (oas: Oas) => string` | — |
output.override | boolean | false | 既存ファイル上書き |
型生成オプション
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
syntaxType | `'type' \ | 'interface'` | 'type' |
enumType | `'enum' \ | 'asConst' \ | 'asPascalConst' \ |
enumSuffix | string | 'enum' | enum 名のサフィックス |
enumTypeSuffix | string | — | `enumType: asConst \ |
enumKeyCasing | `'screamingSnakeCase' \ | 'snakeCase' \ | 'pascalCase' \ |
データ型オプション
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
dateType | `'string' \ | 'date'` | 'string' |
integerType | `'number' \ | 'bigint'` | 'bigint' |
unknownType | `'any' \ | 'unknown' \ | 'void'` |
emptySchemaType | `'any' \ | 'unknown' \ | 'void'` |
optionalType | `'questionToken' \ | 'undefined' \ | 'questionTokenAndUndefined'` |
arrayType | `'array' \ | 'generic'` | 'array' |
詳細オプション
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
contentType | `'application/json' \ | string` | — |
paramsCasing | 'camelcase' | — | パラメータ名を camelCase に変換 |
group.type | 'tag' | — | タグによるファイルグループ化 |
group.name | (context) => string | — | グループ名カスタマイズ |
フィルタリング
| オプション | 型 | 説明 |
|---|---|---|
include | Array<{type, pattern}> | 特定タグ/operationId/path/method/contentType を含める |
exclude | Array<{type, pattern}> | 特定タグ/operationId/path/method/contentType を除外 |
override | Array<{type, pattern, options}> | 条件付きオプションオーバーライド |
transformers.name | (name, type?) => string | 生成名のカスタマイズ |
generators | Generator[] | カスタムジェネレーター |
設定例
import { defineConfig } from "@kubb/core"
import { pluginOas } from "@kubb/plugin-oas"
import { pluginTs } from "@kubb/plugin-ts"
export default defineConfig({
input: { path: "./petStore.yaml" },
output: { path: "./src/gen" },
plugins: [
pluginOas(),
pluginTs({
output: { path: "./types" },
exclude: [{ type: "tag", pattern: "store" }],
group: {
type: "tag",
name: ({ group }) => `${group}Controller`,
},
enumType: "asConst",
dateType: "date",
unknownType: "unknown",
optionalType: "questionTokenAndUndefined",
paramsCasing: "camelcase",
}),
],
})@kubb/plugin-vue-query
OpenAPI 仕様から Vue Query(TanStack Query)hooks を生成するプラグイン。
インストール
npm install --save-dev @kubb/plugin-vue-query設定オプション
@kubb/plugin-react-query とほぼ同一の構成。主な違いは importPath のデフォルト値のみ。
output
| オプション | 型 | デフォルト |
|---|---|---|
output.path | string | 'hooks' |
output.barrelType | `'all' \ | 'named' \ |
client
| オプション | 型 | デフォルト |
|---|---|---|
client.importPath | string | — |
client.dataReturnType | `'data' \ | 'full'` |
client.baseURL | string | — |
client.clientType | `'function' \ | 'class'` |
client.bundle | boolean | false |
query / mutation
| オプション | 型 | デフォルト |
|---|---|---|
query.methods | Array<HttpMethod> | ['get'] |
query.importPath | string | '@tanstack/vue-query' |
mutation.methods | Array<HttpMethod> | ['post', 'put', 'delete'] |
mutation.importPath | string | '@tanstack/vue-query' |
その他
| オプション | 型 | デフォルト |
|---|---|---|
paramsType | `'object' \ | 'inline'` |
paramsCasing | 'camelcase' | — |
parser | `'client' \ | 'zod'` |
infinite | `Infinite \ | false` |
queryKey / mutationKey | (props) => unknown[] | — |
include / exclude / override | Array | — |
transformers.name | (name, type?) => string | — |
設定例
pluginVueQuery({
output: { path: './hooks' },
group: { type: 'tag', name: ({ group }) => `${group}Hooks` },
client: { dataReturnType: 'full' },
query: { methods: ['get'], importPath: '@tanstack/vue-query' },
infinite: { queryParam: 'next_page', initialPageParam: 0 },
})@kubb/plugin-zod
OpenAPI スキーマから Zod バリデーションスキーマを生成するプラグイン。Zod v3/v4 対応。
インストール
npm install --save-dev @kubb/plugin-zod設定オプション
output
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
output.path | string | 'zod' | 出力先パス |
output.barrelType | `'all' \ | 'named' \ | 'propagate' \ |
output.banner / output.footer | `string \ | (oas) => string` | — |
output.override | boolean | false | 既存ファイル上書き |
Zod 固有オプション
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
version | `'3' \ | '4'` | '3' |
importPath | string | 'zod' | Zod インポートパス |
typed | boolean | false | TypeScript 型アノテーション有効化(@kubb/plugin-ts 必要) |
inferred | boolean | false | z.infer で推論型を返す |
mini | boolean | false | Zod Mini 機能 API(v4+、ベータ) |
guidType | `'uuid' \ | 'guid'` | 'uuid' |
データ型オプション
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
dateType | `false \ | 'string' \ | 'stringOffset' \ |
unknownType | `'any' \ | 'unknown' \ | 'void'` |
emptySchemaType | `'any' \ | 'unknown' \ | 'void'` |
coercion | `boolean \ | {dates?, strings?, numbers?}` | false |
その他
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
operations | boolean | false | オペレーション関連スキーマ生成 |
mapper | Record<string, string> | — | カスタム型マッピング |
contentType | `'application/json' \ | string` | — |
group.type | 'tag' | — | タグによるグループ化 |
include / exclude | Array<{type, pattern}> | — | フィルタリング |
override | Array<{type, pattern, options}> | — | 条件付きオーバーライド |
transformers.name | (name, type?) => string | — | 名前カスタマイズ |
transformers.schema | (props, defaults) => Schema[] | — | スキーマ生成カスタマイズ |
wrapOutput | ({output, schema}) => string | — | 生成スキーマの後処理 |
dateType の例
// false: z.string()
// 'string': z.string().datetime()
// 'stringOffset': z.string().datetime({ offset: true })
// 'stringLocal': z.string().datetime({ local: true })
// 'date': z.date()coercion の例
// true: z.coerce.string(), z.coerce.date(), z.coerce.number()
// { numbers: true, strings: false }: z.string(), z.coerce.number()mini モードの例(v4+、ベータ)
import { z } from 'zod/mini'
z.optional(z.string())
z.nullable(z.number())
z.array(z.string()).check(z.minLength(1), z.maxLength(10))設定例
import { defineConfig } from "@kubb/core"
import { pluginOas } from "@kubb/plugin-oas"
import { pluginTs } from "@kubb/plugin-ts"
import { pluginZod } from "@kubb/plugin-zod"
export default defineConfig({
input: { path: "./petStore.yaml" },
output: { path: "./src/gen" },
plugins: [
pluginOas(),
pluginTs(),
pluginZod({
output: { path: "./zod" },
group: { type: "tag", name: ({ group }) => `${group}Schemas` },
typed: true,
dateType: "stringOffset",
unknownType: "unknown",
version: "4",
wrapOutput: ({ output }) =>
`${output}.openapi({ description: 'Custom' })`,
}),
],
})plugins
| Name | Description | Path |
|---|---|---|
| @kubb/core | 全 Kubb プラグインの基盤となるコアモジュール。build() API を提供する。 | core.md |
| プラグイン概要 | Kubb はプラグインベースのアーキテクチャで、OpenAPI 仕様から様々なコード成果物を生成する。 | overview.md |
| @kubb/plugin-client | OpenAPI 仕様から API クライアントコード(Axios/Fetch)を生成するプラグイン。 | plugin-client.md |
| @kubb/plugin-cypress | OpenAPI 仕様から Cypress リクエスト定義を生成するプラグイン。v3.7.0 で追加。 | plugin-cypress.md |
| @kubb/plugin-faker | OpenAPI スキーマから Faker.js モックデータジェネレーターを生成するプラグイン。 | plugin-faker.md |
| @kubb/plugin-mcp | OpenAPI 仕様から MCP(Model Context Protocol)サーバーを生成するプラグイン。v3.9.0 で追加。 | plugin-mcp.md |
| @kubb/plugin-msw | OpenAPI 仕様から MSW(Mock Service Worker)ハンドラーを生成するプラグイン。 | plugin-msw.md |
| @kubb/plugin-oas | OpenAPI 仕様のパース・バリデーションを行う Kubb の基盤プラグイン。ほとんどの他プラグインがこのプラグインに依存する。 | plugin-oas.md |
| @kubb/plugin-react-query | OpenAPI 仕様から React Query(TanStack Query)hooks を生成するプラグイン。 | plugin-react-query.md |
| @kubb/plugin-redoc | OpenAPI 仕様から Redoc HTML ドキュメントを生成するプラグイン。Redocly を使用。 | plugin-redoc.md |
| @kubb/plugin-solid-query | OpenAPI 仕様から Solid Query(TanStack Query)hooks を生成するプラグイン。 | plugin-solid-query.md |
| @kubb/plugin-svelte-query | OpenAPI 仕様から Svelte Query(TanStack Query)hooks を生成するプラグイン。 | plugin-svelte-query.md |
| @kubb/plugin-swr | OpenAPI 仕様から SWR hooks を生成するプラグイン。 | plugin-swr.md |
| @kubb/plugin-ts | OpenAPI スキーマから TypeScript の型・インターフェースを生成するプラグイン。 | plugin-ts.md |
| @kubb/plugin-vue-query | OpenAPI 仕様から Vue Query(TanStack Query)hooks を生成するプラグイン。 | plugin-vue-query.md |
| @kubb/plugin-zod | OpenAPI スキーマから Zod バリデーションスキーマを生成するプラグイン。Zod v3/v4 対応。 | plugin-zod.md |
API Client Generation
OpenAPI 仕様から Axios または Fetch ベースの型安全な API クライアントを生成するワークフロー。
// kubb.config.ts(Fetch クライアント例)
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginClient } from '@kubb/plugin-client'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({ generators: [] }),
pluginTs({
output: { path: 'models' },
enumType: 'asConst',
}),
pluginClient({
output: { path: './clients' },
client: 'fetch',
group: { type: 'tag', name: ({ group }) => `${group}Service` },
dataReturnType: 'data',
pathParamsType: 'object',
}),
],
})# インストール(Fetch の場合)
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-ts @kubb/plugin-client
# Axios を使う場合は axios も追加
npm install axios生成されたクライアントの使用例:
import { getPetById } from './gen/clients/PetService'
const pet = await getPetById({ petId: 1 })
console.log(pet.name)Notes
client: 'fetch'で Fetch API、client: 'axios'で Axios ベースのコードを生成するpluginReactQueryと組み合わせる場合はclientType: 'function'(デフォルト)のままにするgroup: { type: 'tag' }でタグごとにサービスクラス/ファイルを分割できるparser: 'zod'を指定するとレスポンスを Zod スキーマで自動バリデーションする
Basic TypeScript Generation
OpenAPI 仕様から TypeScript 型を生成する最小構成のワークフロー。
// kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
export default defineConfig({
root: '.',
input: {
path: './petStore.yaml',
},
output: {
path: './src/gen',
clean: true,
},
plugins: [
pluginOas({ validate: true, generators: [] }),
pluginTs({
output: { path: 'models' },
}),
],
})# インストール
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-ts
# 生成実行
npx kubb generate生成結果(src/gen/models/Pet.ts):
export type Pet = {
/** @type integer, int64 */
id: number
/** @type string */
name: string
/** @type string | undefined */
tag?: string
}Notes
pluginOasは必ず最初に配置する(他プラグインのベースとなる)generators: []を指定すると JSON スキーマファイルの生成をスキップできるoutput.clean: trueで生成前に出力ディレクトリをクリーンアップするinput.pathにはローカルファイルパスだけでなく URL も指定可能
Filtering and Grouping
include / exclude と group を使い、生成対象のエンドポイントを絞り込み、タグ別にファイルを整理するワークフロー。
// kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginClient } from '@kubb/plugin-client'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({ generators: [] }),
pluginTs({
output: { path: 'models' },
// タグ "store" を除外
exclude: [{ type: 'tag', pattern: 'store' }],
// タグごとにファイルをグループ化
group: {
type: 'tag',
name: ({ group }) => `${group}Controller`,
},
}),
pluginClient({
output: { path: './clients' },
// operationId でフィルタリング(正規表現可)
include: [{ type: 'operationId', pattern: '^get' }],
// path パターンでフィルタリング
exclude: [{ type: 'path', pattern: '/internal/' }],
group: { type: 'tag' },
}),
],
})override でエンドポイントごとにオプションを上書きする例:
pluginReactQuery({
output: { path: './hooks' },
override: [
{
type: 'operationId',
pattern: 'listPets',
options: {
infinite: {
queryParam: 'page',
initialPageParam: 0,
},
},
},
],
})Notes
include/excludeのtypeは'tag'/'operationId'/'path'/'method'/'contentType'から選択できるpatternは文字列(完全一致)または正規表現文字列として評価されるgroup.type: 'tag'は OpenAPI のtagsフィールドに基づきファイルを分割するoverrideはマッチしたエンドポイントのプラグインオプションのみを上書きし、それ以外には影響しない
MSW Mock Handlers Generation
OpenAPI 仕様から MSW(Mock Service Worker)ハンドラーと Faker モックデータを生成するワークフロー。
// kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginFaker } from '@kubb/plugin-faker'
import { pluginMsw } from '@kubb/plugin-msw'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({ generators: [] }),
pluginTs({ output: { path: 'models' } }),
pluginFaker({
output: { path: './mocks' },
group: { type: 'tag', name: ({ group }) => `${group}Mocks` },
dateType: 'date',
seed: [42],
}),
pluginMsw({
output: { path: './msw' },
group: { type: 'tag', name: ({ group }) => `${group}Handlers` },
handlers: true,
parser: 'faker',
}),
],
})# インストール
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-ts @kubb/plugin-faker @kubb/plugin-msw
npm install msw @faker-js/faker生成されたハンドラーの使用例:
// src/mocks/browser.ts
import { setupWorker } from 'msw/browser'
import { handlers } from '../gen/msw/handlers'
export const worker = setupWorker(...handlers)Notes
pluginFakerをpluginMswより前に配置する(parser: 'faker'時に Faker の出力を参照するため)handlers: trueで全エンドポイントを統合したhandlers.tsを生成するseedを固定するとテスト実行ごとに同じモックデータが生成されるparser: 'data'(デフォルト)は空レスポンスを返す最小ハンドラーを生成する
Multi-Plugin Workflow
複数プラグインを組み合わせて TypeScript 型・API クライアント・React Query hooks・Zod スキーマ・MSW ハンドラーを同時生成するフルスタック構成。
// kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginClient } from '@kubb/plugin-client'
import { pluginReactQuery } from '@kubb/plugin-react-query'
import { pluginZod } from '@kubb/plugin-zod'
import { pluginFaker } from '@kubb/plugin-faker'
import { pluginMsw } from '@kubb/plugin-msw'
export default defineConfig({
input: { path: './petStore.yaml' },
output: {
path: './src/gen',
clean: true,
barrelType: 'named',
},
plugins: [
pluginOas({ validate: true, collisionDetection: true }),
pluginTs({
output: { path: './types' },
enumType: 'asConst',
dateType: 'date',
unknownType: 'unknown',
}),
pluginClient({
output: { path: './clients' },
client: 'fetch',
group: { type: 'tag' },
parser: 'zod',
}),
pluginReactQuery({
output: { path: './hooks' },
group: { type: 'tag' },
suspense: {},
}),
pluginZod({
output: { path: './zod' },
group: { type: 'tag' },
typed: true,
dateType: 'stringOffset',
}),
pluginFaker({
output: { path: './mocks' },
group: { type: 'tag' },
seed: [42],
}),
pluginMsw({
output: { path: './msw' },
group: { type: 'tag' },
handlers: true,
parser: 'faker',
}),
],
hooks: {
done: ['npm run typecheck'],
},
})生成されるディレクトリ構造:
src/gen/
├── types/ ← TypeScript 型
├── clients/ ← Fetch ベース API クライアント(Zod パース付き)
├── hooks/ ← React Query hooks(Suspense 対応)
├── zod/ ← Zod バリデーションスキーマ
├── mocks/ ← Faker モックデータジェネレーター
├── msw/ ← MSW ハンドラー
│ └── handlers.ts
└── index.ts ← バレルエクスポートNotes
- プラグインの順序は
pluginOas→pluginTs→ その他の順を守る collisionDetection: trueでスキーマ名の衝突を自動解決するhooks.doneで生成後に任意のシェルコマンドを実行できるpluginClientのparser: 'zod'はpluginZodと組み合わせてレスポンスを自動バリデーションする
Multiple OpenAPI Specs
複数の OpenAPI 仕様ファイルを1つの設定で並列処理するワークフロー。
// kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
export default defineConfig([
{
name: 'petStore',
input: { path: './specs/petStore.yaml' },
output: { path: './src/gen/petStore', clean: true },
plugins: [
pluginOas({ generators: [] }),
pluginTs({ output: { path: 'models' } }),
],
},
{
name: 'userApi',
input: { path: './specs/userApi.yaml' },
output: { path: './src/gen/userApi', clean: true },
plugins: [
pluginOas({ generators: [] }),
pluginTs({ output: { path: 'models' } }),
],
},
])URL からリモートの仕様を直接参照する場合:
export default defineConfig([
{
name: 'externalApi',
input: { path: 'https://api.example.com/openapi.json' },
output: { path: './src/gen/external' },
plugins: [pluginOas(), pluginTs()],
},
])Notes
- 配列形式でエクスポートすると各設定が並列実行される
nameフィールドを指定すると CLI 出力で設定を識別しやすくなる- リモート URL 参照時はネットワーク到達性とスキーマの安定性に注意する
- 各設定は独立した
output.pathを持つ必要がある
Programmatic Build
build() API を使い Node.js スクリプトやビルドシステムから Kubb をプログラマティックに実行するワークフロー。
import { build } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
const { error, files } = await build({
config: {
root: '.',
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({ generators: [] }),
pluginTs({ output: { path: 'models' } }),
],
},
})
if (error) {
console.error('Generation failed:', error)
process.exit(1)
}
console.log(`Generated ${files.length} files`)カスタムインメモリストレージを使ったドライラン例:
import { build, createStorage } from '@kubb/core'
const store = new Map<string, string>()
const memoryStorage = createStorage(() => ({
name: 'memory',
async hasItem(key) { return store.has(key) },
async getItem(key) { return store.get(key) ?? null },
async setItem(key, value) { store.set(key, value) },
async removeItem(key) { store.delete(key) },
async getKeys(base) { return [...store.keys()].filter(k => k.startsWith(base)) },
async clear(base) { for (const k of store.keys()) if (k.startsWith(base)) store.delete(k) },
}))
const { files } = await build({
config: {
input: { path: './petStore.yaml' },
output: { path: './gen', storage: memoryStorage },
plugins: [pluginOas(), pluginTs()],
},
})Notes
build()は{ error, files, driver }を返す非同期関数errorがundefinedでない場合は生成失敗output.storageにカスタムストレージを渡すとファイルシステムへの書き込みを回避できる- CI やテストでの生成結果検証、ビルドパイプラインへの組み込みに適している
React Query Hooks Generation
OpenAPI 仕様から TanStack Query(React Query)hooks を生成するワークフロー。
// kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginReactQuery } from '@kubb/plugin-react-query'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({ generators: [] }),
pluginTs({ output: { path: 'models' } }),
pluginReactQuery({
output: { path: './hooks' },
group: { type: 'tag', name: ({ group }) => `${group}Hooks` },
client: { dataReturnType: 'data' },
query: { methods: ['get'] },
mutation: { methods: ['post', 'put', 'delete'] },
}),
],
})# インストール
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-ts @kubb/plugin-react-query
npm install @tanstack/react-query生成された hooks の使用例:
import { useGetPetById } from './gen/hooks'
function PetDetail({ petId }: { petId: number }) {
const { data: pet } = useGetPetById({ petId })
return <div>{pet?.name}</div>
}Notes
pluginTsをpluginReactQueryより前に配置する(型定義に依存するため)group: { type: 'tag' }でタグごとにファイルをグループ化できるquery.methods: ['get']で GET のみuseQueryhooks を生成し、それ以外はuseMutationとなる- Suspense Query を使う場合は
suspense: {}を追加する
samples
| Name | Description | Path |
|---|---|---|
| API Client Generation | OpenAPI 仕様から Axios または Fetch ベースの型安全な API クライアントを生成するワークフロー。 | api-client-generation.md |
| Basic TypeScript Generation | OpenAPI 仕様から TypeScript 型を生成する最小構成のワークフロー。 | basic-typescript-generation.md |
| Filtering and Grouping | include / exclude と group を使い、生成対象のエンドポイントを絞り込み、タグ別にファイルを整理するワークフロー。 | filtering-and-grouping.md |
| MSW Mock Handlers Generation | OpenAPI 仕様から MSW(Mock Service Worker)ハンドラーと Faker モックデータを生成するワークフロー。 | msw-mock-handlers.md |
| Multi-Plugin Workflow | 複数プラグインを組み合わせて TypeScript 型・API クライアント・React Query hooks・Zod スキーマ・MSW ハンドラーを同時生成するフルスタック構成。 | multi-plugin-workflow.md |
| Multiple OpenAPI Specs | 複数の OpenAPI 仕様ファイルを1つの設定で並列処理するワークフロー。 | multiple-specs.md |
| Programmatic Build | build() API を使い Node.js スクリプトやビルドシステムから Kubb をプログラマティックに実行するワークフロー。 | programmatic-build.md |
| React Query Hooks Generation | OpenAPI 仕様から TanStack Query(React Query)hooks を生成するワークフロー。 | react-query-hooks.md |
| Zod Schema Generation | OpenAPI 仕様から Zod バリデーションスキーマを生成するワークフロー。 | zod-schema-generation.md |
Zod Schema Generation
OpenAPI 仕様から Zod バリデーションスキーマを生成するワークフロー。
// kubb.config.ts
import { defineConfig } from '@kubb/core'
import { pluginOas } from '@kubb/plugin-oas'
import { pluginTs } from '@kubb/plugin-ts'
import { pluginZod } from '@kubb/plugin-zod'
export default defineConfig({
input: { path: './petStore.yaml' },
output: { path: './src/gen', clean: true },
plugins: [
pluginOas({ generators: [] }),
pluginTs({ output: { path: 'models' } }),
pluginZod({
output: { path: './zod' },
group: { type: 'tag', name: ({ group }) => `${group}Schemas` },
typed: true,
dateType: 'stringOffset',
unknownType: 'unknown',
version: '4',
}),
],
})# インストール
npm install --save-dev @kubb/cli @kubb/core @kubb/plugin-oas @kubb/plugin-ts @kubb/plugin-zod
npm install zod生成されたスキーマの使用例:
import { petSchema } from './gen/zod'
const result = petSchema.safeParse(apiResponse)
if (result.success) {
console.log(result.data.name)
}Notes
typed: trueを指定すると TypeScript 型アノテーション付きでスキーマが生成される(pluginTsが必要)version: '4'で Zod v4 用のスキーマを生成する(デフォルトは'3')dateType: 'stringOffset'はz.string().datetime({ offset: true })を生成するwrapOutputでスキーマに.openapi()などの後処理を追加できる
cli
Kubb CLI の全コマンドとオプション一覧。
バージョン確認
kubb --versionヘルプ表示
kubb --helpkubb init: プロジェクトの初期化
npx kubb initインタラクティブウィザードで kubb.config.ts を生成する。デフォルトで @kubb/plugin-oas と @kubb/plugin-ts が選択される。
kubb generate: コード生成
kubb generatekubb.config.ts の設定に基づいてコードを生成する。
kubb generate --config ./configs/kubb.config.tsカスタム設定ファイルを指定する。
kubb generate --watch入力ファイルの変更を監視してコードを再生成する。
kubb generate --log-level verboseプラグインのパフォーマンスメトリクスを含む詳細ログを出力する。
kubb generate --debug完全なデバッグログを出力し、.kubb/ ディレクトリにログファイルを作成する。
kubb generate --silent全出力を抑制する。
`kubb generate` オプション一覧:
| オプション | 短縮形 | 説明 |
|---|---|---|
--config | -c | 設定ファイルのパス |
--log-level | -l | ログレベル: silent / info(デフォルト)/ verbose / debug |
--watch | -w | 入力ファイルの変更を監視 |
--verbose | -v | プラグインのパフォーマンスメトリクスを含む詳細ログ |
--debug | -d | 完全なデバッグログ(.kubb/ にログファイルを作成) |
--silent | -s | 全出力を抑制 |
--help | -h | ヘルプを表示 |
kubb validate: OpenAPI ファイルの検証
kubb validate --input petstore.yamlSwagger/OpenAPI ファイルの構文と構造をチェックする。@kubb/oas パッケージが必要。
kubb start: HTTP サーバーの起動
kubb start petStore.yamlkubb start --config kubb.config.tsSSE(Server-Sent Events)ストリーミング付き HTTP サーバーを起動する。
`kubb start` オプション一覧:
| オプション | 短縮形 | デフォルト | 説明 |
|---|---|---|---|
--config | -c | — | 設定ファイルのパス |
--log-level | -l | info | ログレベル |
--port | -p | 自動選択 | サーバーポート |
--host | — | localhost | サーバーホスト名 |
kubb agent: Agent サーバーの管理
kubb agent startKubb Studio との WebSocket 連携用 HTTP サーバーを起動する。
kubb agent start --config ./my-config.tskubb agent start --host 0.0.0.0 --port 8080kubb agent start --allow-writeファイルシステムへの書き込みを許可する。
kubb agent start --allow-all警告: --allow-all はファイルシステム書き込みを含む全権限を付与する。信頼できる環境でのみ使用すること。`kubb agent start` オプション一覧:
| オプション | 短縮形 | デフォルト | 説明 |
|---|---|---|---|
--config | -c | kubb.config.ts | 設定ファイルのパス |
--port | -p | 3000 | サーバーポート |
--host | — | localhost | サーバーホスト名 |
--allow-write | — | — | ファイルシステム書き込みを許可 |
--allow-all | — | — | 全権限を付与(--allow-write を含む) |
kubb mcp: MCP サーバーの起動
npx kubb mcpAI アシスタント(Claude、Cursor 等)向けの MCP(Model Context Protocol)サーバーを起動する。@kubb/mcp パッケージが必要。
scripts
| Name | Description | Path |
|---|---|---|
| cli | Kubb CLI の全コマンドとオプション一覧。 | cli.md |
| generate | OpenAPI 仕様からコードを生成するコマンド集。 | generate.md |
| install | Kubb および関連パッケージのインストール。 | install.md |
| mcp | AI アシスタント連携用の MCP(Model Context Protocol)サーバー操作コマンド。 | mcp.md |