ソフトウェアアーキテクチャとは?Laravel(ララベル)との関係や種類について解説

システム

ソフトウェアアーキテクチャとは?Laravel(ララベル)との関係や種類について解説

シュン

WRITERシュンシステムエンジニア

  • TOP
  • ブログ
  • ソフトウェアアーキテクチャとは?Laravel(ララベル)との関係や種類について解説

SAHRE

ソフトウェアアーキテクチャとは?Laravel(ララベル)との関係や種類について解説

こんにちは、ジーピーオンライン(@gpol_tw)のWebエンジニア、しゅんです!
ジーピーオンラインが利用する技術共有の場として、エンジニアからもブログ発信をしています。

今回の記事では、フレームワークでWebアプリケーションを開発する上で理解しておくべき概念である「ソフトウェアアーキテクチャ」の概要と、以前の記事で紹介したフレームワーク「Laravel(ララベル)」との関係について簡単にご紹介します。

ぜひ、ご覧ください。

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

ソフトウェアアーキテクチャとは(イメージ画像)

ソフトウェアアーキテクチャとはシステムの構成要素(以下「コンポーネント」)やそれらの関係性を抽象的に定義したものを指します。それはシステムの品質やパフォーマンス、保守性などに影響を与える重要な要素であり、コンポーネントやそれらの関係性、データの流れを図で表して、視覚的にまとめたりします。

ソフトウェアアーキテクチャはシステムの設計図として、主に以下の役割を担います。

  1. システムの全体像を把握しやすくする
  2. システム内で実現するビジネスに関連する要求やサービスの仕様(以下「ビジネスロジック」)を技術的な要件に落とし込むための橋渡しをする

1.についてはシステムのコンポーネントをそれぞれ定義して、役割と責務を明確にすることで実現します。

2.はビジネスロジックを実現するために、フレームワークを使って開発する場合はどの仕組みを利用して実装するかの指標になります。

つまり、ソフトウェアアーキテクチャとはシステムという複雑なものをわかりやすくするためにあるものといえます。

フレームワークは基本的にソフトウェアアーキテクチャを適用しやすい構造、仕組みを提供しているため、フレームワークで開発を行う上でソフトウェアアーキテクチャの概念を理解しておくことは重要だといえます。

ソフトウェアアーキテクチャの種類

システムのコンポーネントや関係性、さらにそれらがどのように作用しあうかによって、ソフトウェアアーキテクチャはさまざまな種類のパターンが考えられます。

ここでは代表的なソフトウェアアーキテクチャのパターンを4つご紹介します。

  • レイヤードアーキテクチャ
  • イベント駆動アーキテクチャ
  • マイクロサービスアーキテクチャ
  • MVCアーキテクチャ

レイヤードアーキテクチャ

レイヤードアーキテクチャ

コンポーネント

  1. プレゼンテーション層
  2. アプリケーション層
  3. ドメイン層
  4. インフラストラクチャ層

特徴

  • システムのコンポーネントを役割と責務ごとに層に分けるソフトウェアアーキテクチャ
  • プレゼンテーション層は主にユーザーとのやり取りを管理し、システムのユーザーインターフェースに該当
  • アプリケーション層はプレゼンテーション層からリクエスト(ユーザーの入力など)を受け取り、ドメイン層からビジネスロジックを呼び出して処理し、結果をユーザーに返却
  • ドメイン層はビジネスロジックを定義して管理
  • インフラストラクチャ層はデータベースとのやり取り、ファイル保存などデータの永続化を管理
  • 上の層は下の層に依存する関係で、下の階層の変更はすべての上の階層に影響を与える

メリット

  • コンポーネントの責務が各層に分かれており、影響範囲や修正箇所を把握しやすい

デメリット

  • コードの記述量が多くなり、変更が少ない小規模のシステムの場合は逆に管理の負担が増える可能性がある

イベント駆動アーキテクチャ

イベント駆動アーキテクチャ

コンポーネント

  1. イベントプロデューサー(Event Producer)
  2. イベントチャネル(Event Channel)
  3. イベントコンシューマー(Event Consumer)

特徴

  • コンポーネント間で互いに呼び出したりせず、特定のイベント(プログラム実行、ボタンクリックといったユーザー操作など)に反応して、それに対応するアクション(ビジネスロジックを実行する処理)を実行するソフトウェアアーキテクチャ
  • イベントプロデューサーはイベントを生成する役割
    (例)「お問い合わせフォームでユーザーが送信完了ボタンを押す」というイベントを生成
  • イベントチャネルは生成されたイベントを、そのイベントに対応するアクションをおこなうイベントコンシューマーに転送
    (例)「お問い合わせ情報のデータ登録」、「メール通知」のアクションをおこなうイベントコンシューマーにイベントを転送
  • イベントコンシューマーはイベントを受け取り、対応するアクションを実行
    (例)「お問い合わせ情報のデータ登録」、「メール通知」のアクションを実行

メリット

  • ほぼ非同期で処理を実行できるため、高いパフォーマンスが必要なシステム(入札システム、ECサイトなど)に適した構築が可能

デメリット

  • 従来と異なるデータ処理の流れになるため、構築、導入の難度は高い

マイクロサービスアーキテクチャ

マイクロサービスアーキテクチャ

コンポーネント

  1. クライアント(Client)
  2. APIゲートウェイ(API Gateway)
  3. マイクロサービス(Microservices)

特徴

  • システムをそれぞれの独立したサービスや機能の集合として構築するソフトウェアアーキテクチャ
  • クライアントはユーザーと直接やり取りするサービスを提供
  • APIゲートウェイはクライアントのリクエストを特定のマイクロサービスに渡す(ルーティング)。それ以外にもクライアントとマイクロサービス間での認証・認可などの機能を提供
  • マイクロサービスは特定のサービスを提供するために、特定のビジネスロジックを実行する。これらは個々に独立して機能拡張が可能
  • マイクロサービス間では必要に応じてAPIを介して相互に通信

メリット

  • サービス単位で独立した構成のため、機能の追加、変更、再利用がしやすい
  • トラブル時の影響範囲を限定化できる

デメリット

  • 独立したサービス間でデータの統一化や保持、共有が難しい
  • 統合テスト(システム全体を総括した機能の検証チェック)の難度が高い

MVCアーキテクチャ

MVCアーキテクチャ

コンポーネント

  • コントローラ(Controller)
  • モデル(Model)
  • ビュー(View)

特徴

  • 3つの責務を分けたコンポーネントで構成されるソフトウェアアーキテクチャ
  • コントローラはユーザーから受け取ったリクエストをもとに、モデルとビューに命令して、処理を実行させる担当
  • モデルはデータベースとのやり取りや、ビジネスロジックの処理を担当
  • ビューは画面やレスポンスなど、ユーザーに表示する情報出力を担当

メリット

  • コンポーネントの責務が各層に分かれており、影響範囲や修正箇所を把握しやすい
  • Webアプリケーションのフレームワーク開発によく利用されており、導入しやすい

デメリット

  • コードの記述量が多くなり、変更が少ない小規模のシステムの場合は逆に管理の負担が増える可能性がある

「MVCアーキテクチャ」についてはWebアプリケーションを設計するための一般的なパターンであり、よく利用されています。以前紹介した「Laravel」というフレームワークも、MVCアーキテクチャで実装しやすい構造、仕組みを採用しています。

【関連記事】Laravelフレームワークとは?特徴について解説

Laravel(ララベル)とMVCアーキテクチャ

フレームワークを用いてWebアプリケーションを開発する流れは、設計時にビジネスロジックに基づいて実装することが一般的です。その際に、事前にWebアプリケーションの構造ごとにコンポーネントの役割を明確にして、改修のしやすさを考慮した最適なソフトウェアアーキテクチャを採用することが重要です。

ここでは「MVCアーキテクチャ」と、フレームワーク「Laravel」との関係について簡単にご紹介します。

LaravelとMVCアーキテクチャの関係

MVCアーキテクチャを採用したLaravelはユーザーのリクエストからレスポンスまでの一連の処理をおこなうため、その流れの中でビジネスロジックを実現する処理を実装していきます。

受け取ったリクエストをもとに、どのようなレスポンスをビューに返す処理を実装するかを考えていくイメージです。

LaravelとMVCアーキテクチャの関係
※Laravel は Laravel Holdings Inc. の商標です。

LaravelはMVCアーキテクチャで構築できるように、以下のような便利な仕組みを提供しています。今回の記事でLaravelの仕組みまで詳細に説明はしませんが、Laravelで開発をおこなうのであればどれも重要な機能なので、興味があればぜひ調べてみてください。

Laravelにおけるコントローラ(Controller)

Laravelではユーザーからリクエストを受け取るRouterという仕組みにより、コントローラによる処理をおこないます。例えばユーザーの情報をデータベースから取得する場合、ユーザー情報を取得するリクエストを受けた後で、Routerで指定したコントローラで、データベースに接続してユーザーの情報を取得するといった事前に定義したビジネスロジックを呼び出して実行します。

特定のリクエストに対してはモデルから特定のビジネスロジックを呼び出して処理をおこない、レスポンスをビューに返すといった、一覧の処理の流れを制御する役割を持つのがコントローラです。

Laravelにおけるモデル(Model)

モデルは基本的にデータベースを操作する役割を持つことが多く、ビジネスロジックを実現する役割を持ちます。一般的にはモデルはビジネスロジックを実装する層とデータベースを操作する層から構成されます。

LaravelではEloquent、QueryBuilderといった機能を提供しているので、比較的簡単にデータベースの操作処理を実装可能です。注意点としては、ビジネスロジックとデータベースの操作処理を区別し、分けて実装をしていかないと後々改修がしにくい、保守性が低いシステムになってしまうところです。Laravelではこの点は自由に設計、実装が可能なため、あらかじめ設計指針を決めておくことが重要です。主にデータベースを操作する層と分けて、責務を分離するアプローチが考えられます。

弊社がLaravelで開発しているCMS、「WOW」でも、このアプローチを参考にデータベースの操作処理を分けた構造を採用しています。

【関連リンク】高いカスタマイズ性とセキュリティを提供する独自開発型CMS「WOW」

Laravelにおけるビュー(View)

ビューは画面表示の役割ですが、LaravelではBladeテンプレートにより、返却されたレスポンスをHTMLとして画面に表示可能です。また、HTML以外にもJSONといったビジネスロジックに応じたさまざまなデータ形式の出力に対応しているため、柔軟に実装が可能なことが利点です。

まとめ

今回はソフトウェアアーキテクチャという概念とLaravelというフレームワークの関係について簡単にご紹介させていただきました。

詳細な説明は省きましたが、エンジニアの方以外でもどういう流れでフレームワークを用いたシステム開発をおこなっているか、理解する一助になれば幸いです。

ジーピーオンラインでのシステム開発を希望される方はぜひ気軽にご相談ください。

サービス資料をダウンロードいただけます

Web制作会社をお探しの方へ向けて、当社のサービス内容を簡単にダウンロードできる資料請求フォームをご用意いたしました。

▼資料内容(一部)
-ジーピーオンラインについて
-ジーピーオンライン3つの力
-サイト作りのポリシー
-品質管理
-サービス紹介・実績

ジーピーオンラインサービス資料イメージ

資料請求フォームへ

この記事の著者
シュン

WRITERシュン システムエンジニア

WebエンジニアとしてWebシステムの開発を経験したのち、2022年にジーピーオンラインに入社してCMS開発を主に担当。バックエンドの技術が得意ですが、現在はフロントエンドの技術も学習中です。

関連記事
制作実績

制作実績一覧へ