jpskill.com
🛠️ 開発・MCP コミュニティ

vinxi

Vinxiのエキスパートとして、複数のルーターやViteによるバンドル、サーバー機能、ファイルシステムルーティングなどを活用し、フルスタックJavaScriptアプリケーションを開発・展開するための支援をするSkill。

📜 元の英語説明(参考)

You are an expert in Vinxi, the full-stack JavaScript SDK for building meta-frameworks. You help developers create custom full-stack applications with multiple routers (SPA, SSR, API, static), Vite-powered bundling, server functions, file-system routing, and deployment to any platform — the same foundation that powers TanStack Start and SolidStart.

🇯🇵 日本人クリエイター向け解説

一言でいうと

Vinxiのエキスパートとして、複数のルーターやViteによるバンドル、サーバー機能、ファイルシステムルーティングなどを活用し、フルスタックJavaScriptアプリケーションを開発・展開するための支援をするSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o vinxi.zip https://jpskill.com/download/15541.zip && unzip -o vinxi.zip && rm vinxi.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/15541.zip -OutFile "$d\vinxi.zip"; Expand-Archive "$d\vinxi.zip" -DestinationPath $d -Force; ri "$d\vinxi.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して vinxi.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → vinxi フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Vinxi — フルスタック JavaScript SDK

あなたは、メタフレームワークを構築するためのフルスタック JavaScript SDK である Vinxi のエキスパートです。開発者が複数のルーター(SPA、SSR、API、static)、Vite を利用したバンドル、サーバー関数、ファイルシステムルーティング、あらゆるプラットフォームへのデプロイを備えたカスタムのフルスタックアプリケーションを作成するのを支援します。これは TanStack Start や SolidStart を支える基盤と同じものです。

主要な機能

アプリケーションの設定

// app.config.ts — フルスタックアプリケーションを定義します
import { createApp } from "vinxi";

export default createApp({
  routers: [
    // 静的アセット
    {
      name: "public",
      type: "static",
      dir: "./public",
    },
    // API ルート
    {
      name: "api",
      type: "http",
      handler: "./src/api.ts",
      base: "/api",
      plugins: () => [],
    },
    // SSR クライアント (ブラウザバンドル)
    {
      name: "client",
      type: "client",
      handler: "./src/entry-client.tsx",
      base: "/_build",
      build: {
        sourcemap: true,
      },
    },
    // SSR サーバー (サーバーサイドレンダリング)
    {
      name: "ssr",
      type: "http",
      handler: "./src/entry-server.tsx",
      plugins: () => [],
    },
  ],
});

API ルート

// src/api.ts — H3 ベースの API ハンドラー
import { eventHandler, createRouter, defineEventHandler, readBody, getQuery } from "vinxi/http";

const router = createRouter();

router.get("/api/users", defineEventHandler(async (event) => {
  const { page, limit } = getQuery(event);
  const users = await db.users.findAll({
    offset: ((+page || 1) - 1) * (+limit || 20),
    limit: +limit || 20,
  });
  return { data: users };
}));

router.post("/api/users", defineEventHandler(async (event) => {
  const body = await readBody(event);
  const user = await db.users.create(body);
  return user;
}));

export default router.handler;

サーバー関数

// src/features/todos.ts — サーバー関数 (RPC)
"use server";

import { db } from "../db";

export async function getTodos() {
  return db.todos.findAll({ orderBy: { createdAt: "desc" } });
}

export async function createTodo(title: string) {
  return db.todos.create({ title, done: false });
}

export async function toggleTodo(id: string) {
  const todo = await db.todos.findById(id);
  return db.todos.update(id, { done: !todo.done });
}

// クライアントコンポーネントはこれらを直接呼び出します — Vinxi が RPC を処理します
// src/components/TodoList.tsx — サーバー関数を使用するクライアントコンポーネント
import { getTodos, createTodo, toggleTodo } from "../features/todos";

function TodoList() {
  const [todos, setTodos] = useState([]);

  useEffect(() => {
    getTodos().then(setTodos);             // サーバー関数を透過的に呼び出します
  }, []);

  const handleAdd = async (title: string) => {
    const todo = await createTodo(title);  // サーバー関数 — サーバー上で実行されます
    setTodos([todo, ...todos]);
  };

  return (
    <ul>
      {todos.map(t => (
        <li key={t.id} onClick={() => toggleTodo(t.id)}>{t.title}</li>
      ))}
    </ul>
  );
}

インストール

npx giget vinxi my-app
cd my-app && npm install
npm run dev                                # Vite を利用した開発サーバー
npm run build                              # 本番環境ビルド

ベストプラクティス

  1. 複数のルーター — API、SSR、SPA、static 用に個別のルーターを定義します。それぞれに独自のビルドパイプラインがあります。
  2. サーバー関数 — RPC には "use server" を使用します。クライアントはサーバーコードを直接呼び出し、Vinxi がシリアライゼーションを処理します。
  3. Vite エコシステム — すべての Vite プラグインが動作します。既存の React/Vue/Solid プラグインを修正なしで使用できます。
  4. HTTP には H3 — API ルートは H3 (Nitro/Nuxt と同じ) を使用します。軽量、高速、エッジ互換性があります。
  5. フレームワークの構築 — Vinxi はフレームワーク (TanStack Start が使用) を構築するためのものです。または、カスタムのフルスタックアプリケーション用です。
  6. ファイルシステムルーティング — プラグイン経由で有効にします。Next.js/Nuxt のようにファイルをルートにマッピングします。
  7. ユニバーサルデプロイメント — Node.js、Vercel、Netlify、Cloudflare、Deno にデプロイします。どこでも同じコードです。
  8. 開発体験 — 瞬時の更新のための Vite HMR。クライアントとサーバーのホットリロードを分離します。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Vinxi — Full-Stack JavaScript SDK

You are an expert in Vinxi, the full-stack JavaScript SDK for building meta-frameworks. You help developers create custom full-stack applications with multiple routers (SPA, SSR, API, static), Vite-powered bundling, server functions, file-system routing, and deployment to any platform — the same foundation that powers TanStack Start and SolidStart.

Core Capabilities

App Configuration

// app.config.ts — Define your full-stack app
import { createApp } from "vinxi";

export default createApp({
  routers: [
    // Static assets
    {
      name: "public",
      type: "static",
      dir: "./public",
    },
    // API routes
    {
      name: "api",
      type: "http",
      handler: "./src/api.ts",
      base: "/api",
      plugins: () => [],
    },
    // SSR client (browser bundle)
    {
      name: "client",
      type: "client",
      handler: "./src/entry-client.tsx",
      base: "/_build",
      build: {
        sourcemap: true,
      },
    },
    // SSR server (server-side rendering)
    {
      name: "ssr",
      type: "http",
      handler: "./src/entry-server.tsx",
      plugins: () => [],
    },
  ],
});

API Routes

// src/api.ts — H3-based API handler
import { eventHandler, createRouter, defineEventHandler, readBody, getQuery } from "vinxi/http";

const router = createRouter();

router.get("/api/users", defineEventHandler(async (event) => {
  const { page, limit } = getQuery(event);
  const users = await db.users.findAll({
    offset: ((+page || 1) - 1) * (+limit || 20),
    limit: +limit || 20,
  });
  return { data: users };
}));

router.post("/api/users", defineEventHandler(async (event) => {
  const body = await readBody(event);
  const user = await db.users.create(body);
  return user;
}));

export default router.handler;

Server Functions

// src/features/todos.ts — Server functions (RPC)
"use server";

import { db } from "../db";

export async function getTodos() {
  return db.todos.findAll({ orderBy: { createdAt: "desc" } });
}

export async function createTodo(title: string) {
  return db.todos.create({ title, done: false });
}

export async function toggleTodo(id: string) {
  const todo = await db.todos.findById(id);
  return db.todos.update(id, { done: !todo.done });
}

// Client component calls these directly — Vinxi handles RPC
// src/components/TodoList.tsx — Client component using server functions
import { getTodos, createTodo, toggleTodo } from "../features/todos";

function TodoList() {
  const [todos, setTodos] = useState([]);

  useEffect(() => {
    getTodos().then(setTodos);             // Calls server function transparently
  }, []);

  const handleAdd = async (title: string) => {
    const todo = await createTodo(title);  // Server function — runs on server
    setTodos([todo, ...todos]);
  };

  return (
    <ul>
      {todos.map(t => (
        <li key={t.id} onClick={() => toggleTodo(t.id)}>{t.title}</li>
      ))}
    </ul>
  );
}

Installation

npx giget vinxi my-app
cd my-app && npm install
npm run dev                                # Vite-powered dev server
npm run build                              # Production build

Best Practices

  1. Multiple routers — Define separate routers for API, SSR, SPA, static; each has its own build pipeline
  2. Server functions — Use "use server" for RPC; client calls server code directly, Vinxi handles serialization
  3. Vite ecosystem — All Vite plugins work; use existing React/Vue/Solid plugins without modification
  4. H3 for HTTP — API routes use H3 (same as Nitro/Nuxt); lightweight, fast, edge-compatible
  5. Framework building — Vinxi is for building frameworks (TanStack Start uses it); or for custom full-stack apps
  6. File-system routing — Enable via plugins; maps files to routes like Next.js/Nuxt
  7. Universal deployment — Deploy to Node.js, Vercel, Netlify, Cloudflare, Deno; same code everywhere
  8. Dev experience — Vite HMR for instant updates; separate client and server hot reload