ストーリー
田
田中VPoE
Backstageの基盤が整った。次はIDPの心臓部であるサービスカタログの設計だ。組織のすべてのサービスを一箇所で管理する
あなた
サービスカタログって、各サービスの情報を一覧表示するだけですか?
あ
田
田中VPoE
それだけではない。サービスカタログは「組織の技術資産の全体像」を提供する。誰がどのサービスを所有しているか、サービス間の依存関係は何か、各サービスの健全性はどうか。25のマイクロサービスが複雑に依存し合っている中で、全体像を把握できる唯一の場所だ
あなた
マイクロサービスが増えると、全体像がわからなくなるという問題ですね
あ
田
田中VPoE
「サービスのスプロール」と呼ばれる問題だ。誰がオーナーかわからない、依存関係が不明、ドキュメントが古い。サービスカタログはこれを解決する
サービスカタログのデータモデル
エンティティ関連図
サービスカタログのデータモデル:
Domain(ビジネスドメイン)
└── System(システム)
├── Component(サービス)
│ ├── provides → API
│ ├── consumes → API
│ └── dependsOn → Resource
└── Resource(インフラリソース)
Group(チーム)
├── owns → Component
├── owns → API
└── hasMember → User
例:
Domain: Payments
└── System: payment-system
├── Component: payment-service
│ ├── provides → payment-api
│ ├── consumes → user-api
│ └── dependsOn → payment-db
├── Component: payment-worker
│ └── consumes → payment-api
└── Resource: payment-db
サービス情報のスキーマ
| フィールド | 必須 | 説明 | 例 |
|---|
| name | はい | サービス名(一意) | payment-service |
| description | はい | サービスの概要 | 決済処理マイクロサービス |
| owner | はい | オーナーチーム | payment-team |
| type | はい | サービス種別 | service, library, website |
| lifecycle | はい | ライフサイクル段階 | experimental, production, deprecated |
| system | いいえ | 所属システム | payment-system |
| tags | いいえ | タグ | typescript, nestjs |
| providesApis | いいえ | 提供するAPI | payment-api |
| consumesApis | いいえ | 利用するAPI | user-api |
| dependsOn | いいえ | 依存するリソース | payment-db |
サービスヘルススコアカード
スコアカードの設計
| カテゴリ | チェック項目 | 配点 | 自動チェック |
|---|
| オーナーシップ | オーナーチームが設定されている | 10 | はい |
| ドキュメント | TechDocsが存在し、最終更新が3ヶ月以内 | 10 | はい |
| API仕様 | OpenAPI仕様が定義されている | 10 | はい |
| CI/CD | CI/CDパイプラインが設定されている | 10 | はい |
| テスト | テストカバレッジが70%以上 | 10 | はい |
| セキュリティ | SASTが有効で未修正のCriticalが0件 | 15 | はい |
| 監視 | SLOが定義され、アラートが設定されている | 15 | はい |
| 依存関係 | 依存ライブラリが最新から2バージョン以内 | 10 | はい |
| デプロイ | Golden Pathに準拠したデプロイフロー | 10 | はい |
スコアの算出と表示
ヘルススコアの例:
payment-service: 85/100 ★★★★☆
✓ オーナーシップ: 10/10
✓ ドキュメント: 10/10
✓ API仕様: 10/10
✓ CI/CD: 10/10
△ テスト: 7/10(カバレッジ65%、目標70%)
✓ セキュリティ: 15/15
✓ 監視: 15/15
△ 依存関係: 5/10(3つの依存が古い)
✗ デプロイ: 3/10(カナリーリリース未導入)
notification-service: 45/100 ★★☆☆☆
✓ オーナーシップ: 10/10
✗ ドキュメント: 0/10(TechDocsなし)
✗ API仕様: 0/10(OpenAPIなし)
✓ CI/CD: 10/10
✗ テスト: 0/10(テストなし)
△ セキュリティ: 10/15(Critical 2件未修正)
△ 監視: 5/15(SLO未定義)
✓ 依存関係: 10/10
✗ デプロイ: 0/10(手動デプロイ)
スコアの活用
| 施策 | 方法 |
|---|
| ダッシュボードで全サービスのスコアを一覧表示 | 低スコアのサービスを可視化 |
| チーム別の平均スコアをランキング表示 | 健全な競争意識の醸成 |
| スコアの閾値でアラート | 60点以下で改善依頼を自動通知 |
| 四半期のスコアレビュー | マネジメントレビューの材料 |
「ヘルススコアは『強制』ではなく『可視化』だ。スコアが低いサービスは改善の動機を自然に得る。ランキングが競争心を刺激し、チーム自らが品質を高める」 — 田中VPoE
依存関係の可視化
サービス依存関係グラフ
依存関係の可視化:
payment-service
├── → user-api(API呼び出し)
├── → notification-api(イベント送信)
├── → payment-db(PostgreSQL)
└── → payment-redis(Redis)
user-service
├── → auth-api(認証)
└── → user-db(PostgreSQL)
notification-service
├── → user-api(ユーザー情報取得)
├── → email-provider(外部)
└── → notification-db(PostgreSQL)
影響分析:
「user-serviceが停止したら?」
→ payment-service(ユーザー情報取得不可)
→ notification-service(ユーザー情報取得不可)
影響サービス: 2/25
まとめ
| ポイント | 内容 |
|---|
| データモデル | Domain → System → Component/API/Resource の階層構造 |
| ヘルススコア | 自動チェックによるサービス品質の定量評価 |
| 依存関係 | サービス間の依存を可視化し、影響分析を可能にする |
| オーナーシップ | 各サービスに明確なオーナーチームを設定 |
チェックリスト
次のステップへ
次は「ソフトウェアテンプレートとスキャフォールディング」を学びます。新規サービスの立ち上げを自動化する仕組みを設計しましょう。
推定読了時間: 30分