---
generated_at: 2026-02-25 12:00:00
metrics:
  claims_total: 38
  claims_with_evidence: 36
  claims_without_evidence: 2
confidence_derived: 0.95
---

# 根拠レポート：API設計書

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.95**
  - 根拠あり：36 / 38、根拠なし：2
- 優先レビュー（高）
  1. **Netlify Functionエンドポイントパス**：デプロイ設定に依存するため実際のURLは環境により異なる
  2. **Azure DevOps APIの詳細パラメータ**：API.tsの実装から推測しているが、Azure DevOps REST APIの仕様変更に追従しているか要確認

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `packages/decap-server/src/index.ts` — Express.jsサーバーのエントリポイント（ポート、モード、ホスト設定）
- E-02: `packages/decap-server/src/middlewares/localGit/index.ts` — Local Gitモードのアクションハンドラー全実装
- E-03: `packages/decap-server/src/middlewares/localFs/index.ts` — Local FSモードのアクションハンドラー全実装
- E-04: `packages/decap-server/src/middlewares/types.ts` — リクエストパラメータの型定義
- E-05: `packages/decap-server/src/middlewares/joi/index.ts` — Joiバリデーションスキーマ（許可アクション一覧・各パラメータ定義）
- E-06: `packages/decap-server/src/middlewares/common/index.ts` — 共通ミドルウェア（morgan, CORS, JSON parser）
- E-07: `packages/decap-server/src/middlewares/utils/entries.ts` — エントリー・メディアファイルのレスポンス構造
- E-08: `packages/decap-cms-backend-proxy/src/implementation.ts` — ProxyBackendクライアント実装
- E-09: `functions/publish.js` — Netlify Function（Slack連携）の全実装
- E-10: `packages/decap-server/src/middlewares/joi/customValidators.ts` — パストラバーサルバリデータ
- E-11: `packages/decap-cms-backend-github/src/API.ts` — GitHub REST APIクライアント
- E-12: `packages/decap-cms-backend-gitlab/src/API.ts` — GitLab REST APIクライアント
- E-13: `packages/decap-cms-backend-bitbucket/src/API.ts` — Bitbucket REST APIクライアント
- E-14: `packages/decap-cms-backend-gitea/src/API.ts` — Gitea REST APIクライアント
- E-15: `packages/decap-cms-backend-azure/src/API.ts` — Azure DevOps REST APIクライアント
- E-16: `packages/decap-cms-lib-auth/src/netlify-auth.js` — Netlify認証フロー
- E-17: `packages/decap-cms-lib-util/src/API.ts` — 共通APIユーティリティ（レートリミット・バックオフ）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | Decap Serverはポート8081（デフォルト）でExpress.jsサーバーを起動する | E-01 | ○ |
| C-02 | 動作モードは`fs`（デフォルト）と`git`の2種類 | E-01 | ○ |
| C-03 | 全APIアクションは`POST /api/v1`の単一エンドポイントにルーティングされる | E-01, E-02, E-03 | ○ |
| C-04 | `info`アクションはLocal Gitモードで`publish_modes: ["simple", "editorial_workflow"]`を返す | E-02 | ○ |
| C-05 | `info`アクションはLocal FSモードで`publish_modes: ["simple"]`を返す | E-03 | ○ |
| C-06 | `entriesByFolder`はfolder, extension, depthパラメータを必要とする | E-04, E-05 | ○ |
| C-07 | `entriesByFiles`はfiles配列（各要素にpath必須）を必要とする | E-04, E-05 | ○ |
| C-08 | `getEntry`はpath パラメータを必要とする | E-04, E-05 | ○ |
| C-09 | `persistEntry`はdataFilesとentryの排他（xor）バリデーションがある | E-05 | ○ |
| C-10 | `persistEntry`のassetsはpath, content, encoding（base64のみ）を持つ | E-04, E-05 | ○ |
| C-11 | `persistEntry`のoptionsにcommitMessage（必須）、useWorkflow（必須）、status（必須）がある | E-04, E-05 | ○ |
| C-12 | Local Gitモードではmutex（3秒タイムアウト）で排他制御する | E-02 | ○ |
| C-13 | `unpublishedEntries`はCMSブランチプレフィックスで始まるブランチをフィルタして返す | E-02 | ○ |
| C-14 | `unpublishedEntry`はcollection, slug, status, diffs, updatedAtを返す | E-02 | ○ |
| C-15 | `unpublishedEntry`は存在しない場合404を返す | E-02 | ○ |
| C-16 | `unpublishedEntryDataFile`はcollection, slug, id, pathパラメータを必要とする | E-04, E-05 | ○ |
| C-17 | `unpublishedEntryMediaFile`はcollection, slug, id, pathパラメータを必要とする | E-04, E-05 | ○ |
| C-18 | `deleteUnpublishedEntry`はCMSブランチを`-D`オプションで強制削除する | E-02 | ○ |
| C-19 | `publishUnpublishedEntry`はCMSブランチをメインブランチにマージ後、ブランチを削除する | E-02 | ○ |
| C-20 | メディアファイルのレスポンスはid(SHA-256), content(base64), encoding, path, nameを含む | E-07 | ○ |
| C-21 | `persistMedia`はassetとoptions.commitMessageを必要とする | E-04, E-05 | ○ |
| C-22 | `deleteFile`はpath とoptions.commitMessageを必要とする | E-04, E-05 | ○ |
| C-23 | `deleteFiles`はpaths（最低1件）とoptions.commitMessageを必要とする | E-04, E-05 | ○ |
| C-24 | `getDeployPreview`はローカルサーバーで常にnullを返す | E-02, E-03 | ○ |
| C-25 | 共通ミドルウェアとしてmorgan, cors, express.json(50MB)が設定される | E-06 | ○ |
| C-26 | バリデーションエラー時は422ステータスでerrorメッセージを返す | E-05 | ○ |
| C-27 | パストラバーサル検証が全pathパラメータに適用される | E-05, E-10 | ○ |
| C-28 | Netlify FunctionはSlack署名検証（HMAC-SHA256）を実施する | E-09 | ○ |
| C-29 | Netlify FunctionはALLOWED_USERSで許可ユーザーを制限する | E-09 | ○ |
| C-30 | Netlify FunctionはGitHub API repositoryディスパッチを呼び出す | E-09 | ○ |
| C-31 | Slack署名のタイムスタンプが5分以上古い場合はエラーとなる | E-09 | ○ |
| C-32 | ProxyBackendクライアントは全アクションをPOSTで`proxy_url`に送信する | E-08 | ○ |
| C-33 | GitHub APIは`Authorization: token {TOKEN}`ヘッダーを使用する | E-11 | ○ |
| C-34 | GitLab APIは`Private-Token`または`Bearer`トークンを使用する | E-12 | ○ |
| C-35 | 外部APIクライアントはレートリミット対応（指数バックオフ、最大5回リトライ）を持つ | E-17 | ○ |
| C-36 | 不明なアクションに対して422ステータスでエラーを返す | E-02, E-03 | ○ |
| C-37 | Netlify Functionのエンドポイントパスは`/.netlify/functions/publish` | **根拠なし** | △ |
| C-38 | Azure DevOps APIの全エンドポイント詳細 | E-15 | △ |

## 4) 不足情報（Unknown / Missing）
- **C-37: Netlify Functionのエンドポイントパス** — `functions/publish.js`のファイル配置からNetlifyの規約で`/.netlify/functions/publish`と推定しているが、`netlify.toml`での明示的なリダイレクト設定は未確認。実際のデプロイ環境によりパスが異なる可能性がある。
  - 候補：`netlify.toml` / Netlifyダッシュボード設定 / カスタムリダイレクト設定
- **C-38: Azure DevOps APIの詳細** — `packages/decap-cms-backend-azure/src/API.ts`のコードから主要エンドポイントを抽出したが、Azure DevOps REST APIのバージョニング（`api-version`パラメータ）やリクエスト・レスポンスの詳細構造は部分的にしか確認できていない。
  - 候補：Azure DevOps REST API公式ドキュメント / API.tsの全メソッドの詳細読み込み

## 5) リスクフラグ（レビュー観点）
- 0: **Decap Server Proxy APIのアクション定義** — ソースコード直読みで高い信頼性（Joiスキーマ、型定義、ハンドラー実装の3重確認）
- 0: **リクエスト・レスポンス形式** — 型定義（types.ts）とJoiスキーマ（joi/index.ts）による二重確認
- 0: **Netlify Functionの認証・処理ロジック** — 単一ファイルで完結しており、全ロジックを直接確認済み
- 1: **外部API（GitHub/GitLab等）のエンドポイント** — 各APIクライアント実装から抽出しているが、外部APIの仕様変更への追従状態は未確認
- 1: **Azure DevOps APIの詳細** — 他のバックエンド（GitHub/GitLab）と比較して実装が複雑であり、全エンドポイントの網羅性に若干の不確実性がある

## 6) レビュアーチェックリスト（最小）
- [ ] Decap Server Proxy APIの18アクションが全て網羅されているか（Joiスキーマの`allowedActions`配列と照合）
- [ ] 各アクションのリクエストパラメータがtypes.tsの型定義と一致しているか
- [ ] Local FSモードとLocal Gitモードの機能差分が正しく記載されているか（ワークフロー系APIの対応モード）
- [ ] Netlify Functionの環境変数が実際のデプロイ設定と一致するか
- [ ] 外部API（GitHub, GitLab, Bitbucket, Gitea, Azure DevOps）のエンドポイント一覧が各バックエンドパッケージの実装と一致するか
- [ ] パストラバーサル検証の対象パラメータが漏れなく記載されているか
