refactor: 休眠 LLM プロバイダ抽象化と関連資産を撤去(ADR-0008)#299
Conversation
LLM をサービス内で使う見込みが低くルールベース設計に統一したため、 本番フローから到達しない休眠 LLM 関連コード・環境変数・依存・公開 ErrorCode を全撤去し、設計判断を ADR-0008 として記録した。 - ADR: 0008 を Accepted で起票、0004 を Superseded 化、CONTRIBUTING 更新 - コード: services/intelligence/llm, services/llm(sanitizer), utils/prompt_loader, app/prompts, scripts/measure_career_analysis, settings.py の LLM ゲッター, env_keys.py の LLM セクションを削除 - ErrorCode: LLM_TIMEOUT / LLM_UNAVAILABLE を BE/FE から削除 (OpenAPI 生成物への影響なしを確認済み) - env/依存: LLM_PROVIDER/VERTEX_*/OLLAMA_* 7 種、google-genai、 docker-compose の ollama サービス、entrypoint.sh の Ollama 起動処理を削除 - ドキュメント: README の実体なき AI 機能記述、docs/api.md・development.md・ ENV_CHECKLIST・.claude rules/skills の LLM 記述を整理 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
📝 WalkthroughWalkthroughThis PR removes LLM integration across the entire codebase and documentation, transitioning from a hybrid LLM-augmented intelligence service to a purely deterministic rule-based design. Backend LLM clients (Ollama and Vertex AI), environment configuration, error codes, infrastructure dependencies, and related tests are completely eliminated. ChangesRemove LLM Integration, Adopt Rule-Based Design (ADR-0008)
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 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 |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
.claude/rules/backend/test.md (1)
40-40: ⚡ Quick win**This test-policy addition is in-scope for the ADR-0008 (LLM removal) refactor; no split needed
.claude/rules/backend/test.mdの「失敗パスを明示的に検証/silent return 許容禁止」(39行目付近)と「モックは最小限」(40行目)は、LLM 関連資産撤去(ADR-0008)のコミット(c1d3858)で追加された。- 内容はすでに
.claude/CLAUDE.mdにある既存方針(test_no_cache_returns_earlyなどの silent-return を残さない/タスクハンドラの「黙って return」禁止)を明文化したもの。- PR 目的にこのテスト方針の追加が未記載なら、PR/ADR に一言リンクを足す程度で十分。**
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.claude/rules/backend/test.md at line 40, 追加されたテスト方針「失敗パスを明示的に検証/silent return 許容禁止」と「モックは最小限」は既に存在する方針(test_no_cache_returns_early 等)と重複しているので、重複を解消してください:差分で追加された見出し(「失敗パスを明示的に検証/silent return 許容禁止」「モックは最小限」)を削除するか簡潔に要約して残し、その代わりに既存方針(参照: test_no_cache_returns_early)への明示的なリンクをPR/ADRの説明(またはコミット c1d3858 に言及)に追加して一貫性を保つように修正してください。
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In @.claude/rules/backend/test.md:
- Line 40: 追加されたテスト方針「失敗パスを明示的に検証/silent return
許容禁止」と「モックは最小限」は既に存在する方針(test_no_cache_returns_early
等)と重複しているので、重複を解消してください:差分で追加された見出し(「失敗パスを明示的に検証/silent return
許容禁止」「モックは最小限」)を削除するか簡潔に要約して残し、その代わりに既存方針(参照:
test_no_cache_returns_early)への明示的なリンクをPR/ADRの説明(またはコミット c1d3858
に言及)に追加して一貫性を保つように修正してください。
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 439b3065-30d0-4917-8b86-8461678e443d
📒 Files selected for processing (52)
.claude/rules/backend/architecture.md.claude/rules/backend/auth-security.md.claude/rules/backend/llm.md.claude/rules/backend/test.md.claude/rules/security.md.claude/skills/BE_refacter/SKILL.md.claude/skills/SEC_apply/SKILL.md.claude/skills/SEC_review/SKILL.mdAGENTS.mdCONTRIBUTING.mdMakefileREADME.mdbackend/.env.examplebackend/app/core/env_keys.pybackend/app/core/errors.pybackend/app/core/logging_utils.pybackend/app/core/metrics.pybackend/app/core/settings.pybackend/app/prompts/.gitkeepbackend/app/services/intelligence/llm/__init__.pybackend/app/services/intelligence/llm/base.pybackend/app/services/intelligence/llm/factory.pybackend/app/services/intelligence/llm/ollama_client.pybackend/app/services/intelligence/llm/vertex_client.pybackend/app/services/llm/__init__.pybackend/app/services/llm/sanitizer.pybackend/app/services/tasks/exceptions.pybackend/app/services/tasks/handlers/base.pybackend/app/utils/prompt_loader.pybackend/docs/llm_data_policy.mdbackend/requirements.txtbackend/scripts/entrypoint.shbackend/scripts/measure_career_analysis.pybackend/tests/conftest.pybackend/tests/services/llm/__init__.pybackend/tests/services/llm/test_sanitizer.pybackend/tests/test_llm_clients.pybackend/tests/test_prompt_loader.pydocker-compose.ymldocs/adr/0004-llm-provider-abstraction.mddocs/adr/0008-remove-llm-to-rule-based-design.mddocs/api.mddocs/development.mdfrontend/src/api/client.test.tsfrontend/src/components/github-link/GitHubLinkDashboard.test.tsxfrontend/src/constants/errorCodes.tsfrontend/src/constants/errorMessages.tsfrontend/src/hooks/useTaskPolling.test.tsfrontend/src/test/handlers.tsinfra/environments/prod/ENV_CHECKLIST.mdinfra/environments/stg/ENV_CHECKLIST.mdinfra/modules/cloud_run/main.tf
💤 Files with no reviewable changes (29)
- backend/app/services/intelligence/llm/init.py
- backend/app/services/intelligence/llm/base.py
- backend/app/core/logging_utils.py
- backend/app/services/llm/init.py
- docs/api.md
- frontend/src/constants/errorCodes.ts
- backend/app/services/intelligence/llm/factory.py
- .claude/rules/backend/llm.md
- backend/requirements.txt
- infra/modules/cloud_run/main.tf
- backend/tests/services/llm/test_sanitizer.py
- infra/environments/prod/ENV_CHECKLIST.md
- backend/app/core/env_keys.py
- backend/tests/test_llm_clients.py
- AGENTS.md
- backend/app/utils/prompt_loader.py
- backend/docs/llm_data_policy.md
- backend/app/services/intelligence/llm/vertex_client.py
- backend/tests/test_prompt_loader.py
- infra/environments/stg/ENV_CHECKLIST.md
- backend/app/core/errors.py
- backend/scripts/entrypoint.sh
- backend/app/services/llm/sanitizer.py
- backend/app/core/settings.py
- backend/app/services/intelligence/llm/ollama_client.py
- backend/.env.example
- frontend/src/constants/errorMessages.ts
- backend/scripts/measure_career_analysis.py
- docker-compose.yml
概要
LLM をサービス内で使う見込みが低く、ルールベース(決定論的パイプライン)設計に統一したため、本番フローから到達しない休眠 LLM 関連コード・環境変数・依存・公開 ErrorCode を全撤去し、設計判断を ADR-0008 として記録した。
背景
services/intelligence/llm/(Ollama/Vertex AI 抽象化)等は、ルーター・タスクハンドラ・サービスから一切呼ばれていない休眠コードだった。変更内容
ADR
docs/adr/0008-remove-llm-to-rule-based-design.mdを Accepted で新規作成docs/adr/0004(LLM プロバイダ抽象化)をSuperseded by ADR-0008に変更、CONTRIBUTING の一覧を更新コード削除
services/intelligence/llm/、services/llm/(sanitizer)、utils/prompt_loader.py、app/prompts/、scripts/measure_career_analysis.pysettings.pyの LLM ゲッター 4 関数、env_keys.pyの LLM セクション公開 ErrorCode
LLM_TIMEOUT/LLM_UNAVAILABLEを backenderrors.py(enum・分類ロジック)と frontenderrorCodes.ts/errorMessages.tsから削除make codegen-types再生成でgenerated.ts差分ゼロ。ErrorCode は response model 未宣言のため schema に元々非出力)env / 依存 / インフラ
LLM_PROVIDER/VERTEX_*/OLLAMA_*)を env_keys / settings / cloud_run / docker-compose / docs/api.md / conftest / ENV_CHECKLIST / .env.example から削除google-genai依存、docker-compose のollamaサービス・volume、entrypoint.shの Ollama 起動処理を削除ドキュメント / ルール
docs/development.md・.claude/rules/{architecture,security,auth-security,test}・.claude/skills/{SEC_review,SEC_apply,BE_refacter}の LLM 記述を更新(削除済みファイルへの参照を解消)検証
make ci✅(backend lint/test → frontend test 195 passed → build 成功)make infra-validate✅(dev/stg/prod すべて valid)make codegen-types差分ゼロ ✅破壊的変更の注記
google-genai依存の削除、ADR-0004 の Superseded 化🤖 Generated with Claude Code
Summary by CodeRabbit
Breaking Changes
LLM_TIMEOUT,LLM_UNAVAILABLE) from the public API.Refactor
Chores
google-genaipackage.