個人的な備忘録：Python の Flask や Django を使った Web3 層モデルのアプリケーションを記事としてまとめてみた

## はじめに

Python の Flask や Django を利用して Web3 層モデル（3-Tier Architecture）のアプリケーションを構築することは、スケーラビリティ・セキュリティ・開発効率 の面で多くのメリットがあります。

:::note note
**ここでは、メリット・構成・具体的なアーキテクチャ図 について解説します。**
:::

また、このブログ投稿サイトは、自分自身の備忘録としても活用する予定です。***記録を積み重ねながら、メモを残していきます。***

## 書こうと思ったきっかけ
受講している IT スクールでは、Python の Flask を使ったアプリケーション開発 を経験しましたが、Django はあまり使ったことがありませんでした。

:::note warn
***そこで、Flask と Django の違いを体系的に整理し、自分なりに理解を深めたい と思い、今回の記事を書くことにしました。***
:::

この記事は 将来の自分への備忘録 としてまとめていますので、温かく見守っていただけると嬉しいです。

## Web3層モデルとは？

Web3層モデル（3-Tier Architecture）は、以下の **3つの層** で構成される一般的なアーキテクチャです。

![Screenshot 2025-02-01 at 7.44.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/56d65773-0683-923e-7dcb-908168ae3ab8.png)
引用画像：https://ryonotes.com/web-3-layer-architecture/

- **プレゼンテーション層（フロントエンド）**  
  - **ユーザーと直接やりとりする部分**（例: ブラウザ、SPA、HTML+CSS+JavaScript）  
  - **Flask や Django のテンプレートエンジン**（Jinja2）を使うことも可能  
  - **Vue.js や React** などのフロントエンドフレームワークと連携  

- **アプリケーション層（バックエンド）**  
  - **Flask や Django で構築し、ビジネスロジックを処理**  
  - **API（REST/GraphQL）を提供** し、フロントエンドと連携  
  - **認証・認可、データ処理、セッション管理** などを担当  

- **データ層（データベース）**  
  - **RDB（PostgreSQL, MySQL）や NoSQL（MongoDB, DynamoDB）を利用**  
  - **ORM（Django ORM, SQLAlchemy）を使い、データ操作を効率化**  

この **3層構造** により、**アプリケーションの分離性・拡張性・スケーラビリティが向上** し、保守性の高いシステム構築が可能になります。

## Web3層モデルの構成図
以下は、Flask/Django をバックエンドとして利用する場合の基本的な3層モデル構成です。

```scss
┌──────────────┐       ┌──────────────────┐       ┌──────────────────┐
│  フロントエンド  │  →  │  Flask / Django  │  →  │  データベース       │
│  (HTML / Vue.js) │      │  (API / Logic)  │      │  (PostgreSQL)      │
└──────────────┘       └──────────────────┘       └──────────────────┘
      ↑                        ↑                          ↑
      │                        │                          │
      │  HTTPリクエスト         │ ORM (Django ORM)        │ SQLクエリ
      │  (REST / GraphQL)      │                          │
      ↓                        ↓                          ↓
 ユーザー操作              APIレスポンス               データ取得・保存
```

ここで紹介する内容は、AWS 環境などを想定したデプロイの一例です。

**デプロイ環境例**

- **フロントエンド**: React / Vue.js を **S3 + CloudFront** にホスト  
- **バックエンド**: Django / Flask を **ECS（Fargate）or Lambda（Serverless）** で運用  
- **データベース**: **RDS（PostgreSQL / MySQL）or DynamoDB**  
- **キャッシュ**: **Redis（ElastiCache）**  
- **ロードバランサー**: **ALB（Application Load Balancer）**  
- **ログ管理**: **CloudWatch / ELK Stack**  
- **CI/CD**: **GitHub Actions + AWS CodePipeline**  

## Flask vs Django 比較表

簡単に Flask と Django の違い を比較してみました。***気になる方は、ぜひ参考にしてみてください。***

| 項目        | Flask                                  | Django                                       |
|------------|--------------------------------------|---------------------------------------------|
| **特徴**    | 軽量・自由度が高い                    | フルスタック・機能が豊富                      |
| **API開発** | Flask-RESTful / GraphQL              | Django REST Framework                       |
| **ORM**     | SQLAlchemy                          | Django ORM                                  |
| **セキュリティ** | 手動で対策が必要                  | CSRF / XSS 対策が標準装備                   |
| **用途**    | 小規模な API やマイクロサービス向け    | 大規模アプリや認証が必要なシステム向け        |

- **Flask →** 小規模な API やマイクロサービス向け  
- **Django →** 大規模なアプリや CMS、認証が必要なシステム向け  

***Python の Flask や Django を活用することで、スケーラブルで管理しやすい 3層アーキテクチャの Web アプリ を構築できます！***

## まとめ
ここまで読んでいただき、ありがとうございました。
Python の Flask と Django の違いを体系的に整理することで、より理解が深まりました。

:::note info
***今後は、Django を使った個人開発 にも挑戦しながら、学んだことを引き続きアウトプットしていきたいと考えています。***
:::

これからも成長の過程を記録していきますので、引き続き温かく見守っていただけると嬉しいです！