アーキテクチャ戦略・戦術・設計の書き分け

アーキテクチャ

アーキテクチャに関するドキュメントを書く際、「これは戦略に書くべきか、戦術に書くべきか、それとも設計ドキュメントに書くべきか」と迷うことがある。

それはおそらく、戦略・戦術・設計の定義が曖昧であることや、書き分けに明確な基準がないことが原因だろう。

この記事では、戦略・戦術・設計の3層構造と、5W1Hを使った書き分けの指針を紹介する。

戦略・戦術・設計の3層構造

アーキテクチャに関するドキュメントは、以下の3層に分けて整理できる。

  • 戦略:Why/What(なぜ取り組むのか、何を達成したいのか)
  • 戦術:How/When/Where/Whoの大枠(どのような施策で、いつ、どこで、誰が)
  • 設計:具体的なシステム設計(インターフェース、データモデル、技術選定の詳細など)

抽象度でいえば、戦略が最も抽象的で、設計が最も具体的である。戦略で方向性を決め、戦術で施策の大枠を決め、設計で具体的な実装方針を決める。

なお、実際に策定する際は3層を横断的に見通して考える必要がある。しかし、ドキュメントを書き分ける・考えを整理する際には、この3層構造で分けて考えると整理しやすい。

戦略・戦術を書く前に

書き分ける前に、前提となるインプットを整理しておく必要がある。以下はアーキテクチャ戦略を考える上で大抵必要になるものだ。

1. ビジネス戦略・ビジョンの確認

  • ビジネス目標・戦略の理解:アーキテクチャがどのようにビジネスに貢献するか
  • ビジネスドライバー:事業成長の鍵となる要素、競争優位性の源泉
  • ステークホルダーの特定:経営層、開発部門、事業部門などが求める要件・制約・期待

2. 要件の整理

  • 機能要件:システムが満たすべき機能
  • 非機能要件:パフォーマンス、可用性、セキュリティ、保守性など

3. 現状のアーキテクチャ(As-Is)の把握

  • 現行システムの調査:システム構成、データフロー、利用技術、運用プロセス
  • 課題・リスクの抽出:ボトルネック、技術的負債、属人化、運用負荷など

4. 制約条件の確認

  • リソース制約:予算、人員、期限
  • 組織構造・チーム体制:誰がどの領域を担当するか

これ以外にも、規制・コンプライアンス要件、外部依存関係、過去のアーキテクチャ決定記録など、状況に応じて必要なインプットは様々だ。戦略を策定する前に、ある程度の情報収集を済ませておくことが重要である。

これらが曖昧なまま書き分けを行っても、形だけのドキュメントになってしまう。手法に囚われず、まずインプットの整理から始めることが肝要だ。

よくある混乱パターン

戦略と戦術の書き分けで、よくある混乱パターンを2つ挙げる。

1. 戦略に手段(How)を書いてしまう

例えば「マイクロサービス化する」という記述が戦略に入ってしまうケース。マイクロサービス化は手段であり、本来は戦術に書くべき内容だ。

戦略に書くべきは「なぜマイクロサービス化が必要か」という目的の部分。例えば「チーム間の依存を減らし、独立したデリバリーを可能にする」といった記述になる。

2. 手段が前提になり、目的を見失う

マイクロサービス化という手段を念頭に方向性を考えてしまうと、「なぜマイクロサービス化すべきなのか」という目的が曖昧になる。

手段を戦略から分離することで、戦略の抽象度と方針としての固さを維持できる。

5W1Hによる書き分け基準

5W1Hを戦略と戦術に割り当てると、以下のように整理できる。

戦略に書くべき要素

  • Why:目的、動機、ビジネス価値。なぜこのアーキテクチャ変更が必要なのか
  • What:達成したいゴール、解決したい課題。何を実現したいのか

戦術に書くべき要素

  • How:施策の大枠。どのようなアプローチで実現するか
  • When:タイムライン、フェーズ、優先順位
  • Where:適用範囲、システムのどの部分に適用するか
  • Who:担当チーム、ステークホルダー

設計に書くべき要素

  • Howの詳細:具体的な技術選定、インターフェース設計、データモデル
  • 要件・制約の詳細:非機能要件の具体的な数値、技術的制約
  • トレードオフの検討:採用した設計と代替案の比較

この整理により、戦略は「方向性」を、戦術は「施策の大枠」を、設計は「具体的な実装方針」を示すという役割分担が明確になる。

判断に迷うグレーゾーン

すべてが明確に分類できるわけではない。例えば、戦略の中でto-beとなるコンテキストレベルのアーキテクチャを書くケース。

「モノリスから分散アーキテクチャへ移行する」といった抽象度の高い記述は戦略寄りだが、コンテキストレベルの図として具体的なシステム境界を示すと、戦術的な要素も含まれてくる。

判断基準:「手段が前提になっていないか?」

迷ったときは、その記述が手段を前提としていないかを確認する。手段が前提になっていると、目的を見失いやすくなる。

戦略から手段を分離することで、方針としての固さを維持できる。状況によって手段は柔軟に変えられるが、目的はブレにくくなる。

戦略・戦術・設計の策定例

3層構造で書き分けた例を示す。

なお、戦略のWhy/Whatは課題分析から論理的に導かれる必要がある。課題分析が曖昧だと、Why/Whatも根拠のないものになってしまう。

課題分析

現在、機能リリースに平均4週間かかっている。主な原因は以下の3点である。

  • モジュール間の依存が強く、1つの変更が広範囲に影響する
  • 全体をまとめてテスト・デプロイする必要があり、待ち時間が発生する
  • リリース調整に複数チーム間の合意が必要で、コミュニケーションコストが高い

最も影響が大きいのはモジュール間の依存であり、これが他の2つの原因にも波及している。

ビジネスへの影響

リリース遅延により、過去1年で3件の大型案件を競合に奪われた。営業からは「機能追加の見通しが立たず提案しづらい」との声が上がっている。

ビジネス戦略との適合性

全社戦略では「市場変化への迅速な対応」が掲げられており、デリバリー速度の改善はこれに直結する。

戦略(Why・What)

Why:なぜ取り組むのか

機能リリースに平均4週間かかっており、市場変化への対応が遅れている。競合は2週間でリリースしており、このままでは競争力を失う。全社戦略「市場変化への迅速な対応」を実現するために、デリバリー速度の改善は最優先課題である。

What:何を達成したいのか

モジュール間の依存を減らし、チームが独立して変更・デプロイできる状態にする。これにより、デリバリー速度を現状の2倍に改善し、機能リリースを平均2週間以内にする。

戦術(How・When・Where・Who)

How:どうやって実現するか

  • 受注サービスをモノリスから分離し、独立デプロイ可能にする
  • 在庫サービスをモノリスから分離する
  • サービスごとにCI/CDパイプラインを構築する

When:いつまでに、どの順序で

  • Q1:受注サービスの分離
  • Q2:在庫サービスの分離
  • Q3:CI/CDパイプラインの整備と効果測定

Where:どこに適用するか

  • 対象:受注・在庫領域(依存関係が最も複雑な領域)
  • 対象外:その他の領域は次フェーズで検討

Who:誰が担当するか

  • 受注サービス:受注チーム + プラットフォームチーム
  • 在庫サービス:在庫チーム + プラットフォームチーム

設計

受注サービスの設計概要

  • 通信方式:モノリスとの連携はREST APIで行う。将来的には非同期メッセージングへ移行を検討
  • データ分離:受注データは専用DBに移行。移行期間中は双方向同期を実施
  • インターフェース:受注API v1として公開。後方互換性を維持するバージョニング方針を採用

アーキテクチャ図・ユースケース・シーケンス

(図は割愛)

  • アーキテクチャ図:受注サービスとモノリス、外部システムとの関係を示す
  • ユースケース:受注登録、受注照会、受注キャンセルなどの主要ユースケース
  • シーケンス図:受注登録時のモノリスとの連携フロー

非機能要件

  • 可用性:99.9%(月間ダウンタイム43分以内)
  • レスポンスタイム:p95で200ms以内
  • スループット:ピーク時1,000リクエスト/秒

トレードオフ

  • 同期通信 vs 非同期通信:初期はシンプルな同期通信を採用。複雑性を抑え、早期にリリース可能とする
  • 共有DB vs 専用DB:専用DBを採用。データ整合性の課題はあるが、独立デプロイを優先

まとめ

戦略・戦術・設計を書き分けることで、それぞれの役割が明確になる。

  • 戦略には Why・What を書く。目的と達成したいことに集中する
  • 戦術には How・When・Where・Who の大枠を書く。施策の方向性を示す
  • 設計には Howの詳細 を書く。具体的な技術選定や実装方針を示す
  • 迷ったときは「手段が前提になっていないか?」で判断する

手段を戦略から分離し、詳細を設計に委ねることで、それぞれのドキュメントが適切な抽象度で維持できる。