TERASOLUNA
TERASOLUNA とは
TERASOLUNA(テラソルナ)は、NTTデータが中心となって策定した Java アプリケーション開発のベストプラクティスガイドラインおよびフレームワークの総称である。Spring Framework と MyBatis をベースにした推奨アーキテクチャを定義し、設計・実装・テストに関する詳細な規約とサンプルコードを提供している。OSS(オープンソースソフトウェア)として GitHub 上で公開されており、誰でも参照・利用できる。
なぜ SIer で重要か
TERASOLUNA は NTTデータ系の案件を中心に、多くの SIer プロジェクトで採用されている。大規模プロジェクトにおいて、数十〜数百人の開発者が一定の品質でコードを書くためには、共通のルールと規約が不可欠である。TERASOLUNA はそのルールブックとしての役割を担っており、NTTデータ系の案件に携わる場合はほぼ確実に目にすることになる。
基本概念
TERASOLUNA の構成要素
TERASOLUNA は主に以下の 2 つの要素で構成されている。
TERASOLUNA Server Framework for Java(5.x)
Spring Framework をベースにした Java Web アプリケーション開発フレームワーク。Spring MVC、Spring Security、MyBatis 等の組み合わせ方と設定方法を標準化している。独自のフレームワークを作り込むのではなく、既存の OSS を組み合わせた「ベストプラクティスの集合体」という位置づけである。
TERASOLUNA Development Guideline
設計・実装・テストに関する詳細なガイドラインドキュメント。Web ブラウザで参照でき、各トピックについて「なぜそうすべきか」「どう実装すべきか」「サンプルコード」が体系的にまとめられている。以下のような章立てで構成されている。
- アーキテクチャ概要
- Web アプリケーション開発(Spring MVC)
- データベースアクセス(MyBatis)
- セキュリティ(Spring Security)
- 入力チェック(Bean Validation)
- 例外ハンドリング
- ロギング
- メッセージ管理
- ファイルアップロード・ダウンロード
レイヤードアーキテクチャ
TERASOLUNA が推奨するアーキテクチャは、役割ごとにレイヤー(層)を分離する「レイヤードアーキテクチャ」である。
[クライアント(ブラウザ)]
↓
[Controller 層] ── リクエストの受付・レスポンスの返却
↓
[Service 層] ── ビジネスロジックの実行
↓
[Repository 層] ── データベースアクセス(MyBatis の Mapper)
↓
[データベース]
| レイヤー | 役割 | 主な技術 |
|---|---|---|
| Controller | HTTP リクエストの受付、入力チェック、Service の呼び出し、画面遷移の制御 | Spring MVC |
| Service | ビジネスロジックの実行、トランザクション管理 | Spring(@Service, @Transactional) |
| Repository | データベースへの CRUD 操作 | MyBatis(Mapper XML + Mapper インターフェース) |
各レイヤーは上位から下位への一方向の依存のみが許され、下位レイヤーが上位レイヤーを呼び出すことは禁止されている。この制約により、各レイヤーの責務が明確になり、保守性が向上する。
共通例外処理
TERASOLUNA では、例外の種類に応じた処理方針が定義されている。
| 例外の種類 | 対応方針 | 例 |
|---|---|---|
| ビジネス例外 | ユーザーに業務エラーとして通知する | 在庫不足、入力値の業務チェックエラー |
| システム例外 | システムエラー画面を表示し、運用者に通知する | データベース接続失敗、外部サービスのタイムアウト |
| 予期しない例外 | 汎用エラー画面を表示し、ログに記録する | NullPointerException 等のプログラムバグ |
例外処理を個々のメソッドで実装するのではなく、Spring MVC の @ControllerAdvice を使って共通的にハンドリングする方式が推奨されている。
メッセージ管理
画面に表示するメッセージ(エラーメッセージ、確認メッセージ等)は、プロパティファイル(messages.properties)で一元管理する。メッセージをコードに直接埋め込まず、メッセージ ID で管理することで、メッセージの修正や多言語対応が容易になる。
# messages.properties
e.order.0001=注文数量は1以上を入力してください。
e.order.0002=在庫が不足しています。商品コード: {0}
i.order.0001=注文を受け付けました。注文番号: {0}
SIer での使われ方
NTTデータ系案件での採用
TERASOLUNA は NTTデータが策定したガイドラインであるため、NTTデータおよびそのグループ会社が関わるプロジェクトでは事実上の標準として採用されている。プロジェクトの設計書や開発規約に「TERASOLUNA ガイドラインに準拠すること」と明記されていることも多い。
プロジェクト立ち上げ時の活用
新規プロジェクトの立ち上げ時に、TERASOLUNA のガイドラインを参考にしてプロジェクトの開発規約を策定することも多い。ゼロから規約を作るのではなく、実績のあるガイドラインをベースにカスタマイズすることで、規約策定の工数を削減できる。
他のガイドラインとの関係
TERASOLUNA 以外にも、SIer の現場で参照されるガイドラインとして以下がある。
- Macchinetta(マキネッタ): TERASOLUNA の後継的な位置づけで、NTTが策定。TERASOLUNA と内容は近いが、より最新の Spring バージョンに対応している
- 各社独自の開発標準: 大手 SIer は自社の開発標準を持っていることが多く、TERASOLUNA を参考にしつつ独自のルールを追加しているケースがある
まとめ
- TERASOLUNA は NTTデータが策定した Java 開発のベストプラクティスガイドラインであり、OSS として公開されている
- Spring Framework + MyBatis をベースにした推奨アーキテクチャを定義している
- レイヤードアーキテクチャ、共通例外処理、メッセージ管理など、大規模開発に必要な規約を網羅している
- NTTデータ系の案件ではほぼ必ず登場するため、SIer の新入社員は概要を把握しておくべきである
- プロジェクトの開発規約策定のベースとしても活用される実践的なガイドラインである