はじめに
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を構築すると透明性の高く、開発しやすいのでおすすめです。