kekeのアトリエ

エンジニア、読書@1915keke

ScalaでMVCを構築する手順

はじめに

Scalaの超軽量フレームワーク「Scalatra」上でMVC構造を構築するまでを解説します。 Scalatraだけでなく、Scalaは記事が少なすぎる

タグを見るとわかるが、Scalatraに限って8です。

image.png

圧倒的少なさから入門もしにくいし、、、 そのせいで、普段は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を構築すると透明性の高く、開発しやすいのでおすすめです。