技術スタック
本ドキュメントは、TASHIKAプラットフォームで採用する具体的な技術スタック(ライブラリ、フレームワーク、バージョン)を定義します。
→ 満たす設計: バックエンドアーキテクチャ, フロントエンドアーキテクチャ
バックエンド
ランタイム・フレームワーク
| カテゴリ | 選定 | 備考 |
|---|---|---|
| 言語/ランタイム | C# .NET 10 | ASP.NET Core Web API |
| APIスタイル | REST (Minimal APIs) | GraphQL (HotChocolate) も検討可 |
ライブラリ
| カテゴリ | ライブラリ | 備考 |
|---|---|---|
| ORM | Entity Framework Core | PostgreSQL provider |
| CQRS | MediatR | Command/Query ハンドラー |
| バリデーション | FluentValidation | |
| 帳票生成 | QuestPDF | SaaS利用には有償ライセンスが必要 |
| ログ | Serilog | 構造化ログ |
| シリアライズ | System.Text.Json | スナップショットのJSON保存 |
| 非同期ジョブ | Hangfire + Hangfire.PostgreSql | バックグラウンドジョブ基盤。PostgreSQLバックエンド |
| テンプレートエンジン | Scriban | 通知テンプレート(Liquid互換) |
| メール配信 | SendGrid C# SDK | トランザクショナルメール |
| 決済 | Stripe .NET SDK | サブスクリプション請求・Webhook入金通知・カードトークン化 |
| 耐障害性 | Polly via Microsoft.Extensions.Http.Resilience | Circuit Breaker, Retry, Timeout |
テストツール
| カテゴリ | ライブラリ | 備考 |
|---|---|---|
| ユニットテスト | xUnit + FluentAssertions | |
| プロパティテスト | FsCheck | 不変条件の検証 |
| 統合テスト | Testcontainers | PostgreSQL コンテナ起動 |
| モック | NSubstitute + WireMock.Net |
開発ツール
| カテゴリ | ツール | 備考 |
|---|---|---|
| 静的解析 | Roslyn Analyzers + StyleCop.Analyzers | |
| フォーマッター | dotnet format + .editorconfig | |
| セキュリティスキャン | SonarCloud + Dependabot |
フロントエンド
ランタイム・フレームワーク
| カテゴリ | 選定 | 備考 |
|---|---|---|
| 言語 | TypeScript 5.x | |
| フレームワーク | React 19 + Vite | |
| ルーティング | TanStack Router | 型安全ルーティング |
| 状態管理 | TanStack Query | サーバーデータのキャッシュと同期 |
ライブラリ
| カテゴリ | ライブラリ | 備考 |
|---|---|---|
| UIコンポーネント | Tailwind Plus | 有償ライセンス保有 |
| スタイリング | Tailwind CSS | |
| フォーム | React Hook Form + Zod | スキーマバリデーション |
| API クライアント | openapi-fetch | OpenAPI 型自動生成 |
| アイコン | Lucide React | |
| 日付処理 | date-fns |
テストツール
| カテゴリ | ライブラリ | 備考 |
|---|---|---|
| ユニットテスト | Vitest + Testing Library | |
| E2Eテスト | Playwright | |
| アクセシビリティ | axe-core | WCAG 2.1 AA 準拠確認 |
| ビジュアルリグレッション | Chromatic (Optional) |
開発ツール
| カテゴリ | ツール | 備考 |
|---|---|---|
| 静的解析 | ESLint (Flat Config) + typescript-eslint | |
| フォーマッター | Prettier | |
| 型チェック | tsc --noEmit | CI必須 |
| バンドル分析 | rollup-plugin-visualizer |
データベース
| カテゴリ | 選定 | 備考 |
|---|---|---|
| RDBMS | PostgreSQL 16+ | |
| セキュリティ | Row Level Security (RLS) | TenantIdによる強制分離 |
| パーティション | TaxYear ごと | 1月集中時の高速検索 |
| 非構造化データ | JSONB + GIN Index | スナップショット保存 |
認証・セキュリティ
| カテゴリ | 選定 | 備考 |
|---|---|---|
| 認証基盤 | ASP.NET Core Identity | 将来的なIDaaS移行オプションあり |
| トークン | JWT | Access: 15分, Refresh: 7日 |
| MFA | TOTP | Google Authenticator互換 |
| 鍵管理 | Cloud KMS | HSM保護 |
→ 満たす設計: セキュリティ設計
インフラストラクチャ
| カテゴリ | 選定 | 備考 |
|---|---|---|
| クラウド | Google Cloud | 日本リージョン(東京 asia-northeast1 / 大阪 asia-northeast2) |
| コンテナ | Docker | マルチステージビルド |
| オーケストレーション | Cloud Run | |
| ストレージ | Cloud Storage | 証憑ファイル |
| 監視 | Cloud Logging / Cloud Monitoring | Serilog連携 |
| メール配信 | SendGrid | トランザクショナルメール、Event Webhook |
メッセージング・通知
| カテゴリ | 選定 | フェーズ | 備考 |
|---|---|---|---|
| メール配信 | SendGrid | MVP | ECDSA 署名検証、バウンスハンドリング |
| 非同期ジョブ | Hangfire + PostgreSQL | MVP | ダッシュボード UI 組み込み |
| Slack 通知 | Slack Web API | MVP | テナント別 Webhook 設定 |
| Teams 通知 | Microsoft Graph API | v1.1 | OAuth 連携 |
| LINE WORKS 通知 | LINE WORKS Bot API | v1.1 | 日本市場向け |
→ 満たす設計: 非同期ジョブ・通知アーキテクチャ
CI/CD
| ステージ | ツール/内容 |
|---|---|
| CI | GitHub Actions |
| Lint | ESLint, StyleCop, Prettier check |
| Build | .NET build, Vite build |
| Test | xUnit, Vitest, Playwright (並列実行) |
| Security | Dependabot, SonarCloud, Trivy |
| Deploy | Cloud Run (Blue/Green) |
コード品質ゲート(PRマージ条件)
- 全テスト通過
- カバレッジ閾値達成(Backend 90%, Frontend 80%)
- SonarCloud Quality Gate 通過
- レビュー1名以上承認
規約
- コミット規約: Conventional Commits(
feat:,fix:,docs:等) - ブランチ戦略: GitHub Flow(
main+ Feature Branch)