# feat: OpenAPI 型生成への完全移行 — 主要レスポンス(ADR-0007 Phase 2)#291
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (9)
📝 WalkthroughWalkthroughThis PR completes ADR-0007 Phase 2 by aligning OpenAPI schema types across the backend and frontend. The backend schema now types ChangesADR-0007 Phase 2: Schema Typing and Consolidation
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
概要
ADR-0007 の段階移行プランに従い、Phase 2(主要レスポンスの完全移行) を実施する。
api/githubLink.tsとapi/auth.tsの手書き DTO interface を全削除し、OpenAPI から生成した backend クラス名の型(generated.ts→ 薄い再エクスポート層api/types.ts)へ完全移行する。docs/adr/0007-openapi-typescript-codegen.md(status: Accepted)api/shared.tsパイロット)背景
Phase 1 で
TaskStatusResponseのパイロット移行と CI ドリフト検知の機能確認が完了した。Phase 2 では ADR の命名統一マップに沿って、GitHub 連携・認証まわりの主要レスポンス型を BE 名へ統一し、手書き interface を撤去する。変更内容
backend — 完全移行の前提整備
backend/app/schemas/github_link.py:CachedGitHubLinkResponse.resultをOptional[Dict[str, Any]]→Optional[GitHubLinkResponse]に型を絞った。GitHubLinkResponse/ContributionCalendar/ContributionDayが OpenAPI スキーマに出力され、frontend で生成型に移行しても型安全が後退しない(緩いresultのまま移行するとRecord<string, never>相当の untyped になり退化する)。cache.resultはgithub_link_service.pyでGitHubLinkResponse(...).model_dump()を保存したものなので、型を絞っても round-trip は安全(backend テストで実証)。Anyimport を除去。frontend — 手書き DTO の完全移行
api/types.ts(再エクスポート層): Phase 2 対象の 10 型を BE 名のまま追加。ProgressResponse/SubProgress/TaskAcceptedResponse/GitHubLinkResponse/ContributionDay/ContributionCalendar/CachedGitHubLinkResponse/GitHubLoginUrlResponse/TokenResponse(+ Phase 1 のTaskStatusResponse)。api/githubLink.ts: 手書き interface(TaskProgress/GitHubLinkResponse/ContributionDay/ContributionCalendar/CachedGitHubLinkResponse)を全削除し再エクスポート層を参照。getGitHubLinkProgress(): Promise<ProgressResponse>(旧TaskProgress)runGitHubLink/retryGitHubLink: 戻り値を{ status: string }→TaskAcceptedResponsegetGitHubLinkCache(): Promise<CachedGitHubLinkResponse>api/auth.ts: 手書きAuthResponseを削除しTokenResponseへ統一。login-url の inline 型{ authorization_url, state }をGitHubLoginUrlResponseに置換。frontend — 消費側の追従
hooks/useAsyncTaskPage.ts:TaskProgress→ProgressResponse。loadCache のstatusをstring | null許容に(論点B)。components/github-link/ContributionHeatmap.tsx: 生成型でContributionCalendar.weeksが optional 化したため、const weeks = useMemo(() => calendar.weeks ?? [], [calendar.weeks])で安定参照を導出し全箇所を差し替え。components/github-link/GitHubLinkDashboard.tsx: loadCache のresultをcache.result ?? nullに正規化(CachedGitHubLinkResponse.resultが optional のため)。移行しないもの(ADR 準拠)
GitHubLinkPayload(request 型・include_forks?): response DTO ではなく、retryGitHubLink({})の省略呼び出しを保つため手書きで温存(ADR 論点A: 入出力兼用 schema の Input 側は default 値の解釈差があるため別管理)。api/client.tsの 401/CSRF/Cookie 認証ロジック、api/paths.tsのPATHS(codegen 対象外)。既知の論点への対応(ADR)
str | None/default_factoryフィールドが生成型でstring | null/ optional になる。消費側(useAsyncTaskPageの status、ContributionHeatmapの weeks、GitHubLinkDashboardの result)を null/undefined 合体で追従。実行時挙動は不変。検証
make cigreen(lint + vitest 189 passed + build)。result型絞り込みのシリアライズ安全性を実 DB で実証)。make codegen-types再実行でgenerated.tsに差分なし(CIcodegen-driftジョブは clean)。TaskProgress/AuthResponse)の残参照ゼロを確認。今後(別 PR)
types.tsのCareerResume*(→Resume*)/BlogAccount(→BlogAccountResponse)/MasterItem系を完全移行。payloadBuilders.ts/formMappers.tsの追従。E2E 必須。Summary by CodeRabbit
Improvements
Documentation