LESSON 30分

ストーリー

田中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いいえ提供するAPIpayment-api
consumesApisいいえ利用するAPIuser-api
dependsOnいいえ依存するリソースpayment-db

サービスヘルススコアカード

スコアカードの設計

カテゴリチェック項目配点自動チェック
オーナーシップオーナーチームが設定されている10はい
ドキュメントTechDocsが存在し、最終更新が3ヶ月以内10はい
API仕様OpenAPI仕様が定義されている10はい
CI/CDCI/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分