Claude-skill-registry .claude/skills/api-versioning/SKILL.md

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/development/claude-skills-api-versioning-skill-md" ~/.claude/skills/majiayu000-claude-skill-registry-claude-skills-api-versioning-skill-md && rm -rf "$T"
manifest: skills/development/claude-skills-api-versioning-skill-md/SKILL.md
source content

API Versioning スキル

概要

APIバージョニング戦略の設計と後方互換性管理に関する専門知識を提供します。

コマンドリファレンス

# リソース参照
cat .claude/skills/api-versioning/resources/versioning-strategies.md
cat .claude/skills/api-versioning/resources/deprecation-process.md
cat .claude/skills/api-versioning/resources/breaking-changes.md

# テンプレート参照
cat .claude/skills/api-versioning/templates/migration-guide-template.md
cat .claude/skills/api-versioning/templates/deprecation-notice-template.md

知識領域1: バージョニング方式

主要な方式比較

方式メリットデメリット
URL Path
/api/v1/users
明確、キャッシュ容易URLが長くなる
Header
Accept: application/vnd.api+json; version=1
URLがシンプル発見しにくい
Query
/api/users?version=1
シンプルキャッシュ問題
Content-Type
Content-Type: application/vnd.api.v1+json
標準的複雑

選択基準

条件推奨方式
RESTful純粋主義Header
開発者体験重視URL Path
レガシー互換性Query
新規プロジェクトURL Path
外部公開APIURL Path
内部APIHeader

推奨: URL Path Versioning

/api/v1/users     ← 現行バージョン
/api/v2/users     ← 新バージョン

理由:

  • 直感的で発見しやすい
  • キャッシュが容易
  • デバッグが簡単
  • 広く採用されている

知識領域2: バージョン番号設計

Semantic Versioning(SemVer)原則

MAJOR.MINOR.PATCH
例: 1.2.3
種類変更時URL反映
MAJOR破壊的変更✅ 反映(v1 → v2)
MINOR後方互換の機能追加❌ 非反映
PATCHバグ修正❌ 非反映

URL表記

/api/v1/...      ← メジャーバージョンのみ
/api/v1.2/...    ← 避ける(複雑化)

バージョン選択ロジック

クライアントリクエスト → バージョン解決
├─ /api/v1/users → API v1.x.x の最新を使用
├─ /api/v2/users → API v2.x.x の最新を使用
└─ /api/users    → デフォルトバージョン(v1)を使用

知識領域3: 破壊的変更の定義

破壊的変更(Breaking Changes)

変更種類破壊的?説明
エンドポイント削除✅ Yes既存クライアントが壊れる
フィールド削除✅ Yes既存クライアントが壊れる
フィールド名変更✅ Yes既存クライアントが壊れる
必須フィールド追加✅ Yes既存リクエストが無効に
型変更✅ Yesパース失敗の可能性
ステータスコード変更✅ Yesエラーハンドリング破損
認証方式変更✅ Yes認証失敗
オプションフィールド追加❌ No後方互換
新エンドポイント追加❌ No後方互換
レスポンスフィールド追加❌ No後方互換(通常)

非破壊的変更

変更種類注意点
オプションフィールド追加デフォルト値を設定
新エンドポイント追加既存に影響なし
レスポンスフィールド追加クライアントは無視すべき
列挙値の追加クライアントは未知値を処理すべき

知識領域4: 非推奨化プロセス

段階的廃止フロー

1. 告知期間(2-4週間)
   ├─ ドキュメント更新
   ├─ Sunset ヘッダー追加
   └─ 移行ガイド公開

2. 警告期間(4-8週間)
   ├─ Deprecation ヘッダー追加
   ├─ ログ監視(使用状況)
   └─ 個別通知

3. 移行サポート期間(4-12週間)
   ├─ 新旧両方を並行稼働
   ├─ 移行サポート提供
   └─ 使用量モニタリング

4. 廃止実行
   ├─ エンドポイント無効化
   ├─ 410 Gone レスポンス
   └─ 代替エンドポイント案内

HTTPヘッダー

# 非推奨警告
Deprecation: true
Deprecation: @1735689600  # Unix timestamp

# 廃止日
Sunset: Sat, 01 Mar 2025 00:00:00 GMT

# 代替リソース
Link: </api/v2/users>; rel="successor-version"

OpenAPI での非推奨マーク

paths:
  /api/v1/users:
    get:
      deprecated: true
      summary: "[非推奨] ユーザー一覧取得"
      description: |
        ⚠️ このエンドポイントは2025年3月1日に廃止されます。
        代替: GET /api/v2/users
      x-sunset-date: "2025-03-01"

知識領域5: 移行戦略

並行稼働パターン

期間1: v1のみ
期間2: v1(主)+ v2(ベータ)
期間3: v1(非推奨)+ v2(主)
期間4: v2のみ

バージョン分岐実装

// ルーティング例(Next.js)
// app/api/v1/users/route.ts
// app/api/v2/users/route.ts

// バージョン共通ロジック
// lib/api/users/v1.ts
// lib/api/users/v2.ts

データ変換レイヤー

// v1 → v2 変換
function transformV1ToV2(v1Data: V1User): V2User {
  return {
    id: v1Data.id,
    fullName: `${v1Data.firstName} ${v1Data.lastName}`, // フィールド統合
    email: v1Data.email,
    role: mapRoleV1ToV2(v1Data.role), // 値マッピング
    createdAt: v1Data.created_at, // 命名規則変更
  };
}

知識領域6: バージョン間差分文書化

変更ログ形式

# API Changelog

## v2.0.0 (2025-03-01)

### 破壊的変更

- `GET /users` のレスポンス構造が変更されました
  - `first_name` + `last_name` → `full_name` に統合
- `role` フィールドの値が変更されました
  - `"admin"` → `"administrator"`

### 新機能

- `GET /users/{id}/activity` エンドポイント追加
- ページネーションに `cursor` パラメータ追加

### 非推奨

- `GET /users?page=N` は廃止予定(`cursor` を使用してください)

### 移行ガイド

詳細は [Migration Guide v1 → v2](./migration-v1-v2.md) を参照

判断基準チェックリスト

バージョン戦略

  • バージョニング方式が決定されているか?
  • URLパターンが一貫しているか?
  • デフォルトバージョンが定義されているか?

破壊的変更

  • 変更は本当に破壊的か?
  • 非破壊的な代替案はないか?
  • 影響範囲を把握しているか?

非推奨化

  • 十分な告知期間があるか?(最低4週間)
  • 移行ガイドが準備されているか?
  • Deprecation/Sunsetヘッダーが設定されているか?
  • 使用状況をモニタリングしているか?

移行サポート

  • 新旧バージョンの並行稼働期間があるか?
  • 移行ツールやスクリプトが提供されているか?
  • サポート連絡先が明示されているか?

関連スキル

  • .claude/skills/openapi-specification/SKILL.md
    : OpenAPI仕様書作成
  • .claude/skills/request-response-examples/SKILL.md
    : バージョン別実例
  • .claude/skills/authentication-docs/SKILL.md
    : 認証バージョニング

変更履歴

バージョン日付変更内容
1.0.02025-11-27初版リリース