mcpField
J
javascript-typescript-typescript-scaffold

javascript-typescript-typescript-scaffold

github.com/sickn33開発48.7k334 回インストール今日更新
リポジトリ

javascript-typescript-typescript-scaffold について

javascript-typescript-typescript-scaffoldは、Node.jsやフロントエンド向けのTypeScriptプロジェクトの雛形を生成するスキルです。プロジェクト種別の選択から構成、テスト、開発ツールまで扱います。

主な機能

  1. 01プロジェクト種別に応じた雛形選択
  2. 02Next.jsとReact + Viteの構成
  3. 03Node.js APIとライブラリの構成
  4. 04TypeScriptとビルド設定
  5. 05Vitestのテスト設定
  6. 06Lintと環境変数の例

活用シーン

  1. 01Next.jsのTypeScriptアプリの開始
  2. 02React + Viteプロジェクトの作成
  3. 03Node.js APIの雛形作成
  4. 04TypeScriptライブラリ構成の準備

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill javascript-typescript-typescript-scaffold

インストール後、Claude Code で/javascript-typescript-typescript-scaffoldを入力して読み込まれたか確認します。

詳細

TypeScript プロジェクトのスキャフォールディング

本番環境に対応した Node.js アプリケーションやフロントエンドアプリケーションのスキャフォールディングを専門とする、TypeScript プロジェクトアーキテクチャのエキスパートです。最新のツール(pnpm、Vite、Next.js)、型安全性、テスト環境、現在のベストプラクティスに沿った設定を備えた、完全なプロジェクト構成を生成します。

このスキルを使用する場面

  • TypeScript プロジェクトのスキャフォールディングに関するタスクやワークフローに取り組む場合
  • TypeScript プロジェクトのスキャフォールディングに関するガイダンス、ベストプラクティス、チェックリストが必要な場合

このスキルを使用しない場面

  • タスクが TypeScript プロジェクトのスキャフォールディングに関係しない場合
  • この範囲外の別の分野やツールが必要な場合

コンテキスト

ユーザーは、一貫性と型安全性を備えたアプリケーションを、適切な構成、依存関係管理、テスト、ビルドツールとともに作成できる、自動化された TypeScript プロジェクトのスキャフォールディングを必要としています。最新の TypeScript のパターンとスケーラブルなアーキテクチャを重視してください。

要件

$ARGUMENTS

手順

1. プロジェクトの種類を分析する

ユーザーの要件からプロジェクトの種類を判断します。

  • Next.js:フルスタックの React アプリケーション、SSR/SSG、API ルート
  • React + Vite:SPA アプリケーション、コンポーネントライブラリ
  • Node.js API:Express/Fastify バックエンド、マイクロサービス
  • ライブラリ:再利用可能なパッケージ、ユーティリティ、ツール
  • CLI:コマンドラインツール、自動化スクリプト
2. pnpm でプロジェクトを初期化する

スキャフォールディングの方法を1つ選びます。Next/Vite の場合は、事前に pnpm init を実行してから上書きするのではなく、新しい空のディレクトリで選択したジェネレーターを実行します。生成されたパッケージやロックファイル、サポートされている Node のバージョンを実際に確認してください。以下のパッケージバージョンは過去の例であり、現在のセキュリティ要件に基づいて承認されたバージョンではありません。ツールをグローバルにインストールしたり、許可なく既存のプロジェクトを上書きしたりしないでください。サニタイズ済みの .env.example は明示的に許可しつつ、.env* のシークレットは無視してください。

# Install pnpm if needed
npm install -g pnpm

# Initialize project
mkdir project-name && cd project-name
pnpm init

# Initialize git
git init
echo "node_modules/" >> .gitignore
echo "dist/" >> .gitignore
echo ".env" >> .gitignore
3. Next.js プロジェクト構成を生成する
# Create Next.js project with TypeScript
pnpm create next-app@latest . --typescript --tailwind --app --src-dir --import-alias "@/*"
nextjs-project/
├── package.json
├── tsconfig.json
├── next.config.js
├── .env.example
├── src/
│   ├── app/
│   │   ├── layout.tsx
│   │   ├── page.tsx
│   │   ├── api/
│   │   │   └── health/
│   │   │       └── route.ts
│   │   └── (routes)/
│   │       └── dashboard/
│   │           └── page.tsx
│   ├── components/
│   │   ├── ui/
│   │   │   ├── Button.tsx
│   │   │   └── Card.tsx
│   │   └── layout/
│   │       ├── Header.tsx
│   │       └── Footer.tsx
│   ├── lib/
│   │   ├── api.ts
│   │   ├── utils.ts
│   │   └── types.ts
│   └── hooks/
│       ├── useAuth.ts
│       └── useFetch.ts
└── tests/
    ├── setup.ts
    └── components/
        └── Button.test.tsx

package.json:

{
  "name": "nextjs-project",
  "version": "0.1.0",
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "eslint .",
    "test": "vitest",
    "type-check": "tsc --noEmit"
  },
  "dependencies": {
    "next": "^14.1.0",
    "react": "^18.2.0",
    "react-dom": "^18.2.0"
  },
  "devDependencies": {
    "@types/node": "^20.11.0",
    "@types/react": "^18.2.0",
    "typescript": "^5.3.0",
    "vitest": "^1.2.0",
    "@vitejs/plugin-react": "^4.2.0",
    "eslint": "^8.56.0",
    "eslint-config-next": "^14.1.0"
  }
}

tsconfig.json:

{
  "compilerOptions": {
    "target": "ES2022",
    "lib": ["ES2022", "DOM", "DOM.Iterable"],
    "jsx": "preserve",
    "module": "ESNext",
    "moduleResolution": "bundler",
    "resolveJsonModule": true,
    "allowJs": true,
    "strict": true,
    "noEmit": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "incremental": true,
    "paths": {
      "@/*": ["./src/*"]
    },
    "plugins": [{"name": "next"}]
  },
  "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
  "exclude": ["node_modules"]
}
4. React + Vite プロジェクト構成を生成する
# Create Vite project
pnpm create vite . --template react-ts

vite.config.ts:

import { defineConfig } from 'vitest/config'
import react from '@vitejs/plugin-react'
import path from 'path'

export default defineConfig({
  plugins: [react()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src'),
    },
  },
  server: {
    port: 3000,
  },
  test: {
    globals: true,
    environment: 'jsdom',
    setupFiles: './tests/setup.ts',
  },
})
5. Node.js API プロジェクト構成を生成する
nodejs-api/
├── package.json
├── tsconfig.json
├── src/
│   ├── index.ts
│   ├── app.ts
│   ├── config/
│   │   ├── database.ts
│   │   └── env.ts
│   ├── routes/
│   │   ├── index.ts
│   │   ├── users.ts
│   │   └── health.ts
│   ├── controllers/
│   │   └── userController.ts
│   ├── services/
│   │   └── userService.ts
│   ├── models/
│   │   └── User.ts
│   ├── middleware/
│   │   ├── auth.ts
│   │   └── errorHandler.ts
│   └── types/
│       └── express.d.ts
└── tests/
    └── routes/
        └── users.test.ts

Node.js API 用 package.json:

{
  "name": "nodejs-api",
  "version": "0.1.0",
  "type": "module",
  "scripts": {
    "dev": "tsx watch src/index.ts",
    "build": "tsc",
    "start": "node dist/index.js",
    "test": "vitest",
    "lint": "eslint src --ext .ts"
  },
  "dependencies": {
    "express": "^4.18.2",
    "dotenv": "^16.4.0",
    "zod": "^3.22.0"
  },
  "devDependencies": {
    "@types/express": "^4.17.21",
    "@types/node": "^20.11.0",
    "typescript": "^5.3.0",
    "tsx": "^4.7.0",
    "vitest": "^1.2.0",
    "eslint": "^8.56.0",
    "@typescript-eslint/parser": "^6.19.0",
    "@typescript-eslint/eslint-plugin": "^6.19.0"
  }
}

src/app.ts:

import express, { Express } from 'express'
import { healthRouter } from './routes/health.js'
import { userRouter } from './routes/users.js'
import { errorHandler } from './middleware/errorHandler.js'

export function createApp(): Express {
  const app = express()

  app.use(express.json())
  app.use('/health', healthRouter)
  app.use('/api/users', userRouter)
  app.use(errorHandler)

  return app
}
6. TypeScript ライブラリ構成を生成する
library-name/
├── package.json
├── tsconfig.json
├── tsconfig.build.json
├── src/
│   ├── index.ts
│   └── core.ts
├── tests/
│   └── core.test.ts
└── dist/

ライブラリ用 package.json:

{
  "name": "@scope/library-name",
  "version": "0.1.0",
  "type": "module",
  "main": "./dist/index.js",
  "types": "./dist/index.d.ts",
  "exports": {
    ".": {
      "types": "./dist/index.d.ts",
      "import": "./dist/index.js"
    }
  },
  "files": ["dist"],
  "scripts": {
    "build": "tsc -p tsconfig.build.json",
    "test": "vitest",
    "prepublishOnly": "pnpm build"
  },
  "devDependencies": {
    "typescript": "^5.3.0",
    "vitest": "^1.2.0"
  }
}
7. 開発ツールを設定する

.env.example:

NODE_ENV=development
PORT=3000
DATABASE_URL=postgresql://user:pass@localhost:5432/db
JWT_SECRET=your-secret-key

vitest.config.ts:

import { defineConfig } from 'vitest/config'

export default defineConfig({
  test: {
    globals: true,
    environment: 'node',
    coverage: {
      provider: 'v8',
      reporter: ['text', 'json', 'html'],
    },
  },
})

.eslintrc.json:

{
  "parser": "@typescript-eslint/parser",
  "extends": [
    "eslint:recommended",
    "plugin:@typescript-eslint/recommended"
  ],
  "rules": {
    "@typescript-eslint/no-explicit-any": "warn",
    "@typescript-eslint/no-unused-vars": "error"
  }
}

出力形式

  1. プロジェクト構成:必要なファイルをすべて含む完全なディレクトリツリー
  2. 設定:package.json、tsconfig.json、ビルドツール
  3. エントリーポイント:型安全な設定を備えたメインアプリケーションファイル
  4. テスト:Vitest の設定を含むテスト構成
  5. ドキュメント:セットアップと使用方法を記載した README
  6. 開発ツール:.env.example、.gitignore、リンター設定

最新のツール、厳格な型安全性、包括的なテスト環境を備えた、本番環境に対応した TypeScript プロジェクトの作成に重点を置いてください。

制限事項

  • このスキルは、上記の範囲に明確に該当するタスクにのみ使用してください。
  • 出力を、環境固有の検証、テスト、専門家によるレビューの代わりとして扱わないでください。
  • 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中断して確認してください。

コメント