クイズの説明
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「サービス分割戦略」を復習