アーキテクチャの基礎を学ぶ
Architecture Kata を始める前に知っておきたい、アーキテクチャの考え方
ソフトウェアアーキテクチャとは
ソフトウェアアーキテクチャとは、システム全体の「骨格」のことです。 建築に例えると、間取りや構造(木造か鉄筋か)を決めることに相当します。
具体的には、以下の4つの要素で構成されます。
1システムの構造
マイクロサービス、モノリス、レイヤードなど、システムの「形」を決めるもの
2アーキテクチャ特性
可用性、セキュリティ、パフォーマンスなど、システムが備えるべき「品質」
3アーキテクチャ決定
「データベースは RDB を使う」「認証は外部サービスに委譲する」といった重要な判断
4設計指針
「マイクロサービス間は非同期通信を基本とする」といった開発チームが従うルール
ポイント: アーキテクチャは「何を作るか(機能)」ではなく「どう作るか(構造と品質)」を決めるものです。
機能要件と非機能要件のちがい
システムに求められる要件は、大きく2つに分けられます。
機能要件
システムが「何をするか」
- ユーザーがログインできる
- 商品を検索できる
- 注文履歴を表示できる
「動くかどうか」でテストできる
非機能要件(= アーキテクチャ特性)
システムが「どのように動くか」
- 1秒以内にレスポンスを返す
- 99.9% の稼働率を維持する
- 同時10万ユーザーに対応する
「どの程度うまく動くか」の基準
機能要件は「仕様書に書いてある」ことが多いですが、非機能要件は「書かれていないけれど当然求められる」ことが多く、見落とされがちです。アーキテクチャ設計の本質は、この非機能要件(アーキテクチャ特性)をどう満たすかにあります。
12のアーキテクチャ特性
Architecture Kata ワークでは、以下の12の特性から重要なものを3つ選びます。 まずはそれぞれの意味を理解しましょう。
可用性
Availability
システムが止まらないこと
例: 銀行のATMが24時間365日使える
スケーラビリティ
Scalability
負荷増加に対応できること
例: セール時にアクセスが10倍になっても耐えられる
パフォーマンス
Performance
レスポンスが速いこと
例: 検索結果が0.5秒以内に返る
セキュリティ
Security
不正アクセスから守られていること
例: 個人情報が暗号化されて保存される
保守性
Maintainability
コードを変更しやすいこと
例: 決済方法の追加が既存機能に影響しない
テスト容易性
Testability
テストを書きやすいこと
例: 各コンポーネントを独立してテストできる
デプロイ容易性
Deployability
リリースを素早く安全に行えること
例: 1日に何度でもデプロイできる
信頼性
Reliability
正確に動き続けること
例: 送金処理で金額が1円もずれない
拡張性
Extensibility
新機能を追加しやすいこと
例: 新しい決済手段をプラグインとして追加できる
監視容易性
Observability
システムの状態を把握しやすいこと
例: エラー発生時に原因箇所をすぐ特定できる
コスト効率
Cost
費用対効果が高いこと
例: ピーク時以外はサーバーを自動縮小してコスト削減
監査可能性
Auditability
操作履歴を追跡・証明できること
例: 誰がいつどのデータを変更したか記録されている
アーキテクチャの本質はトレードオフ
すべてのアーキテクチャ特性を最高レベルで満たすことは不可能です。 ある特性を高めると、別の特性が犠牲になります。これがトレードオフです。
パフォーマンス ↔ セキュリティ
暗号化処理を厳重にすると、レスポンスは遅くなる
スケーラビリティ ↔ コスト効率
大量のサーバーを常時稼働させれば負荷には強いが、コストが跳ね上がる
可用性 ↔ 信頼性
システムを止めずに動かし続けると、データの整合性チェックが難しくなる場合がある
「最善のアーキテクチャを狙ってはいけない。少なくとも最悪でないアーキテクチャを狙おう。」― 『ソフトウェアアーキテクチャの基礎』Mark Richards & Neal Ford
だからこそ「何を選んだか」だけでなく「何を捨てたか、そしてなぜか」を説明できることが重要です。 Architecture Kata ワークでは、この思考プロセスを繰り返し練習します。
身近な例で考える ― デジタルバンクの場合
自分たちの仕事に当てはめて考えてみましょう。 デジタルバンクのシステムでは、どのアーキテクチャ特性が重要でしょうか?
インターネットバンキングシステム
顧客がスマホやPCから残高照会・振込・ローン申込などを行うシステム。 1日あたり50万件のトランザクションを処理し、24時間365日の稼働が求められる。
考えてみよう
- このシステムで最も重要なアーキテクチャ特性は何でしょうか?3つ選んでみてください。
- なぜその3つを選びましたか?他の特性を「捨てた」理由は?
- もし「コスト効率」を最優先にしたら、何が犠牲になりそうですか?
ヒント: 多くの銀行システムでは、可用性・セキュリティ・信頼性が上位に来ます。 しかし「なぜパフォーマンスよりセキュリティを優先するのか」を 自分の言葉で説明できることが大切です。正解は一つではありません。
もっと学びたい方へ
基礎を学んだら、実践してみましょう
Architecture Kata ワークでは、ここで学んだ知識を使って グループでアーキテクチャ設計に挑戦します。
Architecture Kata を始める →