A modern React application with React Router
- Node.js 18.0以上
- パッケージマネージャーpnpm
# 依存関係をインストール
pnpm install初回実行時は、Playwrightブラウザのインストールが必要です:
pnpm pre_installpnpm install 実行時に prepare スクリプト経由で husky が自動的に Git の pre-commit フックを設定します。コミット前に pnpm format:check が走り、Biome のフォーマット違反があるとコミットを中断します。
違反が検出された場合は次を実行してフォーマットを修正してください:
pnpm format緊急時にフックをスキップする場合は git commit --no-verify を使用できます(非推奨)。
pnpm devkippo-ui/
├── app/ # アプリケーションソースコード
│ ├── lib/ # 共有ライブラリ
│ ├── routes/ # ルートコンポーネント
│ ├── app.css # グローバルスタイル
│ ├── root.tsx # ルートコンポーネント
│ └── routes.ts # ルート設定
├── public/ # 静的ファイル
├── tests/ # テストファイル
│ ├── sample.unit.test.ts # ユニットテスト例
│ └── welcome.browser.test.tsx # ブラウザテスト
├── biome.json # Biome設定
├── orval.config.cjs # Orval API設定
├── package.json # npm設定
├── pnpm-workspace.yaml # pnpmワークスペース設定
├── tsconfig.json # TypeScript設定
├── vite.config.ts # Vite設定
└── vitest.config.ts # Vitest設定
| コマンド | 説明 |
|---|---|
pnpm pre_install |
Playwrightブラウザのインストール |
pnpm generate_api_client |
API Clientの生成 |
pnpm dev |
開発サーバーを起動(HMR有効) |
pnpm build |
本番用ビルドを作成 |
pnpm start |
ビルドしたサーバーを起動 |
pnpm lint |
oxlintでコードをチェック |
pnpm lint:strict |
警告もエラーとして扱うlint |
pnpm format |
Biomeでコードをフォーマット |
pnpm format:check |
フォーマットのチェックのみ |
pnpm typecheck |
TypeScriptの型チェック |
pnpm test |
テストを実行 |
pnpm test:cov |
カバレッジレポート付きでテストを実行 |
pnpm check |
型チェック、テスト、フォーマットを一括実行 |
- React 19.2 - UIライブラリ
- React Router 7.9 - ルーティング
- TypeScript 5.9 - 型安全な開発
- Vite 6.3 - 高速ビルドツール
- Tailwind CSS 4.1 - CSSフレームワーク
- Vitest 3.2 - Viteベースのテストランナー
- @vitest/browser - ブラウザ環境でのテスト実行
- Playwright 1.56 - ブラウザ自動化
- Biome - コードフォーマッター
- Oxlint - 高速リンター
- pnpm - パッケージマネージャー
- husky - Git pre-commitフック管理
This project uses orval to generate TypeScript API clients from the OpenAPI specification located at docs/openapi.yaml.
pnpm generate_api_clientThis command:
- Reads the OpenAPI spec from
docs/openapi.yaml - Generates TypeScript functions and types in
app/lib/api/generated/ - Uses the custom fetch wrapper in
app/lib/api/custom-fetch.tsfor authentication and base URL handling
app/lib/api/generated/
├── index.ts # Unified exports (use this for imports)
├── models/ # TypeScript type definitions
│ └── index.ts # All model exports
├── projects/ # Project-related API endpoints (/api/projects/)
├── requirements/ # Requirements API endpoints (/api/requirements/...)
└── token/ # Authentication endpoints (/api/token/)
Import functions and types from the unified index:
import {
projectsList,
assumptionsCreate,
businessRequirementsList,
type RequirementsProjectList,
type ProjectAssumption,
} from "~/lib/api/generated";Requirements-related functions use the requirements prefix and call /api/requirements/... endpoints:
requirementsAssumptionsList→GET /api/requirements/assumptions/requirementsBusinessRequirementsList→GET /api/requirements/business-requirements/
For convenience, aliases without the prefix are also exported:
assumptionsList(alias forrequirementsAssumptionsList)businessRequirementsList(alias forrequirementsBusinessRequirementsList)
- Update
docs/openapi.yamlwith the new API definition - Run
pnpm generate_api_clientto regenerate the client - Update any affected components to use new functions/types
- The API client uses JWT authentication via the
Authorization: Bearerheader - Base URL is configurable via
VITE_BASE_URLenvironment variable (defaults tohttp://localhost:8000) - Auth tokens are stored in
localStorageunderauthToken
vitest.config.tsでは、ユニットテストとブラウザテストの2つのプロジェクトを設定:
// ユニットテスト: Node環境で実行
{
test: {
include: ["tests/**/*.unit.{test,spec}.{ts,tsx}"],
name: "unit",
environment: "node",
}
}
// ブラウザテスト: Playwrightで実行
{
test: {
include: ["tests/**/*.browser.{test,spec}.{ts,tsx}"],
name: "browser",
browser: {
headless: true,
enabled: true,
provider: "playwright",
instances: [{ browser: "chromium" }],
}
}
}このプロジェクトではVitestを使用して、ユニットテストとブラウザテストの両方をサポートしています。
Vitestは2つのプロジェクトで構成されています:
- ユニットテスト - Node.js環境で実行
- ブラウザテスト - Playwrightを使用した実際のブラウザ環境で実行
# 全てのテストを実行
pnpm test
# カバレッジレポート付きでテストを実行
pnpm test:cov
# ウォッチモードでテストを実行
pnpm vitest
# 特定のプロジェクトのみ実行
pnpm vitest --project=unit # ユニットテストのみ
pnpm vitest --project=browser # ブラウザテストのみtests/*.unit.test.{ts,tsx}- ユニットテスト(Node環境)tests/*.browser.test.{ts,tsx}- ブラウザテスト(Playwright)
ブラウザテストは実際のブラウザ環境でコンポーネントをテストします:
- Playwrightを使用してChromiumブラウザで実行
- React DOMのレンダリングとインタラクションをテスト
- ダークモードやレスポンシブデザインのテストも可能
tests/welcome.browser.test.tsxでは以下をテスト:
- コンポーネントの正しいレンダリング
- ライト/ダークモードのロゴ切替
- リンクとSVGアイコンの表示
- CSSクラスの適用
- ホバー効果の動作
npm run buildビルド成果物は build/ ディレクトリに出力されます。
- 作成者: goya813 (your.email@example.com)
- GitHub: https://github.com/goya813/test-react-app
- バージョン: 0.1.0
ポートの競合
# 別のポートで起動
pnpm dev -- --port 3000依存関係のエラー
# node_modulesをクリーンアップ
rm -rf node_modules pnpm-lock.json
pnpm installTypeScriptエラー
# 型チェックを実行
pnpm typecheckビルドエラー
# キャッシュをクリア
rm -rf build
pnpm run buildテストエラー
# スクリーンショットを確認
ls tests/__screenshots__/- このリポジトリをフォーク
- フィーチャーブランチを作成 (
git checkout -b feature/amazing-feature) - 変更をコミット (
git commit -m 'Add some amazing feature') - ブランチにプッシュ (
git push origin feature/amazing-feature) - プルリクエストを作成
このプロジェクトは MIT ライセンスの下で公開されています。