LESSON 30分

ストーリー

田中VPoE
言語戦略の次は、アーキテクチャ標準だ。個々のサービスの設計から、サービス間の連携パターンまでを標準化する
あなた
アーキテクチャの標準化って、かなり難しそうですね。チームごとに事情が違うので
田中VPoE
その通りだ。だからアーキテクチャ標準は「こう設計しろ」ではなく「この原則に従え」という形にする。原則は統一し、具体的な実装はチームに委ねる。例えば「サービス間通信はAPIを介して行うこと」は原則だが、RESTかgRPCかはチームが判断する
あなた
原則と実装を分離するわけですね
田中VPoE
そうだ。アーキテクチャ標準のレベルを3つに分けて設計する

アーキテクチャ標準の3つのレベル

レベル対象標準化の強さ
原則(Principles)設計の根底にある考え方疎結合、単一責任、APIファーストMust
パターン(Patterns)繰り返し使われる設計パターンマイクロサービス、イベント駆動、CQRSShould
規約(Conventions)具体的な実装ルールディレクトリ構造、エラーコード体系Should / May

原則(Principles)

組織が採用すべきアーキテクチャ原則

原則内容標準化レベル
APIファーストサービス間の連携はすべてAPI(REST/gRPC)を介して行うMust
疎結合サービスは他のサービスの内部実装に依存しないMust
データ所有権各サービスは自身のデータストアを所有し、直接DBアクセスを禁止Must
環境非依存アプリケーションは環境変数で設定を注入し、環境固有のコードを含まないMust
オブザーバビリティすべてのサービスは構造化ログ、メトリクス、トレースを出力するMust
フェイルファスト異常な状態を検知したら速やかにエラーを返すShould
冪等性APIは可能な限り冪等に設計するShould
原則の依存関係:

APIファースト ──→ 疎結合 ──→ データ所有権
      │                         │
      └──→ 環境非依存            └──→ フェイルファスト

オブザーバビリティ ←─────────────────────┘

                 冪等性 ←──────────────┘

パターン(Patterns)

サービスアーキテクチャパターン

パターン適用場面推奨度
モジュラーモノリス新規サービスの初期段階Adopt
マイクロサービス十分に境界が明確な独立ドメインAdopt
イベント駆動サービス間の非同期連携Trial
CQRS読み書きの負荷特性が大きく異なる場合Trial
Saga分散トランザクションが必要な場合Assess

サービス内部のアーキテクチャパターン

パターン内容推奨度
レイヤードアーキテクチャController → Service → Repository の3層構造Adopt
ヘキサゴナルアーキテクチャポート&アダプタによる依存性の逆転Adopt
クリーンアーキテクチャユースケース中心の設計Should

推奨するプロジェクト構造(Go + ヘキサゴナル)

service-name/
├── cmd/
│   └── server/
│       └── main.go              # エントリポイント
├── internal/
│   ├── domain/                  # ドメイン層
│   │   ├── entity/             # エンティティ
│   │   ├── valueobject/        # 値オブジェクト
│   │   └── port/               # ポート(インターフェース)
│   │       ├── in/             # 入力ポート(ユースケース)
│   │       └── out/            # 出力ポート(リポジトリ等)
│   ├── application/            # アプリケーション層
│   │   └── usecase/            # ユースケース実装
│   └── adapter/                # アダプター層
│       ├── in/                 # 入力アダプター(HTTP/gRPC)
│       └── out/                # 出力アダプター(DB/外部API)
├── pkg/                        # 公開パッケージ
├── api/                        # API定義(OpenAPI/Proto)
├── deployments/                # デプロイ設定
└── docs/                       # ドキュメント

規約(Conventions)

API設計規約

項目規約レベル
バージョニングURLパスに含める(/v1/usersShould
命名規則リソース名は複数形、スネークケースShould
エラーレスポンスRFC 7807 (Problem Details) 準拠Must
ページネーションカーソルベースを推奨Should
認証Bearer Token(JWT)Must

エラーコード体系

エラーコード体系:

形式: {サービスコード}-{カテゴリ}-{連番}

サービスコード:
├── USR: User Service
├── PRD: Product Service
├── ORD: Order Service
└── NTF: Notification Service

カテゴリ:
├── VAL: Validation Error(400系)
├── AUT: Authentication Error(401)
├── FRB: Forbidden Error(403)
├── NTF: Not Found Error(404)
├── CNF: Conflict Error(409)
└── INT: Internal Error(500系)

例: USR-VAL-001 = User ServiceのValidation Error #001

ログ標準

項目標準レベル
フォーマット構造化JSONMust
必須フィールドtimestamp, level, message, service, trace_idMust
ログレベルDEBUG, INFO, WARN, ERROR, FATALMust
機密データログにPII・機密データを含めないMust
リクエストログ全HTTPリクエストのアクセスログを記録Should

アーキテクチャ標準の適用ガイド

新規サービス vs 既存サービス

項目新規サービス既存サービス
原則全原則に準拠段階的に準拠(改修時に対応)
パターン推奨パターンを採用大規模リファクタリングは不要
規約規約に完全準拠新規追加コードから準拠

「アーキテクチャ標準は”設計図”ではなく”地図”だ。目的地への行き方は複数あるが、どの道を通っても迷わないようにするのが標準の役割だ」 — 田中VPoE


まとめ

ポイント内容
3つのレベル原則(Principles)、パターン(Patterns)、規約(Conventions)
原則APIファースト、疎結合、データ所有権、オブザーバビリティ等
パターンモジュラーモノリス、マイクロサービス、ヘキサゴナルアーキテクチャ
規約API設計、エラーコード、ログフォーマットの具体的な規定

チェックリスト

  • アーキテクチャ標準の3レベル(原則・パターン・規約)を理解した
  • 組織が採用すべきアーキテクチャ原則を理解した
  • 推奨パターンの使い分けを理解した
  • API設計規約・エラーコード・ログ標準の設計方法を理解した

次のステップへ

次は「品質標準とコーディング規約」を学びます。コードの品質を組織全体で底上げするための品質基準とコーディング規約の設計方法を身につけましょう。


推定読了時間: 30分