クイズの説明
Step 1「モノリスの問題を分析する」で学んだ内容の理解度を確認します。全8問、80%(7問)以上正解で合格です。
問題
Q1. モノリスアーキテクチャの最大の利点はどれですか?
- A) スケーラビリティが高い
- B) 初期開発とデプロイのシンプルさ
- C) チーム間の独立性が高い
- D) 障害の影響範囲が限定的
答えを見る
正解: B
モノリスの最大の利点は初期開発とデプロイのシンプルさです。単一のコードベース、単一のデプロイユニット、単一のデータベースにより、開発初期は高い生産性を発揮します。分散システムの複雑さ(ネットワーク遅延、データ整合性、サービス間通信)を考慮する必要がありません。ただし、システムが成長するにつれ、この利点は逆に制約となります。
Q2. 技術的負債の「ヒートマップ」を作成する際に、最も重要な指標の組み合わせはどれですか?
- A) コード行数とコメント率
- B) 変更頻度とバグ発生率
- C) ファイル数とディレクトリ深度
- D) テストカバレッジとビルド時間
答えを見る
正解: B
技術的負債ヒートマップは「変更頻度」と「バグ発生率」の組み合わせが最も効果的です。頻繁に変更されるファイルでバグが多いということは、そのコードが不安定で理解しにくい状態にあることを示します。Adam Tornhill の「Your Code as a Crime Scene」で提唱されたこのアプローチは、コード行数やカバレッジよりも実際のリスクを正確に反映します。循環的複雑度を加えるとさらに精度が向上します。
Q3. God Object アンチパターンの特徴として正しいものはどれですか?
- A) オブジェクトが小さすぎて責務が不明確
- B) 単一のクラスが過剰な責務を持ち、多数のメソッドとプロパティを含む
- C) 継承階層が深すぎて理解困難
- D) インターフェースが多すぎて実装が分散
答えを見る
正解: B
God Object は単一のクラスが過剰な責務を持つアンチパターンです。典型的な兆候は、1,000行以上のクラス、20以上のメソッド、多数の異なるドメイン概念の混在です。これにより、変更の影響範囲が予測困難になり、テストが複雑化し、複数チームのマージコンフリクトが頻発します。解決策は、Single Responsibility Principle に基づくクラスの分割です。
Q4. モジュール間の「循環依存」が問題となる主な理由はどれですか?
- A) コンパイル時間が長くなる
- B) モジュールを独立してテスト・デプロイできなくなる
- C) メモリ使用量が増加する
- D) コードの行数が増える
答えを見る
正解: B
循環依存の最大の問題は、モジュールを独立してテスト・デプロイできなくなることです。A が B に依存し、B が A に依存する場合、A を変更するには B のことも考慮する必要があり、その逆も同様です。これにより、テスト時にモック/スタブが複雑化し、デプロイ時に両方を同時にリリースする必要が生じます。マイクロサービス化の際、この循環依存の解消は最も重要な前提条件の一つです。
Q5. Strangler Fig パターンの説明として正しいものはどれですか?
- A) モノリスを一度に全てマイクロサービスに書き換える
- B) 新機能をモノリスの外に構築し、段階的にモノリスの機能を置き換える
- C) モノリスの前にキャッシュ層を追加してパフォーマンスを改善する
- D) モノリスのデータベースを先に分割してからアプリケーションを分離する
答えを見る
正解: B
Strangler Fig パターンは、絞め殺しのイチジク(strangler fig)が宿主の木を徐々に覆い尽くす様子にちなんだパターンです。新機能は新しいサービスとして構築し、既存のモノリスの機能を段階的に新サービスに移行します。APIゲートウェイやリバースプロキシでルーティングを制御し、リスクを最小化しながら移行を進めます。ビッグバンリライトと比較して、失敗のリスクが大幅に低いアプローチです。
Q6. 結合度(Coupling)の種類を低い順に正しく並べたものはどれですか?
- A) データ結合 → スタンプ結合 → 制御結合 → 内容結合
- B) 内容結合 → 制御結合 → スタンプ結合 → データ結合
- C) 制御結合 → データ結合 → スタンプ結合 → 内容結合
- D) スタンプ結合 → データ結合 → 内容結合 → 制御結合
答えを見る
正解: A
結合度は低い方から順に「データ結合(必要なデータのみ渡す)→ スタンプ結合(データ構造を渡すが一部しか使わない)→ 制御結合(制御フラグで動作を変える)→ 共通結合(グローバルデータを共有)→ 内容結合(他モジュールの内部を直接参照)」です。マイクロサービス設計では、サービス間の結合をデータ結合に保つことが重要です。
Q7. モノリスからの移行を検討すべきシグナルとして最も適切なものはどれですか?
- A) コードベースが1万行を超えた
- B) デプロイ頻度がビジネス要求に追いつかず、チーム間のコードコンフリクトが頻発している
- C) 新しいプログラミング言語を使いたい
- D) クラウドに移行したい
答えを見る
正解: B
移行を検討すべき最も重要なシグナルは、デプロイ頻度の低下とチーム間のコンフリクト頻発です。これは組織のスケーラビリティの限界を示しており、ビジネスの成長速度に技術が追いつけなくなっている状態です。コード行数や使用言語は直接的な移行理由にはなりません。クラウド移行はモノリスのままでも可能です。マイクロサービス化は「組織的な問題を技術的に解決する」アプローチです。
Q8. 共有データベースパターンの問題点として最も深刻なものはどれですか?
- A) ストレージコストが増加する
- B) バックアップに時間がかかる
- C) スキーマ変更が全チームに影響し、独立したデプロイが不可能になる
- D) SQLクエリが複雑になる
答えを見る
正解: C
共有データベースの最大の問題は、スキーマ変更の影響範囲です。1つのテーブルにカラムを追加するだけでも、そのテーブルを参照する全てのサービス/モジュールに影響が及びます。これにより、独立したデプロイが不可能になり、全チームの調整が必要なリリーストレインを強いられます。Database per Service パターンで各サービスが自身のデータストアを持つことで、この問題を解決します。
結果
7問以上正解の場合
合格です。 モノリスの問題分析の基礎をしっかり理解しています。アンチパターンの特定、技術的負債の定量化、依存関係の可視化 — これらは移行戦略を立てる上での必須スキルです。
「よく分析できた。問題が見えれば、解決策も見える。次はDDDを使ってサービスの境界を設計していこう」 — 佐藤CTO
6問以下の場合
もう少し復習しましょう。 Step 1のレッスンを再度読み返してください。
- Q1-Q3を間違えた場合 → Step 1-1「モノリスの利点と限界」を復習
- Q4-Q5を間違えた場合 → Step 1-3「依存関係分析」を復習
- Q6-Q8を間違えた場合 → Step 1-4「移行判断フレームワーク」を復習