Webアプリケーションの構成
とりあえずWebアプリケーションの作成から公開、デプロイまでを一通り頭に入れたところで、作成したWebアプリケーションについてもう少し詳しく見ていくことにしましょう。今作った「gapp」フォルダの中を見てください。中には次のようなフォルダ類が作成されています。
フォルダ名 | 説明 |
grails-app | Grailsのアプリケーションの中心となるところです。この中にさまざまな役割を果たすスクリプトファイルを作成していくことで、Grailsアプリケーションを作ります。 |
lib | ライブラリファイルを保管する場所です。 |
scripts | スクリプトファイルを保管する場所です。 |
src | ソースコードファイルの保管場所です。中には、JavaとGroovyのそれぞれのソースコードを保管するためのフォルダが用意されています。 |
test | ユニットテストを実行するためのファイルを作成する場所です。 |
web-app | Webアプリケーションの主に静的ファイルを配置する場所です。 |
この中で、私たちに直接関係があるのは、「grails-app」と「web-app」でしょう。静的ファイルなど(Grailsを利用しない)一般的なWeb関連ファイルを作成する場合にはweb-app、Grailsによるプログラムを作成するにはgrails-appに、それぞれファイルを作成配置しなければいけません。まずは、これらの使い方を覚える必要があるでしょう。
grails-appのディレクトリ構成
Grailsアプリケーションの中心となる「grails-app」は、その中にさらにいくつものフォルダが用意されています。それらにファイルを作成してWebアプリケーションを作っていきます。では、このgrails-app内に用意されているフォルダ類について説明しておきましょう。
フォルダ名 | 説明 |
conf | 各種設定ファイルが保管されます。 |
controllers | 「コントローラー」と呼ばれる、アプリケーションの制御を行うためのプログラムが配置されます。 |
domain | 一般に「モデル」と呼ばれる、データベースプログラムとのやり取りを行うためのプログラム(ドメインクラス)が配置されます。 |
i18n | 他国語対応のための各国語向けローカライズデータが配置されます。 |
services | アプリケーション全体で機能する「サービス」と呼ばれるプログラムを配置するためのものです。 |
taglib | タグライブラリを用意するためのものです。 |
utils | ユーティリティプログラムを配置するところです。 |
views | 「ビュー」と呼ばれる、画面表示のためのファイルを配置するところです。 |
これらの中でも特に重要なのは「controllers」「domain」「views」の3つでしょう。これらは、Grailsの土台となる「MVCモデル」と呼ばれるアプリケーションアーキテクチャーと関連するものです。
MVCについて
既に「MVC」という言葉はかなり広く浸透していますので改めて説明する必要はあまりないでしょうが、簡単に整理しておきましょう。
MVCとは「Model(モデル)」「View(ビュー)」「Controller(コントローラー)」の略です。これは、プログラムをこの3つの要素に分けて作成していこう、という考え方です。それぞれは、次のような役割を果たします。
- Model
データ管理を行うものです。データベースとのやり取りを行ったり、データの関連や構造、振る舞いなどを管理します。 - View
表示を行うためのものです。必要な情報などを具体的な表示として画面に展開し出力する処理を担当します。 - Controller
プログラムの制御を行うものです。外部からの要求などを受け取り、その要求に応じた処理を実行します。必要に応じてModelやViewを呼び出すのもControllerの役割です。
多くのアプリケーションは、大体このMVCの3つに機能を分類して作成することができます。特にWebアプリケーションでは、このMVCのスタイルが非常になじむのです。Webでは、画面の表示はブラウザにHTMLのソースコードを出力して行います。「ページの表示→サーバに送信→サーバで処理→ブラウザに結果を表示」というように、Webの仕組みそのものが表示と処理を分離して設計するのに適しています。
が、これまでのJSPやサーブレットでの開発を思い返してみると、必ずしもそうなっていなかった、という部分がありませんか? JSPの中に、ビジネスロジックと表示をまとめて作成していたり。JSPは、両者を混在して書くことが可能であったため、Web開発のビギナーにとっては、あまり深く考えずにプログラムが書ける=ビューもコントローラーもごちゃごちゃな状態のプログラムが出来上がる、といったことになりがちでした。MVCフレームワークの導入により、こうした混在をなくし、きれいに両者を分けて作成することができるようになります。
「たった1ページの表示でも、制御と表示の2つをいちいち書かないといけないの?」と思った人。そのとおり! たった1ページ、ただ表示するだけの画面でも、制御と表示の2つを用意しなければいけません。とはいえ、ただ表示するだけであれば制御部分には何も処理を用意する必要はありませんし、それは思ったほど大変なものでもないので心配は無用です。