📘 Vol.21.0：掲示板アプリケーションv2構成の目的と全体像

🔰 はじめに
本記事は、Struts2ベースで開発された掲示板アプリケーションの***v2構成リファクタリング***に関する導入編です。

旧バージョン（v1）で得た学びや技術的課題をもとに、アーキテクチャ・パッケージ設計・共通処理の集約を見直し、***保守性・拡張性・再利用性***を高めたv2構成へと進化させました。

本記事では、v2構成の背景と目的、全体設計の方針を紹介します。以降のシリーズ記事では、各技術トピックを深掘りしていきます。

🧱 なぜv2構成にしたのか？
v1構成で一定の機能実装を進める中で、以下のような構造的課題が顕在化しました。

| No | 課題内容             | 補足説明                                             |
| -- | ---------------- | ------------------------------------------------ |
| 1  | **クラス肥大化と責務の混在** | 例えば `User.java` にDTO的な役割やビジネスロジックが混在し、見通しが悪化していた |
| 2  | **ディレクトリ構成の曖昧さ** | 技術別に分類されておらず、ActionクラスやJSPが機能ごとに整理されていなかった       |
| 3  | **共通処理の分散**      | 画面遷移やログインユーザー取得など、似たような処理が各Actionに個別実装されていた      |
| 4  | **画面部品の重複**      | 一部のレイアウトやフォーム部品が各JSPにコピペされ、保守性が低下していた            |
| 5  | **バリデーションの重複実装** | カスタムバリデーションはどうしても個別実装になるが、可能な範囲で共通化の余地が見えた       |


### 🎯 v2構成の目的と改善方針

| 目的           | アプローチ                                            |
| ------------ | ------------------------------------------------ |
| **責務の分離**    | DTO、Service、DAOの役割を分離し、Model肥大を回避                |
| **共通処理の集約**  | `BaseAction` と `Interceptor` による認証制御・ログイン情報の統一管理 |
| **UI部品の共通化** | タグライブラリ化、Tilesレイアウトの活用、エラーメッセージ共通化               |
| **保守性の向上**   | パッケージ構成を**機能ベース**に再編し、管理画面／ユーザ画面を明確に分離           |
| **拡張性の確保**   | Service層の導入により、ビジネスロジックの再利用と単体テストのしやすさを確保        |

### 🏗️ v2全体構成のイメージ
本プロジェクトでは、以下のようなモダンな多層構成・機能別パッケージ設計を導入しました：
```text
Bulletinboard-v2
├── pom.xml
├── .settings/
├── build/
├── logs/
├── resources/
│   ├── log4j2.xml
│   ├── struts.xml
│   ├── struts.properties
│   └── messages.properties        ← メッセージ国際化／共通化
├── src/
│   └── main/
│       ├── java/
│       │   └── com.company.bulletinboard/
│       │       ├── action/                    ← フロントコントローラ
│       │       │   ├── admin/                ← 管理画面用（ユーザ・掲示板・投稿）
│       │       │   ├── user/                 ← ユーザ機能（ポータル・スレッド・投稿）
│       │       │   ├── login/                ← ログイン・ログアウト
│       │       │   └── common/               ← CancelActionなど共通系
│       │       ├── base/                     ← BaseActionなど共通基底クラス
│       │       ├── dao/                      ← DBアクセス層（UserDaoなど）
│       │       ├── dto/                      ← DTO定義（UserDtoなど）
│       │       ├── interceptor/              ← 認証・権限系Interceptor
│       │       ├── listener/                 ← アプリケーションスコープ管理など
│       │       ├── service/                  ← ビジネスロジック層
│       │       ├── util/                     ← 共通ユーティリティ群（DateUtilなど）
│       │       └── validation/               ← カスタムバリデーター群（ID形式等）
│       └── test/
│           └── java/
│               └── com.company.bulletinboard/
│                   └── （テストクラス群）
├── target/
└── WebContent/
    ├── META-INF/
    ├── WEB-INF/
    │   ├── web.xml
    │   └── tiles.xml
    ├── view/                                ← JSPビュー層
    │   ├── admin/                           ← 管理画面JSP（ユーザ管理など）
    │   ├── user/                            ← ユーザ向け画面（ポータル、スレッド）
    │   ├── common/                          ← ログイン、メニュー、エラー画面等
    │   └── style.css
    └── assets/                              ← 画像・JSなど（任意）
```

### 🔄 以下の構成要素も組み込み済みです：
- `dao/`：`UserDao` / `BoardDao` / `ThreadDao` / `PostDao`

- `dto/`：`UserDto` / `BoardDto` / `ThreadDto` / `PostDto`

- `interceptor/`：`AuthInterceptor`（認証Interceptor）

- `util`/：`DateUtil` など、共通的なユーティリティクラス

---

### 📚 今後の連載記事構成

| 記事番号        | タイトル                                   |
| ----------- | -------------------------------------- |
| 📘 Vol.21.0 | v2構成の目的と全体像（本記事）                       |
| 📘 Vol.21.1 | パッケージ構成とディレクトリ設計の詳細                    |
| 📘 Vol.21.2 | DTOの分離とリファクタリング実装                      |
| 📘 Vol.21.3 | 共通基底クラス BaseAction と Interceptor の活用設計 |
| 📘 Vol.21.4 | タグライブラリとUI共通化の実践                       |


### 💬 おわりに
v2構成は「作りやすさ」ではなく「育てやすさ」に重点を置いた設計です。
プロジェクトを進める中で得た試行錯誤や改善アイデアを、今後のシリーズで具体的に紹介していきます。

次回は「📘 Vol.21.1：パッケージ構成とディレクトリ設計の詳細」にて、設計意図をより深堀りしていきます。どうぞお楽しみに！

---