Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .claude/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -206,10 +206,11 @@ backend 内で `os.getenv("XXX")` のように文字列リテラル直接参照

## ADR(Architecture Decision Record)

技術選定・アーキテクチャ判断を行う際は必ず `docs/adr/` を確認し、既存の判断と矛盾しない実装を行うこと。
技術選定・アーキテクチャ判断を行う際は必ず ADR 索引(`docs/adr/README.md`)から関連 ADR を辿り、既存の判断と矛盾しない実装を行うこと。索引にはテーマ別の決定系統(どの判断がどれを置き換え・前提にしているか)がまとまっている

新たに重要な技術判断を行う場合は `CONTRIBUTING.md` の ADR 運用ルールに従い、ADR を作成してから実装を開始する。
新たに重要な技術判断を行う場合は `CONTRIBUTING.md` の ADR 運用ルールに従い、ADR を作成してから実装を開始する。**ADR の新規作成・ステータス変更をしたら、同じ PR で索引も更新する**(存在・ステータス・見出し番号の整合は `make lint-adr-index` が CI で検証する)。

- ADR 一覧: `docs/adr/`
- ADR 索引(一覧・テーマ・決定系統の正本): `docs/adr/README.md`
- 設計原則(ADR を貫く 7 原則。新規 ADR はどの原則に沿うかを明記する): `docs/design-principles.md`
- テンプレート: `docs/adr/0000-template.md`
- 運用ルール: `CONTRIBUTING.md`
5 changes: 4 additions & 1 deletion .claude/skills/SEC_review/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,10 @@ description: Use when running a security review / vulnerability check against th

### 5. LLM プロンプトのサニタイズ

- 本プロジェクトは LLM 連携を廃止済み(ADR-0008)。現状この観点は該当なし。将来 LLM 連携を再導入する場合のみ、ユーザー由来文字列をプロンプトに埋め込む際のサニタイズ要否を検討する
- DevForge Agent(ADR-0010 で LLM を対話型機能として再導入。マルチプロバイダ = ADR-0013、Vertex AI 経由 = ADR-0015)がユーザー由来文字列(経歴書フィールド・チャット入力)をプロンプトへ埋め込む
- `backend/app/services/agent/context_builder.py` でのユーザー入力の埋め込み方(区切り・エスケープ・指示との分離)を確認する
- プロンプト正本 `backend/app/prompts/agent_*.md` は静的維持が原則(`.claude/rules/backend/agent.md`)。動的にユーザー文字列を連結する変更が入っていないか確認する
- LLM 出力の取り扱い: 構造化出力(`output_schema.py`)を素通しで DB へ書き込んでいないか(Agent は DB 非更新原則)

### 6. Frontend XSS

Expand Down
1 change: 1 addition & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
### ADR(設計判断を伴う変更の場合のみ)

- [ ] 新しいライブラリ採用・アーキテクチャ変更を伴う場合、ADR を作成した(または既存 ADR が対応している)
- [ ] ADR を新規作成・ステータス変更した場合: `docs/adr/README.md` の索引(一覧・テーマ・決定系統図)を更新した(存在・ステータスは `make lint-adr-index` で検証される)

---

Expand Down
5 changes: 5 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,11 @@ jobs:
- name: Lint SSoT (env names / error codes)
run: bash scripts/lint-env-keys.sh

# ADR 索引(docs/adr/README.md)↔ ADR ファイルの drift 検知。
# 一覧の複製(旧 CONTRIBUTING の表)が陳腐化した再発防止。bash/grep/comm のみ。
- name: Lint SSoT (ADR index)
run: bash scripts/lint-adr-index.sh

- name: Install uv
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with:
Expand Down
24 changes: 8 additions & 16 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@

迷ったら書く。小さすぎる判断に ADR は不要ですが、書きすぎて困ることはありません。

新しい ADR を書くときは [`docs/design-principles.md`](docs/design-principles.md)(既存 ADR から抽出した設計原則)を確認し、
テンプレートの「設計原則との関係」欄でどの原則に沿う/反する判断かを明記してください。原則自体を変える判断も ADR 経由で行います。

### ファイル命名規則

```
Expand All @@ -64,20 +67,9 @@ docs/adr/XXXX-kebab-case-title.md
1. 新しい ADR を作成し、ステータスを `Accepted` にする
2. 古い ADR のステータスを `Superseded by ADR-XXXX` に変更する
3. 古い ADR の本文末尾に変更の経緯を一行追記する
4. [`docs/adr/README.md`](docs/adr/README.md) の索引(ステータス列・「置き換え・関連」列・決定系統図)を更新する

### ADR 一覧(索引)

### 既存の ADR 一覧

| No. | タイトル | ステータス |
|---|---|---|
| [ADR-0001](docs/adr/0001-sqlite-gcs-backup.md) | SQLite + GCS バックアップ方式の採用 | Accepted |
| [ADR-0002](docs/adr/0002-jwt-cookie-auth.md) | JWT + Cookie 認証方式の採用 | Accepted |
| [ADR-0003](docs/adr/0003-redux-toolkit-persist.md) | Redux Toolkit + redux-persist の採用 | Accepted |
| [ADR-0004](docs/adr/0004-llm-provider-abstraction.md) | LLM プロバイダ抽象化(Ollama/Vertex AI) | Superseded by ADR-0008 |
| [ADR-0005](docs/adr/0005-cloudrun-single-instance.md) | Cloud Run single instance 構成の採用 | Accepted |
| [ADR-0006](docs/adr/0006-tanstack-query.md) | TanStack Query 導入検討 | Proposed |
| [ADR-0007](docs/adr/0007-openapi-typescript-codegen.md) | OpenAPI → TypeScript 型生成(codegen-drift CI) | Accepted |
| [ADR-0008](docs/adr/0008-remove-llm-to-rule-based-design.md) | LLM プロバイダ抽象化の撤去とルールベース設計への統一 | Superseded by ADR-0010 |
| [ADR-0009](docs/adr/0009-frontend-toast-notification.md) | フロントエンドのトースト通知統一 | Accepted |
| [ADR-0011](docs/adr/0011-frontend-textlint-proofread.md) | フロントエンド完結型文章校正(textlint) | Deprecated |
| [ADR-0010](docs/adr/0010-devforge-agent.md) | DevForge Agent 機能の導入 | Accepted |
| [ADR-0016](docs/adr/0016-github-skill-inference.md) | GitHub 連携によるスキル推論基盤(3 層モデル) | Accepted |
ADR の一覧・テーマ・置き換え/関連の正本は [`docs/adr/README.md`](docs/adr/README.md) です(ここには複製しない)。
新規作成・ステータス変更時は同じ PR で索引を更新してください。索引とファイルの整合は CI(`make lint-adr-index`)で検証されます。
11 changes: 9 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
setup install-hooks install-backend install-web generate-keys \
dev dev-build dev-down dev-amd64 dev-amd64-build dev-web preview-web dev-proxy dev-proxy-only stripe-webhook \
test test-backend test-web mutation-backend mutation-web \
lint lint-backend typecheck-backend lint-web lint-web-messages lint-env-keys lint-fix \
lint lint-backend typecheck-backend lint-web lint-web-messages lint-env-keys lint-adr-index lint-fix \
format format-check \
ci \
dupe-check dupe-check-html dupe-clean \
Expand Down Expand Up @@ -47,6 +47,7 @@ help:
@echo " lint-web Frontend: eslint"
@echo " lint-web-messages Frontend: setError等にリテラル日本語が渡っていないか検知"
@echo " lint-env-keys env名/エラーコードの SSoT drift を検知 (env_keys.py↔compose/cloud_run 双方向, リテラル参照禁止, errors.py↔errorCodes.ts)"
@echo " lint-adr-index ADR 索引の drift を検知 (docs/adr/README.md↔ADR ファイルの存在/ステータス/見出し番号)"
@echo " lint-fix リント自動修正 (ruff + eslint)"
@echo " format Prettier で整形"
@echo " format-check Prettier チェック"
Expand Down Expand Up @@ -158,7 +159,7 @@ mutation-backend:
mutation-web:
nix develop --command bash -c "cd web && npm run test:mutation"

lint: lint-backend typecheck-backend lint-web lint-web-messages lint-env-keys
lint: lint-backend typecheck-backend lint-web lint-web-messages lint-env-keys lint-adr-index

lint-backend:
nix develop --command bash -c "cd backend && .venv/bin/python -m ruff check app tests alembic_migrations"
Expand All @@ -184,6 +185,12 @@ lint-web-messages:
lint-env-keys:
nix develop --command bash scripts/lint-env-keys.sh

# ADR 索引(docs/adr/README.md)↔ ADR ファイルの drift を検知。
# 存在(双方向)・ステータス・見出し番号の突合。bash/grep/sed/comm のみに依存するため
# nix wrap 不要(devshell に無い依存を使わない)。
lint-adr-index:
bash scripts/lint-adr-index.sh

lint-fix:
nix develop --command bash -c "cd backend && .venv/bin/python -m ruff check --fix app tests alembic_migrations"
cd web && npm run lint:fix
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ GitHub活動分析、ブログ連携による発信力を集計
| [docs/deployment.md](./docs/deployment.md) | 本番デプロイ(GCP)・OpenTofu インフラ構成・CI/CD・ブランチ保護 |
| [docs/api.md](./docs/api.md) | REST API 一覧・環境変数リファレンス |
| [docs/data-model.md](./docs/data-model.md) | Turso (libSQL) 運用・Alembic マイグレーション・データ設計 |
| [docs/adr/](./docs/adr/) | アーキテクチャ判断記録(ADR) |
| [docs/design-principles.md](./docs/design-principles.md) | 設計原則(ADR から帰納抽出した 7 原則・原則×ADR マトリクス) |
| [docs/adr/](./docs/adr/README.md) | アーキテクチャ判断記録(ADR)。索引にテーマ別の決定系統図あり |
| [docs/runbooks/](./docs/runbooks/) | 運用 Runbook |
| [docs/metrics/ai-friendliness.md](./docs/metrics/ai-friendliness.md) | AI フレンドリーさ指標の月次ダッシュボード(`make metrics-ai-friendliness` で再生成) |

Expand Down
12 changes: 12 additions & 0 deletions docs/adr/0000-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@

[Proposed / Accepted / Deprecated / Superseded by ADR-XXXX]

## 関連 ADR

[無ければ「なし」。索引(README.md)の「置き換え・関連」列と整合させる]

- Supersedes: [この ADR が置き換える旧 ADR。無ければ省略]
- Superseded by: [この ADR を置き換えた新 ADR。無ければ省略]
- 関連: [前提・踏襲・強結合の関係にある ADR と、その関係の一言説明]

## コンテキスト

[意思決定が必要になった背景・制約・課題]
Expand All @@ -24,6 +32,10 @@

[この判断を覆すトリガー・移行先]

## 設計原則との関係

[docs/design-principles.md のどの原則(P1〜P7)に沿う判断か。原則に反する場合はその理由を明記する]

## 関連リンク

[PR・Issue・参考資料へのリンク]
2 changes: 1 addition & 1 deletion docs/adr/0011-frontend-textlint-proofread.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# ADR-0009: 職務経歴書のフロントエンド完結型 文章校正(textlint + kuromoji)
# ADR-0011: 職務経歴書のフロントエンド完結型 文章校正(textlint + kuromoji)

## ステータス

Expand Down
Loading
Loading