このプロジェクトについて

ParkCoreは、独立した駐車場施設のオーナーを対象としたフルスタックの駐車場運営アプリケーションです。そのスコープは意図的に限定されており、予約の仲介や金銭的な処理ではなく、駐車場の日常的な状態管理に特化しています。READMEには、予約マーケットプレイスや決済プラットフォームではないことが明記されています。 主な機能 - 公開検索:読み取り専用カタログを通じて、誰でも住所や時間料金で有効な駐車場を検索・フィルタリングできます。 - 駐車ライフサイクル:オーナーは自社施設を管理し、各施設の有効状態、公開設定、および新規チェックインの受付可否を制御できます。 - セッション操作:車両のチェックイン、アクティブなセッションの監視、滞在の完了またはキャンセル、およびセッション履歴の確認が可能です。 - 車両認識:ナンバープレートを正規化することで、特定の駐車場におけるリピート訪問時に車両識別子を再利用できます。 - 料金スナップショット:チェックイン時に時間料金と通貨を保存するため、後に施設の現在の設定が変更されても、完了した合計金額の正当性が維持されます。 エンジニアリングアプローチ ドメインルールはAPI境界に配置されています。チェックインを受け付けるには駐車場が有効である必要があり、その駐車場の操作やセッション管理はオーナーのみが可能です。収容人数は、シリアライザブルな永続化処理とデータベース制約によって同時チェックインから保護されており、同一駐車場内での車両の重複登録も防止しています。 ウェブクライアントはコントラクト駆動型です。TypeScriptパッケージである@parkcore/api-clientはAPIのOpenAPIアーティファクトから生成され、pnpm contract:checkによってAPIとクライアント間の乖離を検出します。ブラウザアプリはAPIの内部実装やPrisma型をインポートせず、生成されたクライアントのみを通じてAPIと通信します。 検証はREADMEに記載されたシステム境界ごとに分割されています。ドメインおよび永続化の動作にはPostgreSQLベースのAPIテスト、コンポーネントとルートにはウェブテスト、オーナーのワークフローにはPlaywright、そしてデプロイ済みシステムを検証するための個別のリアルスタックチェックが用いられています。 アーキテクチャとスタック フローは、ブラウザからVercelホストのウェブアプリ(React/Viteおよび生成されたAPIクライアント)、Render API、そしてNeon PostgreSQLへと繋がります。APIアプリは認証、ドメインルール、認可、およびPrismaによる永続化を担います。ウェブアプリは公開検索とオーナー操作を担い、ナビゲーションにReact Routerを、サーバー状態管理にTanStack Queryを使用しています。ツールチェーンにはpnpm workspaces、Vitest、Playwright、ESLint、Prettier、Docker Composeが含まれます。API側はNode.js、Express 5、Prisma、PostgreSQL、Zod、OpenAPIを使用しています。 導入方法 前提条件はNode.js 24、pnpm 10、およびDocker Desktopです。APIおよびウェブアプリ用に提供されている.env.exampleファイルをコピーした後、pnpm install、pnpm docker:up、pnpm db:setup、pnpm devの順に実行します。APIはポート3000で、ウェブアプリは通常ポート5173で起動します。品質管理スクリプトには、フォーマット、リンティング、型チェック、カバレッジ付きテスト、PlaywrightによるE2E実行、コントラクトチェック、およびビルド(VITE_API_URLが必要)が含まれています。 リポジトリ内のドキュメントでは、プロジェクトのスコープ、アーキテクチャ、開発ワークフロー、テスト、およびデプロイについて説明しています。ウェブアプリのライブデモとAPIヘルスチェックエンドポイントへのリンクがREADMEに記載されています。