はじめに
Scalaの超軽量フレームワーク「Scalatra」上でMVC構造を構築するまでを解説します。
Scalatraだけでなく、Scalaは記事が少なすぎる。
タグを見るとわかるが、Scalatraに限って8です。
圧倒的少なさから入門もしにくいし、、、
そのせいで、普段はSwift,Go, Python, Rubyを書きますが、Scalaをやると非常に面白いが文献が少なかった。
なので今回はWebアプリケーション開発できるようにMVCを構築することから始めます。
ニーズ
自分は普段からRailsや、Django、Ginなどの「フルスタックフレームワーク」で開発をしたりしますが、MVC構造といってもあまりにも自由がないです。
Railsなんてブラックボックス化がひどいし、体験的なプログラミングをしてない気がします。
前提
本記事は以下のことを対象にしています。
- すでに
bst
などでビルトが済んでいる方
を対象にしています。
ディレクトリ構造
若干の違いはあるかもしれませんが、以下のようなディレクトリ構造をしているはずです。
src
├── main
│ ├── java
│ ├── resources
│ │ └── logback.xml
│ ├── scala
│ │ ├── ScalatraBootstrap.scala
│ │ └── com
│ │ └── example
│ │ └── app
│ │ └── ScalaServlet.scala
│ └── webapp
│ └── WEB-INF
│ └── web.xml
└── test
├── java
├── scala
│ └── com
│ └── example
│ └── app
│ └── MyScalatraServletTests.scala
└── scala-2.12
初心者な私には、どこに何を配置したらいいのかわからなかったのですが、Goのpackageを思いました。
Packageとは、名前空間と覚えればオッケイ。
つまり、MVCにするならばpackageで区切ればよくて、次の問題はどのように明示的にMVCであることを透明性を保ったまま構築できるかです。
もちろんapp以下に構築するのがいいかもしれません。
先程のディレクトリツリーを抜粋して以下のように変更します。
src
├── main
│ ├── java
│ ├── resources
│ │ └── logback.xml
│ ├── scala
│ │ ├── ScalatraBootstrap.scala
│ │ └── com
│ │ └── example
│ │ └── app
│ │ └── ScalaServlet.scala
│ │ └── view
│ │ └── controller
│ │ └── model
│ └── webapp
│ └── WEB-INF
│ └── web.xml
└── test
ScalaServlet.scala
を中心に、MVCを構築すると透明性の高く、開発しやすいのでおすすめです。