Scala on PlayでORMを使ってAPIサーバーを立てるまで

会社の研修でScalaを使ってAPIサーバーを立てることがあったので、これをするに際して触れた文献を時系列順に紹介していきます。

学習前の自分は「複数言語でAPIサーバーを開発・運用した経験はあるものの、Scalaは趣味で勉強しかしていない」というステータスでした。
これに近しい方の学習の参考になれば幸いです。

環境構築についても簡単に書いてます。



Scalaについての事前学習

100円のKindle本です。

若干文法が古いのかな?でも1箇所にまとまった情報を使って昔の学習を思い出したかったので購入しました。

※ owndの規約かなにかでamazonのリンクを貼れなかったのでkindle本のもとになった連載を貼っておきます

RailsやsinatraでAPIサーバーを組むことも多かったので、そこらとの違いをさっと確認するために役立ちました。



Playに関する事前学習

scalaのフルスタックWEBフレームワークです。

これも情報が古かったんですが、大枠確認するためにさっと流し読みをしました。


SQL直書きですがscala on playでAPIサーバーを構築するサンプルがあったので、これもあらかじめさらっと読みました。



ORM「slick」についての事前学習

scalaのORM slickとPlayFrameworkの連携についてのサンプルです。


ScalaのORM「Slick」でいろんなSQLを投げてみる | mwSoft

SlickはScalaのCollection操作っぽい記述でDBにSQLを投げることができる。 どう書くとどういったSQLが投げられるのかは普通に使ってるだけだとイマイチわからないので。よく使いそうな記述とそれによって生成されるSQLについてまとめてみる。 SQLは改行を入れたりエスケープ文字を消したりして、多少見やすくしてます。SLick1.0.1を使ってますが、ざっと見た感じでは2.0.0-RC1でもほとんど変わらない。 実行クエリはH2に対して TRACE_LEVEL_SYSTEM_OUT=2 を指定することで、H2が受け取ったクエリを標準出力させている。DBによって多少の出力クエリの違いはあると思われる。 ID, 名前, 値段, サイズ, 砂糖の有無が設定できる coffees というテーブルを作成し、これに対してクエリを投げることにする。 17行目で、ddl.create してるので、これを実行すると、下記のようなクエリが実行されます。 普通に全部検索してみる。 list とか head とか headOptionは implicit な Sessionを引数に取る。ので、withSession のところで implicit Session をもらうようにしている。 で、この子を実行すると下記のようなクエリが実行される。 ORMだとあまり使うことはないけど、パフォーマンス考えてid と nameだけ取ろうとかした場合は下記のように書ける。 mapを使った場合と、forを使った場合、2通りの書きかたがある。 id(Int) と name(String) が取得値として設定されているので、戻り値の型は List[(Int, String)]になる。 これを実行すると下記のようなクエリになる。 id が 1 のレコードだけ取得する。=== でも is でも意味は同じ。 出力されたSQL。 isNot や =!= でNOT条件が付く。 結果。NOT( 条件 ) という形になるらしい。 ANDで複数の条件を重ねてみる。あと、ついでにLIKEも使ってみる。priceが500円以下で、nameがiceで始まるレコードを取得する場合。 forの方の条件は && にしても良いけど、なんとかくif ifと重ねている。filterの方も同じよ

www.mwsoft.jp

slickがどんなSQL吐いてるのかわからないと気持ち悪くて使えなかったので調べました。


詳しく書かれていて超勉強になるので、英語が大丈夫ならおすすめです!



環境構築

以下を実行しました。(雑)

- JDE
- homebrew
- brew install scala
- brew install mysql
- brew install typesafe-activator
- intelliJ
- activate new
- intelliJに生成されたディレクトリをimport



いよいよ実装

詳しく解説もしていただけていたので、ありがたくこれを骨組みとして使わせていただきました。


POSTされたJSONのパースについてはこちらを参考にしました。



つまづいたところを解消できた文献



以上

浅くAPIサーバーを実装してみました。

本当はコップ本などでしっかり学習したほうがいいのかもですが、今回は上記までで一応事足りたのでまたの機会に。

scala楽しいですね、これからも使っていきたいです。

飼い猫の名前はねこさん

100歩譲って君の横的なライ縦ライ横ライ斜めからの電光石火でもう一杯

0コメント

  • 1000 / 1000