javascript-typescript-typescript-scaffold について
javascript-typescript-typescript-scaffoldは、Node.jsやフロントエンド向けのTypeScriptプロジェクトの雛形を生成するスキルです。プロジェクト種別の選択から構成、テスト、開発ツールまで扱います。
主な機能
- 01プロジェクト種別に応じた雛形選択
- 02Next.jsとReact + Viteの構成
- 03Node.js APIとライブラリの構成
- 04TypeScriptとビルド設定
- 05Vitestのテスト設定
- 06Lintと環境変数の例
活用シーン
- 01Next.jsのTypeScriptアプリの開始
- 02React + Viteプロジェクトの作成
- 03Node.js APIの雛形作成
- 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"
}
}
出力形式
- プロジェクト構成:必要なファイルをすべて含む完全なディレクトリツリー
- 設定:package.json、tsconfig.json、ビルドツール
- エントリーポイント:型安全な設定を備えたメインアプリケーションファイル
- テスト:Vitest の設定を含むテスト構成
- ドキュメント:セットアップと使用方法を記載した README
- 開発ツール:.env.example、.gitignore、リンター設定
最新のツール、厳格な型安全性、包括的なテスト環境を備えた、本番環境に対応した TypeScript プロジェクトの作成に重点を置いてください。
制限事項
- このスキルは、上記の範囲に明確に該当するタスクにのみ使用してください。
- 出力を、環境固有の検証、テスト、専門家によるレビューの代わりとして扱わないでください。
- 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中断して確認してください。