nitro
NuxtやAnalogの基盤エンジンであるNitroを活用し、APIサーバー構築やエッジデプロイ、サーバーサイドのルーティングなどを実現、多様なプラットフォームへの設定変更なしでのデプロイを可能にするSkill。
📜 元の英語説明(参考)
Build server-side applications with Nitro — the engine behind Nuxt server routes and Analog. Use when someone asks to "create an API server", "deploy to edge", "build server routes", "universal JavaScript server", "Nitro server", "deploy to Cloudflare Workers/Vercel/Netlify/Deno", or "isomorphic server". Covers API routes, middleware, storage, caching, WebSocket, task scheduling, and deployment to 15+ platforms with zero config changes.
🇯🇵 日本人クリエイター向け解説
NuxtやAnalogの基盤エンジンであるNitroを活用し、APIサーバー構築やエッジデプロイ、サーバーサイドのルーティングなどを実現、多様なプラットフォームへの設定変更なしでのデプロイを可能にするSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o nitro.zip https://jpskill.com/download/15172.zip && unzip -o nitro.zip && rm nitro.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/15172.zip -OutFile "$d\nitro.zip"; Expand-Archive "$d\nitro.zip" -DestinationPath $d -Force; ri "$d\nitro.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
nitro.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
nitroフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Nitro
概要
Nitro はユニバーサルなサーバーエンジンです。サーバーコードを一度書けば、どこにでもデプロイできます。Node.js、Deno、Bun、Cloudflare Workers、Vercel Edge、AWS Lambda、Netlify — 同じコードで、設定変更は不要です。Nuxt のサーバールートを強化しますが、あらゆる API やフルスタックアプリケーション向けにスタンドアロンでも動作します。ファイルベースのルーティング、組み込みの KV ストレージ、自動インポート、ホットリロードが可能です。
どのような時に使うか
- 複数のプラットフォームにデプロイする必要がある API を構築する場合
- エッジファーストなアプリケーション (Cloudflare Workers、Vercel Edge)
- フロントエンドフレームワーク (Nuxt だけでなく) のサーバーサイドコンパニオン
- 外部パッケージなしで、組み込みのキャッシュ、ストレージ、タスクスケジューリングが必要な場合
- Express/Fastify をプラットフォームに依存しないソリューションに移行する場合
手順
セットアップ
npx giget@latest nitro my-server
cd my-server
npm install
npm run dev
ファイルベースの API ルート
server/
├── routes/
│ ├── index.ts # GET /
│ ├── users/
│ │ ├── index.get.ts # GET /users
│ │ ├── index.post.ts # POST /users
│ │ └── [id].get.ts # GET /users/:id
│ └── health.ts # GET /health
├── middleware/
│ └── auth.ts # すべてのリクエストの前に実行
├── plugins/
│ └── database.ts # 初期化ロジック
└── utils/
└── db.ts # 共有ユーティリティ (自動インポート)
// server/routes/users/index.get.ts — ユーザー一覧
export default defineEventHandler(async (event) => {
const query = getQuery(event);
const page = Number(query.page) || 1;
const limit = Math.min(Number(query.limit) || 20, 100);
const users = await db.user.findMany({
skip: (page - 1) * limit,
take: limit,
});
return { users, page, limit };
});
// server/routes/users/index.post.ts — ユーザー作成
export default defineEventHandler(async (event) => {
const body = await readBody(event);
if (!body.email || !body.name) {
throw createError({ statusCode: 400, message: "Email and name required" });
}
const user = await db.user.create({ data: body });
setResponseStatus(event, 201);
return user;
});
// server/routes/users/[id].get.ts — ID でユーザーを取得
export default defineEventHandler(async (event) => {
const id = getRouterParam(event, "id");
const user = await db.user.findUnique({ where: { id } });
if (!user) {
throw createError({ statusCode: 404, message: "User not found" });
}
return user;
});
ミドルウェア
// server/middleware/auth.ts — すべてのルートの認証ミドルウェア
export default defineEventHandler(async (event) => {
// パブリックルートの認証をスキップ
const url = getRequestURL(event);
if (url.pathname === "/health" || url.pathname.startsWith("/auth/")) return;
const token = getHeader(event, "authorization")?.replace("Bearer ", "");
if (!token) {
throw createError({ statusCode: 401, message: "Unauthorized" });
}
const user = await verifyToken(token);
event.context.user = user;
});
組み込みストレージ (KV)
// server/routes/cache/[key].ts — KV ストレージ (すべてのプラットフォームで動作)
export default defineEventHandler(async (event) => {
const key = getRouterParam(event, "key")!;
if (event.method === "GET") {
const value = await useStorage("cache").getItem(key);
if (!value) throw createError({ statusCode: 404 });
return value;
}
if (event.method === "PUT") {
const body = await readBody(event);
await useStorage("cache").setItem(key, body);
return { ok: true };
}
});
あらゆるプラットフォームへのデプロイ
# さまざまなターゲット向けにビルド
NITRO_PRESET=cloudflare-pages npx nitro build
NITRO_PRESET=vercel npx nitro build
NITRO_PRESET=netlify npx nitro build
NITRO_PRESET=node-server npx nitro build
NITRO_PRESET=deno-server npx nitro build
NITRO_PRESET=bun npx nitro build
NITRO_PRESET=aws-lambda npx nitro build
例
例 1: Cloudflare Workers にデプロイする REST API を構築する
ユーザープロンプト: "Cloudflare Workers エッジで実行される CRUD ルートを持つ REST API を作成してください。"
エージェントは、ファイルベースの CRUD ルート、認証用ミドルウェア、ストレージ用 Cloudflare KV、および Workers 用のデプロイ構成を備えた Nitro プロジェクトを作成します。
例 2: キャッシュとスケジュールされたタスクを持つ API
ユーザープロンプト: "高価なデータベースクエリをキャッシュし、1 時間ごとに更新する API を構築してください。"
エージェントは、キャッシュに Nitro の組み込みストレージを使用し、スケジュールされた更新に defineTask を使用し、ルートレベルのキャッシュヘッダーを使用します。
ガイドライン
- ファイル名 = HTTP メソッド —
users.get.ts、users.post.ts、users.delete.ts - 動的ルート用の
[param]—[id].get.tsは:idをキャプチャします useStorage()はユニバーサル — すべてのプラットフォーム (メモリ、Redis、Cloudflare KV) で動作する KV- HTTP エラー用の
createError()— ステータスコード付きの構造化されたエラーレスポンス - 自動インポート —
defineEventHandler、readBody、getQueryはインポートなしで使用できます - ミドルウェアはすべてのリクエストで実行されます — パスチェックを使用してパブリックルートをスキップします
- デプロイメント用の
NITRO_PRESET— 1 つのコードベース、15 以上のデプロイメントターゲット - リクエスト状態用の
event.context— ミドルウェアとハンドラー間でデータを渡します
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Nitro
Overview
Nitro is a universal server engine — write your server code once, deploy it anywhere. Node.js, Deno, Bun, Cloudflare Workers, Vercel Edge, AWS Lambda, Netlify — same code, zero config changes. It powers Nuxt's server routes but works standalone for any API or full-stack app. File-based routing, built-in KV storage, auto-imports, and hot reload.
When to Use
- Building APIs that need to deploy to multiple platforms
- Edge-first applications (Cloudflare Workers, Vercel Edge)
- Server-side companion for a frontend framework (not just Nuxt)
- Need built-in caching, storage, and task scheduling without external packages
- Migrating Express/Fastify to a platform-agnostic solution
Instructions
Setup
npx giget@latest nitro my-server
cd my-server
npm install
npm run dev
File-Based API Routes
server/
├── routes/
│ ├── index.ts # GET /
│ ├── users/
│ │ ├── index.get.ts # GET /users
│ │ ├── index.post.ts # POST /users
│ │ └── [id].get.ts # GET /users/:id
│ └── health.ts # GET /health
├── middleware/
│ └── auth.ts # Runs before every request
├── plugins/
│ └── database.ts # Initialization logic
└── utils/
└── db.ts # Shared utilities (auto-imported)
// server/routes/users/index.get.ts — List users
export default defineEventHandler(async (event) => {
const query = getQuery(event);
const page = Number(query.page) || 1;
const limit = Math.min(Number(query.limit) || 20, 100);
const users = await db.user.findMany({
skip: (page - 1) * limit,
take: limit,
});
return { users, page, limit };
});
// server/routes/users/index.post.ts — Create user
export default defineEventHandler(async (event) => {
const body = await readBody(event);
if (!body.email || !body.name) {
throw createError({ statusCode: 400, message: "Email and name required" });
}
const user = await db.user.create({ data: body });
setResponseStatus(event, 201);
return user;
});
// server/routes/users/[id].get.ts — Get user by ID
export default defineEventHandler(async (event) => {
const id = getRouterParam(event, "id");
const user = await db.user.findUnique({ where: { id } });
if (!user) {
throw createError({ statusCode: 404, message: "User not found" });
}
return user;
});
Middleware
// server/middleware/auth.ts — Auth middleware for all routes
export default defineEventHandler(async (event) => {
// Skip auth for public routes
const url = getRequestURL(event);
if (url.pathname === "/health" || url.pathname.startsWith("/auth/")) return;
const token = getHeader(event, "authorization")?.replace("Bearer ", "");
if (!token) {
throw createError({ statusCode: 401, message: "Unauthorized" });
}
const user = await verifyToken(token);
event.context.user = user;
});
Built-in Storage (KV)
// server/routes/cache/[key].ts — KV storage (works on every platform)
export default defineEventHandler(async (event) => {
const key = getRouterParam(event, "key")!;
if (event.method === "GET") {
const value = await useStorage("cache").getItem(key);
if (!value) throw createError({ statusCode: 404 });
return value;
}
if (event.method === "PUT") {
const body = await readBody(event);
await useStorage("cache").setItem(key, body);
return { ok: true };
}
});
Deploy to Any Platform
# Build for different targets
NITRO_PRESET=cloudflare-pages npx nitro build
NITRO_PRESET=vercel npx nitro build
NITRO_PRESET=netlify npx nitro build
NITRO_PRESET=node-server npx nitro build
NITRO_PRESET=deno-server npx nitro build
NITRO_PRESET=bun npx nitro build
NITRO_PRESET=aws-lambda npx nitro build
Examples
Example 1: Build a REST API that deploys to Cloudflare Workers
User prompt: "Create a REST API with CRUD routes that runs on Cloudflare Workers edge."
The agent will create a Nitro project with file-based CRUD routes, middleware for auth, Cloudflare KV for storage, and deploy config for Workers.
Example 2: API with caching and scheduled tasks
User prompt: "Build an API that caches expensive database queries and refreshes them every hour."
The agent will use Nitro's built-in storage for caching, defineTask for scheduled refreshes, and route-level cache headers.
Guidelines
- File naming = HTTP method —
users.get.ts,users.post.ts,users.delete.ts [param]for dynamic routes —[id].get.tscaptures:iduseStorage()is universal — KV that works on every platform (memory, Redis, Cloudflare KV)createError()for HTTP errors — structured error responses with status codes- Auto-imports —
defineEventHandler,readBody,getQueryare available without imports - Middleware runs on every request — use path checks to skip public routes
NITRO_PRESETfor deployment — one codebase, 15+ deployment targetsevent.contextfor request state — pass data between middleware and handlers