Communitygithub.com

プロジェクトスキャフォールド (claude-mods)

一般的なプロジェクトタイプ向けのボイラープレートを生成し、ベストプラクティスに沿ったデフォルト設定を提供するプロジェクトスキャフォールディングスキルです。

プロジェクトスキャフォールド (claude-mods) とは?

このスキル(claude-mods)は、開発者が新しいプロジェクトを迅速に立ち上げるためのスキャフォールディング(雛形生成)ツールです。API/バックエンド(FastAPI、Express、Gin、Axumなど)、Webアプリケーション(Next.js、Nuxt、SvelteKit、Astro)、CLIツール(Typer、Commander、Cobra、Clap)、ライブラリ/パッケージ(npm、PyPI、Goモジュール、Rustクレート)、モノレポ(Turborepo、Cargo workspaces)など、多様なプロジェクトタイプに対応しています。プロジェクトタイプに応じた意思決定ツリーやスタック選択マトリックスを提供し、最適なフレームワーク・データベース・デプロイ先を提案します。また、実際のスキャフォールドコマンド例、ディレクトリ構造テンプレート、共通の追加設定(Git、CI/CD、Docker、コード品質、テスト、エディタ設定、ドキュメント)のチェックリスト、設定ファイルテンプレート(.editorconfig、pyproject.toml、tsconfig.json)も含まれています。これにより、開発環境のセットアップ時間を大幅に短縮し、プロジェクトごとにベストプラクティスを一貫して適用できます。

対応✓Claude Code~Codex CLI~Cursor✓Antigravity
npx skills add https://github.com/0xDarkMatter/claude-mods/tree/HEAD/skills/scaffold

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

スキャフォールド

一般的なプロジェクトタイプ向けのプロジェクトスキャフォールディングテンプレートとボイラープレート生成。ベストプラクティスに沿ったデフォルト設定を提供します。

プロジェクトタイプ意思決定ツリー

何を構築しますか?
│
├─ API / バックエンドサービス
│  ├─ REST API
│  │  ├─ Python → FastAPI(非同期、OpenAPI自動ドキュメント)
│  │  ├─ Node.js → Express または Fastify(パフォーマンス重視ならFastify)
│  │  ├─ Go → Gin(使いやすい)または Echo(ミドルウェア豊富)
│  │  └─ Rust → Axum(towerエコシステム、非同期ファースト)
│  ├─ GraphQL API
│  │  ├─ Python → Strawberry + FastAPI
│  │  ├─ Node.js → Apollo Server または Pothos + Yoga
│  │  ├─ Go → gqlgen(コードファースト)
│  │  └─ Rust → async-graphql + Axum
│  └─ gRPCサービス
│     ├─ Python → grpcio + protobuf
│     ├─ Go → google.golang.org/grpc
│     └─ Rust → tonic
│
├─ Webアプリケーション
│  ├─ フルスタック(SSR)
│  │  ├─ Reactエコシステム → Next.js 14+(App Router)
│  │  ├─ Vueエコシステム → Nuxt 3
│  │  ├─ Svelteエコシステム → SvelteKit
│  │  └─ コンテンツ重視/マルチフレームワーク → Astro
│  ├─ SPA(クライアントサイドのみ)
│  │  ├─ React → Vite + React + React Router
│  │  ├─ Vue → Vite + Vue + Vue Router
│  │  └─ Svelte → Vite + Svelte + svelte-routing
│  └─ 静的サイト
│     ├─ ブログ/ドキュメント → Astro または VitePress
│     └─ マーケティング/ランディング → Astro または Next.js(静的エクスポート)
│
├─ CLIツール
│  ├─ Python → Typer(シンプル)または Click(複雑)
│  ├─ Node.js → Commander + Inquirer
│  ├─ Go → Cobra + Viper
│  └─ Rust → Clap(derive API)
│
├─ ライブラリ/パッケージ
│  ├─ npmパッケージ → TypeScript + tsup + Vitest
│  ├─ PyPIパッケージ → uv + pyproject.toml + pytest
│  ├─ Goモジュール → go mod init + go test
│  └─ Rustクレート → cargo init --lib + cargo test
│
└─ モノレポ
   ├─ JavaScript/TypeScript → Turborepo + pnpm workspaces
   ├─ フルスタックJS → Nx
   ├─ Go → Go workspaces (go.work)
   ├─ Rust → Cargo workspaces
   └─ Python → uv workspaces または hatch

スタック選択マトリックス

プロジェクトタイプ言語フレームワークデータベースORM/クエリビルダーデプロイ先
REST APIPythonFastAPIPostgreSQLSQLAlchemy + AlembicDocker / AWS ECS
REST APINode.jsFastifyPostgreSQLPrisma または DrizzleDocker / Vercel
REST APIGoGinPostgreSQLsqlx (生) または GORMDocker / Fly.io
REST APIRustAxumPostgreSQLsqlxDocker / Fly.io
WebアプリTypeScriptNext.js 14+PostgreSQLPrisma または DrizzleVercel / Docker
WebアプリTypeScriptNuxt 3PostgreSQLPrismaVercel / Netlify
WebアプリTypeScriptAstroSQLite / なしDrizzleCloudflare / Netlify
CLIツールPythonTyperSQLitesqlite3 stdlibPyPI
CLIツールGoCobraSQLite / BoltDBsqlxGitHub Releases
CLIツールRustClapSQLiterusqlitecrates.io
ライブラリTypeScripttsupn/an/anpm
ライブラリPythonhatch/uvn/an/aPyPI

クイックスキャフォールドコマンド

Python (API)

# uvを使ったFastAPI
mkdir my-api && cd my-api
uv init --python 3.12
uv add fastapi uvicorn sqlalchemy alembic psycopg2-binary pydantic-settings
uv add --dev pytest pytest-asyncio httpx ruff mypy

Node.js (Webアプリ)

# Next.js 14+
npx create-next-app@latest my-app --typescript --tailwind --eslint --app --src-dir --import-alias "@/*"

# Vite + React
npm create vite@latest my-app -- --template react-ts

Go (API)

mkdir my-api && cd my-api
go mod init github.com/user/my-api
go get github.com/gin-gonic/gin
go get github.com/jmoiron/sqlx
go get github.com/lib/pq

Rust (CLI)

cargo init my-cli
cd my-cli
cargo add clap --features derive
cargo add serde --features derive
cargo add anyhow tokio --features tokio/full

モノレポ (Turborepo)

npx create-turbo@latest my-monorepo
# または手動:
mkdir my-monorepo && cd my-monorepo
npm init -y
npm install turbo --save-dev
mkdir -p apps/web apps/api packages/shared

APIプロジェクトテンプレート

ディレクトリ構造 (FastAPI例)

my-api/
├── src/
│   └── my_api/
│       ├── __init__.py
│       ├── main.py              # FastAPIアプリ、ライフスパン、ミドルウェア
│       ├── config.py            # pydantic-settingsによる設定
│       ├── database.py          # SQLAlchemyエンジン、セッション
│       ├── dependencies.py      # 共有FastAPI依存関係
│       ├── routers/
│       │   ├── __init__.py
│       │   ├── health.py        # ヘルスチェックエンドポイント
│       │   └── users.py         # ユーザーCRUDエンドポイント
│       ├── models/
│       │   ├── __init__.py
│       │   └── user.py          # SQLAlchemyモデル
│       ├── schemas/
│       │   ├── __init__.py
│       │   └── user.py          # Pydanticリクエスト/レスポンススキーマ
│       └── services/
│           ├── __init__.py
│           └── user.py          # ビジネスロジック
├── alembic/
│   ├── alembic.ini
│   ├── env.py
│   └── versions/
├── tests/
│   ├── conftest.py              # フィクスチャ: テストDB、クライアント、ファクトリ
│   ├── test_health.py
│   └── test_users.py
├── pyproject.toml
├── Dockerfile
├── docker-compose.yml
├── .env.example
├── .gitignore
└── .dockerignore

ディレクトリ構造 (Express/Fastify例)

my-api/
├── src/
│   ├── index.ts                 # エントリポイント、サーバー起動
│   ├── app.ts                   # Express/Fastifyアプリ設定
│   ├── config.ts                # zod検証付き環境設定
│   ├── database.ts              # PrismaクライアントまたはDrizzle設定
│   ├── middleware/
│   │   ├── auth.ts
│   │   ├── error-handler.ts
│   │   └── request-logger.ts
│   ├── routes/
│   │   ├── health.ts
│   │   └── users.ts
│   ├── services/
│   │   └── user.service.ts
│   └── types/
│       └── index.ts
├── prisma/
│   └── schema.prisma
├── tests/
│   ├── setup.ts
│   └── routes/
│       └── users.test.ts
├── package.json
├── tsconfig.json
├── Dockerfile
├── docker-compose.yml
├── .env.example
└── .gitignore

Webアプリケーションプロジェクトテンプレート

ディレクトリ構造 (Next.js App Router)

my-app/
├── src/
│   ├── app/
│   │   ├── layout.tsx           # ルートレイアウト
│   │   ├── page.tsx             # ホームページ
│   │   ├── loading.tsx          # グローバルローディングUI
│   │   ├── error.tsx            # グローバルエラーバウンダリ
│   │   ├── not-found.tsx        # 404ページ
│   │   ├── globals.css          # グローバルスタイル + Tailwind
│   │   ├── (auth)/
│   │   │   ├── login/page.tsx
│   │   │   └── register/page.tsx
│   │   ├── dashboard/
│   │   │   ├── layout.tsx
│   │   │   └── page.tsx
│   │   └── api/
│   │       └── health/route.ts
│   ├── components/
│   │   ├── ui/                  # 再利用可能なプリミティブ
│   │   └── features/            # 機能固有のコンポーネント
│   ├── lib/
│   │   ├── db.ts                # データベースクライアント
│   │   ├── auth.ts              # 認証ヘルパー
│   │   └── utils.ts             # 共有ユーティリティ
│   └── types/
│       └── index.ts
├── public/
│   └── favicon.ico
├── tests/
│   ├── setup.ts
│   └── components/
├── next.config.ts
├── tailwind.config.ts
├── tsconfig.json
├── package.json
├── .env.local.example
└── .gitignore

CLIツールプロジェクトテンプレート

ディレクトリ構造 (Python / Typer)

my-cli/
├── src/
│   └── my_cli/
│       ├── __init__.py
│       ├── __main__.py          # python -m my_cliのエントリ
│       ├── cli.py               # Typerアプリ、コマンドグループ
│       ├── commands/
│       │   ├── __init__.py
│       │   ├── init.py          # my-cli init
│       │   └── run.py           # my-cli run
│       ├── config.py            # 設定ファイルの読み込み (TOML/YAML)
│       └── utils.py
├── tests/
│   ├── conftest.py
│   └── test_commands.py
├── pyproject.toml               # [project.scripts] エントリポイント
├── .gitignore
└── README.md

ディレクトリ構造 (Go / Cobra)

my-cli/
├── cmd/
│   ├── root.go                  # ルートコマンド、グローバルフラグ
│   ├── init.go                  # my-cli init
│   └── run.go                   # my-cli run
├── internal/
│   ├── config/
│   │   └── config.go            # Viper設定読み込み
│   └── runner/
│       └── runner.go            # コアロジック
├── main.go                      # エントリポイント、cmd.Execute()を呼び出す
├── go.mod
├── go.sum
├── Makefile
└── .gitignore

ライブラリプロジェクトテンプレート

ディレクトリ構造 (npmパッケージ)

my-lib/
├── src/
│   ├── index.ts                 # 公開APIエクスポート
│   ├── core.ts                  # コア実装
│   └── types.ts                 # 公開型定義
├── tests/
│   └── core.test.ts
├── package.json                 # "type": "module", exportsマップ
├── tsconfig.json                # declaration: true, declarationMap: true
├── tsup.config.ts               # ビルド設定: cjs + esm
├── vitest.config.ts
├── .npmignore
├── .gitignore
├── CHANGELOG.md
└── LICENSE

ディレクトリ構造 (PyPIパッケージ)

my-lib/
├── src/
│   └── my_lib/
│       ├── __init__.py          # 公開API、__version__
│       ├── core.py
│       └── py.typed             # PEP 561マーカー
├── tests/
│   ├── conftest.py
│   └── test_core.py
├── pyproject.toml               # ビルドシステム、メタデータ、ツール設定
├── .gitignore
├── CHANGELOG.md
└── LICENSE

モノレポテンプレート

Turborepo + pnpm Workspaces

my-monorepo/
├── apps/
│   ├── web/                     # Next.jsフロントエンド
│   │   ├── src/
│   │   ├── package.json         # @repo/sharedに依存
│   │   └── tsconfig.json        # ../../tsconfig.base.jsonを拡張
│   └── api/                     # Fastifyバックエンド
│       ├── src/
│       ├── package.json
│       └── tsconfig.json
├── packages/
│   ├── shared/                  # 共有型、ユーティリティ、バリデータ
│   │   ├── src/
│   │   ├── package.json         # "name": "@repo/shared"
│   │   └── tsconfig.json
│   ├── ui/                      # 共有Reactコンポーネント
│   │   ├── src/
│   │   └── package.json         # "name": "@repo/ui"
│   └── config/                  # 共有設定
│       ├── eslint/
│       ├── typescript/
│       └── package.json
├── turbo.json                   # パイプライン: build, test, lint
├── pnpm-workspace.yaml          # packages: ["apps/*", "packages/*"]
├── package.json                 # ルートdevDeps: turbo
├── tsconfig.base.json           # 共有TypeScript設定
├── .gitignore
└── .npmrc

Cargo Workspaces (Rust)

my-workspace/
├── crates/
│   ├── my-core/                 # コアライブラリ
│   │   ├── src/lib.rs
│   │   └── Cargo.toml
│   ├── my-cli/                  # CLIバイナリ
│   │   ├── src/main.rs
│   │   └── Cargo.toml           # my-coreに依存
│   └── my-server/               # APIバイナリ
│       ├── src/main.rs
│       └── Cargo.toml
├── Cargo.toml                   # [workspace] members = ["crates/*"]
├── Cargo.lock
├── .gitignore
└── rust-toolchain.toml

よくある追加設定チェックリスト

プロジェクト設定完了? 以下を追加:
│
├─ バージョン管理
│  ├─ [ ] .gitignore(言語固有)
│  ├─ [ ] .gitattributes(改行コード、バイナリファイル)
│  └─ [ ] ブランチ保護ルール
│
├─ CI/CD
│  ├─ [ ] GitHub Actionsワークフロー(PRでテスト、マージでデプロイ)
│  ├─ [ ] マトリックステスト(OS、ランタイムバージョン)
│  └─ [ ] リリース自動化
│
├─ Docker
│  ├─ [ ] マルチステージDockerfile
│  ├─ [ ] docker-compose.yml(アプリ + データベース + キャッシュ)
│  ├─ [ ] .dockerignore
│  └─ [ ] ヘルスチェックエンドポイント
│
├─ コード品質
│  ├─ [ ] リンター(ESLint, Ruff, golangci-lint, Clippy)
│  ├─ [ ] フォーマッター(Prettier, Black/Ruff, gofmt, rustfmt)
│  ├─ [ ] プリコミットフック(Husky, pre-commit)
│  └─ [ ] 型チェック(TypeScript strict, mypy, go vet)
│
├─ テスト
│  ├─ [ ] テストフレームワーク設定(Vitest, pytest, go test)
│  ├─ [ ] カバレッジレポート
│  ├─ [ ] テストデータベース設定
│  └─ [ ] CIテストパイプライン
│
├─ エディタ
│  ├─ [ ] .editorconfig
│  ├─ [ ] .vscode/settings.json
│  └─ [ ] .vscode/extensions.json
│
└─ ドキュメント
   ├─ [ ] README.md(プロジェクト説明、設定、使い方)
   ├─ [ ] AGENTS.md — repo-doctorスキルの
   │      assets/AGENTS-template.md からシード(Landminesセクションは必須;
   │      原則: rules/agentic-quality.md)
   ├─ [ ] CONTRIBUTING.md
   └─ [ ] APIドキュメント(OpenAPI, godoc, rustdoc)

設定ファイルテンプレート

.editorconfig (汎用)

root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.{py,rs}]
indent_size = 4

[*.go]
indent_style = tab

[*.md]
trim_trailing_whitespace = false

[Makefile]
indent_style = tab

pyproject.toml (Python)

[project]
name = "my-project"
version = "0.1.0"
requires-python = ">=3.12"

[tool.ruff]
target-version = "py312"
line-length = 88

[tool.ruff.lint]
select = ["E", "F", "I", "UP", "B", "SIM"]

[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"

[tool.mypy]
strict = true

tsconfig.json (TypeScript - 厳格)

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "resolveJsonModule": true,
    "declaration": true,
    "declarationMap": true,
    "sourceMap": true,
    "outDir": "./dist",
    "rootDir": "./src"
  },
  "include": ["src"],
  "exclude": ["node_modules", "dist"]
}

よくある落とし穴

落とし穴原因予防策
誤った .gitignore (言語に不適切)汎用テンプレートを使用し、言語固有のエントリが不足gitignore.io またはGitHubのテンプレートをスタックに合わせて使用する
.env.example の作成忘れチームメンバーが必要な環境変数を把握できないプロジェクト開始時にすべての変数(値は空)を含む .env.example を作成する
ロックファイルの未コミット環境間で依存関係のバージョンが不一致package-lock.json, uv.lock, go.sum, Cargo.lock をコミットする
コード内でのポート/ホストのハードコードローカルでは動作するが、Docker/クラウドで壊れる常に環境変数から読み取り、適切なデフォルト値を設定する
実際のデータベースに結合したテストデータベースが動作していないとテストが失敗、CIのセットアップが複雑インメモリDBまたはテストコンテナを使用し、テストごとに分離する
ビルド成果物の誤った扱いdist/ や pycache などのコミット忘れ/誤った .gitignore.gitignore にビルド出力ディレクトリを常に含め、Dockerではマルチステージビルドを使用する
プリミティブ型の過度な使用アプリケーションの成長に伴い、意図や制約が不明瞭になるドメイン固有の型(NewType, 型エイリアス, Pydanticモデル)を作成する
非対称的なエラーハンドリング一部のエッジケースだけが適切に処理され、他は無視される統一的なエラーハンドリング(Result型、カスタムエラークラス、グローバルミドルウェア)を実装する

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル