QUIZ 15分

クイズの説明

Step 2「サービス境界を設計する」で学んだ内容の理解度を確認します。全8問、80%(7問)以上正解で合格です。


問題

Q1. DDDにおけるBounded Contextの最も正確な定義はどれですか?

  • A) データベースのスキーマ境界
  • B) 特定のドメインモデルが適用される明示的な境界
  • C) チーム組織の物理的な境界
  • D) APIエンドポイントのグルーピング
答えを見る

正解: B

Bounded Contextは特定のドメインモデルが適用される明示的な境界です。同じ用語(例:「商品」)でもContextによって異なるモデルを持ちます。DBスキーマやチーム構造は結果として一致することが多いですが、定義そのものではありません。


Q2. Core Subdomainの特徴として正しいものはどれですか?

  • A) SaaSで代替可能な汎用機能
  • B) ビジネスの競争優位を生み出す固有のロジック
  • C) 全てのビジネスで共通の基盤機能
  • D) 外部APIで提供される機能
答えを見る

正解: B

Core Subdomainはビジネスの競争優位を生み出す固有のロジックです。ECサイトなら独自のレコメンデーションや価格最適化がこれに該当します。最も投資すべき領域であり、内製が推奨されます。SaaSで代替可能なものはGeneric Subdomainです。


Q3. Anti-Corruption Layer(ACL)を使うべき場面はどれですか?

  • A) 2つのチームが密に連携して開発する場合
  • B) 外部サービスやレガシーシステムのモデルから自ドメインを保護したい場合
  • C) 同一チーム内の2つのモジュール間の通信
  • D) データベースのマイグレーション時
答えを見る

正解: B

ACLは外部サービスやレガシーシステムのモデルが自ドメインに侵入するのを防ぐ変換層です。例えばStripe APIのレスポンス構造が変わっても、ACLがあれば自ドメインの Payment モデルには影響しません。密に連携するチーム間ではPartnershipパターンの方が適切です。


Q4. Consumer-Driven Contractsの最大のメリットはどれですか?

  • A) API仕様書の自動生成
  • B) 消費者が必要な契約だけをテストし、提供者の変更が消費者を壊さないことを保証する
  • C) 通信の暗号化
  • D) レスポンスタイムの短縮
答えを見る

正解: B

Consumer-Driven Contractsでは消費者が「自分が必要とするレスポンス」を定義します。提供者は変更時にこの契約テストを実行し、既存消費者を壊さないことを確認できます。これにより、提供者は不要なフィールドの追加や内部構造の変更を安全に行えます。


Q5. マイクロサービス間通信でgRPCがRESTより適している場面はどれですか?

  • A) ブラウザから直接呼び出すAPI
  • B) サードパーティに公開するAPI
  • C) サービス間の内部通信で低レイテンシが求められる場合
  • D) WebhookのエンドポイントAPI
答えを見る

正解: C

gRPCはProtocol Buffersによるバイナリシリアライゼーション、HTTP/2の多重化、型安全なインターフェース定義により、サービス間内部通信で低レイテンシ・高スループットを実現します。ブラウザ対応はgRPC-Webが必要で制限があり、外部公開APIはRESTの互換性が優れています。


Q6. Database per Serviceパターンの最大の課題はどれですか?

  • A) ストレージコストの増加
  • B) バックアップの複雑化
  • C) サービス間のデータ整合性の維持
  • D) DBライセンスの管理
答えを見る

正解: C

各サービスが独自のDBを持つと、以前はSQL JOINで取得できたデータを複数サービスから集約する必要があります。また、分散トランザクションの問題が生じ、SagaパターンやEventual Consistencyで対処する必要があります。ストレージコストやライセンスは副次的な課題です。


Q7. Strangler Figパターンで最初に分離すべきモジュールの選定基準として最も重要なものはどれですか?

  • A) コード行数が最も多いモジュール
  • B) 変更頻度が高く、かつ依存が少ないモジュール
  • C) 最も古いモジュール
  • D) テストカバレッジが最も低いモジュール
答えを見る

正解: B

最初に分離すべきは「変更頻度が高く、かつ依存が少ない」モジュールです。変更頻度が高いモジュールは独立デプロイの恩恵が大きく、依存が少ないモジュールは分離のリスクが低いからです。コード行数や古さだけでは分離の難易度やメリットを判断できません。


Q8. Event Stormingの進め方として正しい順序はどれですか?

  • A) コマンド → エンティティ → ドメインイベント → 境界
  • B) ドメインイベント → コマンド → 集約 → 境界
  • C) 境界 → エンティティ → コマンド → ドメインイベント
  • D) 集約 → ドメインイベント → 境界 → コマンド
答えを見る

正解: B

Event Stormingは「ドメインイベント(過去形の出来事)を時系列に洗い出す → コマンド(イベントを引き起こすアクション)を特定する → 集約(コマンドを処理するもの)をグルーピングする → 境界線を引いてBounded Contextを特定する」の順で進めます。イベントから始めることで、ビジネスプロセス全体を俯瞰できます。


結果

7問以上正解の場合

合格です。 サービス境界設計の基礎をしっかり理解しています。

「境界が見えてきたな。次はサービス間をイベントで疎結合に繋ぐ方法を学ぼう」 — 佐藤CTO

6問以下の場合

もう少し復習しましょう。

  • Q1-Q2を間違えた場合 → Step 2-1「DDDの基礎」を復習
  • Q3を間違えた場合 → Step 2-2「Bounded Contextとコンテキストマッピング」を復習
  • Q4-Q5を間違えた場合 → Step 2-4「API契約設計」を復習
  • Q6-Q8を間違えた場合 → Step 2-3「サービス分割戦略」を復習