PR

【初心者向け】3層アーキテクチャをわかりやすく1分で解説

IT-Skills

3層アーキテクチャ(3-tier architecture)とは、2層のクライアントサーバシステムの構成を3つの主要な層(「プレゼンテーション層(UI層)」、「アプリケーション層(ロジック層)」、「データ層」)に分けることで、システムの効率や拡張性、保守性を向上させる設計アプローチです。

参考 クライアントサーバシステムとは?

  1. プレゼンテーション層(UI層)
    • ユーザーインターフェースを管理。ユーザーからの入力を受け付け、表示するデータや画面を制御する層。
  2. アプリケーション層(ロジック層)
    • アプリケーションの中心となる処理を担う。計算、データ変換、ビジネスロジックの適用など→Javaなどのプログラムが動く層。
  3. データ層(データアクセス層)
    • データベースや外部サービスとの通信を行います。データそのものが保管されている層。

ざっくり説明すると、システムを「①:見た目の部分」「②:機能の部分」「③:データの部分」の3階層に分けて考えるのが3層アーキテクチャという概念。現代のほとんどのシステムはこの3層アーキテクチャの考え方に基づいて開発されています。

このページではシステム開発の土台となる3層アーキテクチャの概念について1からわかりやすく解説します。

このページで学べる内容
  • 3層アーキテクチャとは?
    • プレゼンテーション層(UI層)
    • アプリケーション層(ロジック層)
    • データ層(データベース層)
  • 3層アーキテクチャを採用するメリット

システムエンジニアを目指す方であれば知らないと恥ずかしいITの世界の超・基本知識です。是非最後までご覧ください。

3層アーキテクチャは「3層構造」「3層クライアントサーバシステム」「3階層モデル」など様々な呼ばれ方をする場合がありますが、本ページでは「3層アーキテクチャ」で統一してご説明します。

スポンサーリンク

前提:クライアントサーバシステムについて

3層アーキテクチャを理解するための前提知識「クライアントサーバシステム」の概念について簡単にご説明します。

クライアントサーバシステムとは、サービス(実際の処理)を提供する「サーバ」と、サービスをリクエストする「クライアント」とで役割を2つに分担したシステムのことです。

クライアントサーバシステム
図1:クライアントサーバシステム

クライアントサーバシステムの典型的な例がWebページです。Webブラウザ(クライアント)がWebサーバーにページをリクエスト。WebサーバーがHTMLや画像などのデータを送信して応答しています。

参考 Webサーバーとは?

処理の要求と結果の表示を行うクライアントと、実際の処理を行うサーバを分離して構築することで、負荷分散柔軟なシステム変更を実現することが可能になります。

3層アーキテクチャは、このクライアントサーバシステムに含まれる概念の1つです。

3層アーキテクチャとは?

3層アーキテクチャとは、クライアントサーバシステムを、以下の3階層に分割したシステムのことを言います。

3層アーキテクチャの基本
  • プレゼンテーション層
    →画面・見た目の部分
  • アプリケーション層
    →機能の部分
  • データ層
    →データの部分

専門用語だけで解説してもイメージしづらいと思いますので、まずは、クライアントサーバシステムについて表した以下の図を再度ご覧ください。

3層アーキテクチャ
図2:クライアントサーバシステムの概要イメージ図

クライアントサーバシステムは、システムを「クライアント」と「サーバ」に分解して構築するシステムです。実際の処理を「サーバ」が担い、画面などの処理を「クライアント」が担います。

3層アーキテクチャという概念がでてくるのは、この図でいう「サーバ」部分。「サーバ」を更に細かく3階層に分けて設計するアプローチが3層アーキテクチャです。

それぞれの関係性を分かりやすくまとめたのが以下の図です。

3層アーキテクチャ
図3:3層アーキテクチャ

サーバの構成を3つの主要な層に分けることで、システムの効率や拡張性、保守性を向上させる設計アプローチが3層アーキテクチャ。

具体的にはサーバを「①:見た目の部分」「②:機能の部分」「③:データの部分」に分けて整理します。

各層の役割を1つ1つ確認していきましょう。

プレゼンテーション層(UI層)

プレゼンテーション層

プレゼンテーション層(またはUI層)は、主に以下の役割を果たす3層アーキテクチャの一部です。

超ザックリいえば、画面に関するあれこれ(どんなレイアウトにする?どんな入力項目を設ける?)を制御するのがプレゼンテーション層の役割です。プレゼンテーション層の主役がHTMLやCSS・JavaScriptです。

参考 HTML/CSS/JavaScript

プレゼンテーション層の役割
  • ユーザーインターフェースの提供
    • ユーザーがシステムとやり取りするためのグラフィカルなユーザーインターフェース(GUI)やコンソールベースのインターフェースを提供します。
  • データの表示と入力
    • システムから取得したデータを視覚的に整形して表示します。また、ユーザーからのデータ入力や操作を受け付け、適切な形式に変換してアプリケーション層やデータ層に渡します。
  • ユーザー体験の向上
    • プレゼンテーション層は、ユーザー体験を向上させるための機能を実装します。これには、視覚デザインやレイアウト、ナビゲーション、ユーザー操作に対するフィードバックなどが含まれます。また、アクセシビリティやレスポンシブデザインの実装もプレゼンテーション層の役割です。
  • クライアントサイドの処理
    • プレゼンテーション層では、一部のクライアントサイドの処理が行われることがあります。例えば、JavaScriptを使用して、フォームのバリデーションや動的なコンテンツの表示、非同期通信などを実現できます。

プレゼンテーション層は、ユーザーとシステム間のインタラクションを担当し、使いやすく魅力的なユーザーインターフェースを提供することで、システムの利用効果やユーザー満足度を向上させる役割を果たします。

要するに、画面の制御を行っているのがプレゼンテーション層だと覚えておけばOKです。

アプリケーション層(ロジック層/ビジネス層)

ザックリ説明すると、画面から受け取ったデータを使って計算したり、メッセージを返したり、データを返したり・・・のあれこれを行うのがアプリケーション層の役割です。

検索ボックスに入力された単語を受け取って対応するデータをデータ層から引っ張ってくるのがここの層。

アプリケーション層(またはロジック層、ビジネス層とも呼ばれる)は、3層アーキテクチャの中核を担う層で、以下の主な役割を果たします。

アプリケーション層の役割
  • ビジネスロジックの実装
    • アプリケーション層は、システムのビジネスロジックを実装し管理します。ビジネスロジックとは、システムが扱うデータの処理ルールや業務フロー、制約条件など、アプリケーションの基本的な機能を定義するものです。
  • プレゼンテーション層とデータ層の仲介
    • アプリケーション層は、プレゼンテーション層からのリクエストを受け取り、必要なビジネスロジックを適用した上で、データ層にアクセスしてデータの取得や更新を行います。その後、結果をプレゼンテーション層に返して、ユーザーに表示させます。この仲介役を果たすことで、各層の責任範囲が明確になり、システム全体の保守性や拡張性が向上します。
  • データのバリデーションと処理
    • アプリケーション層では、ユーザーからの入力データや外部システムからのデータを検証し、適切な形式や範囲に従っているかを確認します。また、必要に応じてデータの変換や加工を行い、データ層へ保存する前に整形します。
  • トランザクション管理
    • アプリケーション層は、データベースへのアクセスにおけるトランザクションを管理します。トランザクションとは、一連のデータ操作が完全に実行されるか、全く実行されない状態を保証する仕組みです。これにより、データの一貫性や整合性が維持されます。

アプリケーション層は、システムのビジネスロジックを集中的に管理し、各層間のコミュニケーションを担当することで、システム全体の効率化や拡張性を向上させる役割を果たします。

データ層

図書館の司書さんのような役割を担うのがデータ層です。本(データ)を管理したり、指定された本を探してきたりします。

データ層(またはデータアクセス層、ストレージ層とも呼ばれる)は、3層アーキテクチャの一部で、以下の主な役割を果たします。

データ層の役割
  • データの永続化
    • システムで扱われるデータを永続的に保存する役割を担います。データは、リレーショナルデータベースやNoSQLデータベース、ファイルシステムなどのストレージシステムに保存されます。データ層がデータの永続化を管理することで、アプリケーション層やプレゼンテーション層はデータの保存方法を意識せずに処理を行うことができます。
  • データアクセスの抽象化
    • データ層は、データアクセスを抽象化します。これにより、アプリケーション層がデータベースやストレージシステムに直接アクセスせず、データ層が提供するAPIやインターフェースを使用してデータの取得や更新ができます。データアクセスの抽象化は、システム全体の保守性や拡張性を向上させ、データストレージの変更やアップグレードが容易になります。
  • データの検索と操作
    • データ層は、データの検索や操作を行うための機能を提供します。これには、データの追加、更新、削除、検索など、様々な操作が含まれます。データ層がこれらの操作を管理することで、アプリケーション層はデータ操作の詳細を意識せずにビジネスロジックに集中できます。
  • データの整合性とセキュリティ
    • データ層は、データの整合性やセキュリティを保つ役割も担います。これには、データベースの制約やトリガーインデックスビューなどの機能を活用して、データの整合性を維持したり、不正アクセスやデータ漏洩のリスクを低減したりします。

ここは、単にデータベースだと考えればOK。

3層アーキテクチャの具体例

本サイトを開いてから、記事を表示するまでの流れを具体的に見つつ、3層アーキテクチャについて整理します。

本サイト、ビズドットオンラインを例に解説します。

ステップ1 画面に検索ボックスを表示する →プレゼンテーション層

ユーザに文字や画像を表示する役割を担うのがプレゼンテーション層の役割です。プレゼンテーション層がちゃんと仕事をしているからこそ、検索ボックスなどの各種画面の表示が行える仕組み。

この検索ボックスに「3層アーキテクチャ」と入力し実行ボタンを押すと「3層アーキテクチャ」という単語が、プレゼンテーション層からアプリケーション層に受け渡されていきます。

ステップ2 入力された値を基に処理を実施 →アプリケーション層が担う

「3層アーキテクチャ」という単語を受け取り、何を行えばよいか?を判断し、その処理を行うのがアプリケーション層の役割です。

画像に alt 属性が指定されていません。ファイル名: image-8.png

この場合、"検索ボックス" に値が入力されたので、やるべき内容はその値をデータ層に渡して検索結果を受け取ることです。

もし、入力フォームに値が入っていたら、メールを送信したり、データ層に登録すべきデータを渡したり・・・という諸々の役割を担うのがアプリケーション層です。

ステップ3 対象のデータを検索 →データ層

アプリケーション層から受け渡された「3層アーキテクチャ」という単語を基に、数百ある記事の中から記事の一覧をアプリケーション層に返却するのがデータ層。

画像に alt 属性が指定されていません。ファイル名: image-9.png

データ層から受け取ったページデータをプレゼンテーション層に返却するのはアプリケーション層の役割で、プレゼンテーション層は受け取ったデータをもとに綺麗なレイアウトで画面に表示させます。

厳密に説明すると、もう少し複雑になるのですが、ざっくりと上記のような流れを理解できればまずはOKです。

3層アーキテクチャのメリット

初心者のうちは「なぜこのようにシステムを複雑に考える必要があるのか?」と不思議に感じるかもしれません。

最後に3層アーキテクチャのメリットについて整理しておきます。

3層アーキテクチャのメリットは以下の通りです。

3層アーキテクチャのメリット
  • 責任範囲の分離
    • 各層が特定の機能や責任範囲を持つことで、アプリケーション全体が整理され、各コンポーネントの役割が明確になります。これにより、開発者は特定の機能や問題に集中し、システム全体の理解や開発が容易になります。
  • 保守性と拡張性の向上
    • 3層アーキテクチャでは、各層が独立しているため、一部の変更や機能追加が他の層に影響を与えにくくなります。これにより、システムの保守や拡張が容易になり、長期的な運用コストが削減されます。
  • 再利用性の向上
    • 各層が独立しているため、特定の層のコンポーネントや機能を他のアプリケーションでも再利用しやすくなります。これにより、開発効率が向上し、開発コストや時間が削減されます。
  • テストの容易性
    • 3層アーキテクチャでは、各層が独立しているため、単体テストや統合テストが容易になります。また、各層のテストを分離して行うことで、テストのカバレッジや品質が向上します。
  • 技術変更への柔軟性
    • 各層が独立しているため、特定の層で使用する技術やフレームワークを変更する際に、他の層に影響を与えにくくなります。これにより、技術の進歩に伴ってシステムを柔軟にアップグレードすることができます。
  • システムのスケーラビリティ
    • 3層アーキテクチャでは、各層を独立してスケールアウト(横方向の拡張)やスケールアップ(縦方向の拡張)することができます。これにより、システム全体のパフォーマンスや信頼性が向上し、大規模なアプリケーションにも対応できます。
  • セキュリティの向上
    • 3層アーキテクチャでは、各層が独立しており、セキュリティ対策を層ごとに適用することができます。例えば、データ層ではデータの保護やアクセス制御を、アプリケーション層では認証や権限管理を、プレゼンテーション層では入力バリデーションやセッション管理を実装することができます。これにより、各層でセキュリティ対策を効果的に行い、システム全体のセキュリティが向上します。
  • 分散システムの実現
    • 3層アーキテクチャでは、各層を物理的に異なるサーバーやクラウドインフラストラクチャに配置することができます。これにより、システムの負荷分散や耐障害性が向上し、分散システムを実現することができます。
  • 開発チームの効率化
    • 各層の責任範囲が明確になることで、開発チームのメンバーが特定の層に専門性を持って開発に取り組むことができます。これにより、開発チームのスキルセットや専門知識が活かされ、開発効率が向上します。

要は「システムが分離・独立しているから、柔軟にいろいろやりやすいよね!」というのが3層アーキテクチャということです。

ネットワークの仕組みを1から学習してみましょう

ネットワークの基礎を理解することで、自分ができることの範囲が大きく広がります。

以下の技術書はさくっと手軽に読める内容ではないのですが、ネットワークエンジニア全員が必ず読破している本と言っても過言ではありません。是非この機会にチャレンジしてみてみましょう。

blank
インターネットのプロトコルTCP/IP入門書の決定版!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
IT-SkillsNetwork
シェアする
ビズドットオンラインをフォローする
blank
ビズドットオンライン
タイトルとURLをコピーしました