ソフトウェアアーキテクチャについて

ソフトウェアアーキテクチャとは

ソフトウェアアーキテクチャ(Software Architecture)とは

ソフトウェアアーキテクチャとは、システムにおけるソフトウェア全体の構造を示す概念的なモデルです。
ソフトウェアの構成要素として何があり、構成要素は相互にどのように連携して機能しているか、という仕組みや取り決めを示す「概略設計図」を意味します。


ソフトウェアアーキテクチャの目的

ソフトウェアアーキテクチャの主な目的は3つあります。

1点目は、ソフトウェアの品質を確保することです。
これには性能、保守性、信頼性などの非機能要件が含まれます。
既知の優れたアーキテクチャを修整しながら、適切なアーキテクチャを採用することで、初期の設計段階でこれらの品質を保証するための仕組みを確保できます。

2点目は、開発効率の向上です。
アーキテクチャを明確化することで、チーム間での共通認識を形成し、コミュニケーションを円滑にして、開発効率の向上を実現します。

3点目は、将来的なシステムの変更や拡張に対応しやすくなることです。
ソフトウェアは一度開発された後も常に進化し続けることが求められます。
優れたアーキテクチャすることは、新たな要件や技術の進化に迅速に対応できるような柔軟性を保証することに繋がります。


アーキテクチャパターン(Architecture Patten)とは

アーキテクチャパターンとは、ソフトウェアアーキテクチャにおけるベストプラクティスや解決策となるテンプレートの集合のことです。
パターンを利用することで、ソフトウェアの保守性、拡張性、性能などの特性を向上させることができます。


代表的なソフトウェアアーキテクチャ

モノリシックアーキテクチャ(Monolithic Architecture)

モノリシックアーキテクチャとは、自己完結型で独立した統合ユニットとして構築される構造モデルです。
単一の大規模なアプリケーションで全ての機能が統合されており、開発とデプロイが容易になるメリットがあります。
一方、保守性や拡張性において課題が発生しやすいというデメリットがあります。



マイクロサービスアーキテクチャ(Microservices Architecture)

マイクロサービスアーキテクチャとは、マイクロサービスと呼ばれる小さなコンポーネントを組み合わせることで、ひとつの大きなアプリケーションを構築する構造モデルです。
マイクロサービスの取捨選択によってアプリケーションを変更できるため、スケーラビリティや柔軟性が非常に高いという特徴があります。
また、マイクロサービスは各機能ごとに独立して開発・運用を行えるため、独立したチーム単位で効率的に制約なく作業できるメリットがあります。



イベントドリブンアーキテクチャ(EDA:Event-driven Architecture)

イベントドリブンアーキテクチャは、イベントと呼ばれる状態変化をトリガーとして、異なるコンポーネントが非同期で連携する構造モデルです。
従来型であるリクエスト・リプライの同期型アーキテクチャとは異なり、非同期にイベントを通知してマイクロサービスを実行するアーキテクチャとなります。
これにより、各マイクロサービスは独立可能であり、疎結合となり、アプリケーションに柔軟性や拡張性を提供します。

EDAでは、イベントプロデューサー、イベントチャンネル(ブローカー)、イベントコンシューマーの 3 つの主要コンポーネントで構成されます。
イベントプロデューサーはイベントを発行するサービスであり、イベントコンシューマーはイベントをサブスクライブするサービスです。
イベントチャンネルはイベントを受け付け、フィルタリングして対応するコンシューマーにプッシュします。



レイヤードアーキテクチャ(Layered Architecture)

レイヤードアーキテクチャは、ソフトウェアを機能や責務に基づいて複数の階層(レイヤー)に分割した構造モデルです。
各層が特定の責務を持ち、階層ごとに抽象化されたAPIを介して通信します。
n層アーキテクチャ、多層化アーキテクチャなどとも呼ばれます。

レイヤードアーキテクチャのメリットは、アプリケーションが複数の層に分割されているため、開発しやすく、保守性が高いことです。
また、スケーラビリティと柔軟性を十分に確保できることも大きなメリットです。

レイヤードアーキテクチャは、一般的には以下の4層で分割されます。

階層 説明
プレゼンテーション層(Presentation Layer) ユーザーインタフェースの実現に関するレイヤーです。
主な役割は、ユーザーからの入力を受け取り、必要なデータを表示することです。
アプリケーション層(Application Layer) プレゼンテーション層とドメイン層の橋渡しを行うレイヤーです。
主な役割は、データ処理、ビジネスルールの実行、ユースケースの実現、エラーハンドリングなどです。
ドメイン層(Domain Layer) ビジネスロジックを実装し、実行するためのレイヤーです。
主な役割は、ルールや制約などのドメイン知識の実現をする、他の層にドメイン知識を流出しないなどです。
インフラストラクチャー層(Infrastructure Layer) データストア、ネットワーク、セキュリティなど、物理的なインフラストラクチャーに関するレイヤーです。
主な役割は、データの永続化、ネットワーク接続、セキュリティ管理などです。

Patten-Oriented Software Architecture(POSA)

POSAとは

Patten-Oriented Software Architectureとは、ソフトウェア設計パターンを説明するソフトウェア エンジニアリング関連書のシリーズです。
5巻まで発行されており、POSA1はFrank Buschmann氏やRegine Meunier氏ら、POSA2はDouglas C. Schmidt氏らといった共著となっています。


POSA1で紹介されるアーキテクチャパターン

名前 説明
Reflection ソフトウェアをメタレベルとベースレベルの二つのレベルに分割し、ソフトウェアの構造と振る舞いとを動的に変更できる仕組みを提供します。
Broker 分散ソフトウェアシステムを構築するために利用できるアーキテクチャパターンです。
分散環境において、サービスの登録、検索、メッセージのやり取りを行い、クライアントとサーバの相互依存性を弱めます。
互いに依存性をもたないコンポーネント群が、リモートサービスを起動することによって相互作用するという構造を持ちます。
Microkernel システムの核となる最小限の機能を拡張機能や顧客依存部分から分離するアーキテクチャパターンです。
機能の中核部分と拡張部分を分離して,変更要求に対する拡張性を向上させることができます。
変更されるシステム要件への適合が求められるソフトウェアシステムに用いられます。
Model-View-Controller(MVC) 仕様の追加や変更による影響が及ぶ範囲を限定できるようにするために、機能を三つのコンポーネントに分けるアーキテクチャパターンです。
3つのコンポーネントとは、業務ロジックをモデルコンポーネント、画面出力をビューコンポーネント、それらの制御をコントローラコンポーネントとします。
Layers アプリケーションを特定の抽象レベルに属するサブタスクのグループ群に分割するアーキテクチャパターンです。
Pipes and Filters データをストリームとして扱うシステムのための構造を提供するアーキテクチャパターンです。
データストリームに対する一連の処理を、容易に追加又は削除できるように分割して、段階的に実施します。
フィルタコンポーネントの組み合わせを換えることで、機能の類似した一連のシステムを作成することができます。

その他のソフトウェアアーキテクチャ

その他

  • パイプラインアーキテクチャ
  • オニオンアーキテクチャ
  • クリーンアーキテクチャ
  • ヘキサゴナルアーキテクチャ

関連ページ