システム全体像¶
コンポーネント構成¶
① アプリ・デバイス構成
graph TB
subgraph ユーザー
Driver[ドライバー]
Owner[駐車場オーナー]
end
subgraph フロントエンド
Mobile[smooth-mobile]
OwnerApp[smooth-owner]
end
subgraph ハードウェア
Camera[駐車場カメラ]
SmoothBox[SmoothBox]
end
subgraph バックエンド
API[smooth-backend]
DB[(PostgreSQL)]
Cache[(Redis)]
end
Driver --> Mobile
Owner --> OwnerApp
Mobile --> API
OwnerApp --> API
Camera --> SmoothBox
SmoothBox --> API
API --> DB
API --> Cache
② バックエンド ↔ 外部サービス連携
graph LR
API[smooth-backend]
API <-->|決済・Connect| Stripe[Stripe]
API <-->|OAuth 検証| Firebase[Firebase Authentication]
API -->|プッシュ通知| LINE[LINE Bot API]
API -->|画像保存| GCS[Google Cloud Storage]
入出庫・決済フロー¶
sequenceDiagram
box ドライバー側
participant Car as ドライバー
participant App as smooth-mobile
end
box 駐車場
participant Device as SmoothBox
end
box サーバー
participant API as バックエンド
participant Stripe as Stripe
end
Note over Car,Device: 入場
Car->>Device: 駐車場に入る
Device->>API: ナンバープレートを送信
API-->>App: 「駐車中」として表示
Note over Car,Device: 出場
Car->>Device: 駐車場から出る
Device->>API: 出場を検知
API->>Stripe: 料金を自動決済
Stripe-->>API: 決済完了
API-->>App: 決済完了を通知
App-->>Car: 「決済完了」を表示
技術スタックの概要¶
| レイヤー | 技術 |
|---|---|
| フロントエンド | Next.js 16 (App Router), React 19, TypeScript |
| バックエンド | Go 1.25, Gin, Clean Architecture |
| データベース | PostgreSQL + PostGIS(位置情報検索) |
| キャッシュ | Redis(nonce・レート制限) |
| 決済 | Stripe(カード決済・Connect) |
| 認証 | JWT + HTTP-only Cookie, Firebase Authentication (OAuth), LINE LIFF |
| 画像認識 | YOLOv11(ナンバープレート検出) |
| 通知 | LINE Bot API, Firebase Cloud Messaging |
| クラウド | GCP Cloud Run, Cloud SQL, GCS |
| API仕様 | OpenAPI 3.0.3(コード自動生成) |
デプロイ構成¶
- バックエンド: GCP Cloud Run(サーバーレス・自動スケール)
- データベース: Cloud SQL(PostgreSQL, asia-northeast1)
- フロントエンド: Vercel(推定)または Cloud Run
- シークレット管理: GCP Secret Manager
- CI/CD: Cloud Build(プッシュ時に自動ビルド)