初心者の方にこそすすめたい ScalikeJDBC #play_kb
#play_kb
「PlayFramework関西ビギナーズ 第2回 #play_kb」という Play Framework 初心者の方向けの勉強会が行われているようです。素晴らしいですね。
http://www.zusaar.com/event/891003
東京で Scala 界隈の方にお会いすると、名前くらいは知っていただけていることも増えてきましたが、それは地域限定の話で、まだまだ知名度が低いようです。
ScalikeJDBC も選択肢に加えてあげてください! #play_kb
— がくぞ (@gakuzzzz) August 3, 2013
ScalikeJDBC はまだまだ知名度が足りないですね。たぶん初心者の人はこっちの方が楽ですよ。 #play_kb
— Kazuhiro Sera (@seratch) August 3, 2013
@seratch SlickもSquerylもSQLをコレクションライブラリ的に見せてSQLをできるだけ隠蔽するものだから、SQLに慣れてるならScalikeJDBCの方が楽でしょうね。#play_kb
— Kota Mizushima (@kmizu) August 3, 2013
ScalikeJDBC とは
上記の @kmizu さんの説明の通り、いかに効率的に SQL を記述するかを目指して開発している DB アクセスライブラリです。
SQL を直接書くと嫌なことっていくつかありますね。例えば、文字列で書かれた SQL はタイプセーフじゃないとか join クエリを書くのが DRY じゃなくて面倒くさすぎる・メンテできないとかそういった問題です。
ScalikeJDBC も Scala 2.9 時代には Anorm と同様にそういうウィークポイントがあったのですが Scala 2.10 から入った String Interpoaltion を使って、そういった問題をクリアしています。詳しくはこちらをご覧ください。
http://seratch.hatenablog.jp/entry/2013/02/28/220754
SQLInterpolation はいざとなれば SQL を書けるという意味で有用ですが、やはり Interpolation で書いていると SQLSyntax の部分以外はタイプセーフでなく、また、見た目もちょっとごちゃつく感じはあります。
それを解決するために 1.6.0 から QueryDSL という新しい API を提供しています。これについてもブログに書いています。こちらをご覧ください。
http://seratch.hatenablog.jp/entry/2013/05/12/001057
初心者の方に向いている 3 つの理由
必要な前提知識が少ない
「for 式ってよくわからないんだけど・・」という状態でも大丈夫です。最低限の SQL の知識がある方ならすぐにコードを書き始められるはずですし、実際そういう声をよくいただいています。それ以外には implicit parameter さえ理解していればまずは十分です。
http://www.ne.jp/asahi/hishidama/home/tech/scala/def.html#h_implicit_parameter
日本語情報が多い、日本語で質問できる ML もある
日本で開発されているので、日本語の情報が充実しています。ガラパゴス化するのは避けたいので、オフィシャルな場は全て英語でコミュニケーションすることにしていますが、日本語の情報を増やすことには今後も取り組むつもりです。
また、日本語で質問できる ML もあります。こちらもぜひ活用してください。
https://groups.google.com/forum/#!forum/scalikejdbc-users-group-ja
コードの自動生成がある
mapper-generator という sbt プラグインを使えば、既存の DB に対応する Scala コードを自動生成できます。プロダクトコードだけでなく対になるテストも生成されます(specs2、ScalaTest を選択可能)。生成したコードをサンプルにしながら、書き方を学んでいくことができます。
https://github.com/seratch/scalikejdbc/wiki/Generating-Models
早速、試してみる
最近 Typesafe 社が提供している Activator という仕組みがあります。簡単にプロジェクトのひな形とちょっとしたチュートリアルをダウンロードして、すぐに試せるようにするための仕組みです。
ScalikeJDBC もチュートリアルを提供しています。4 つのテーブルを使った model の実装と Play2 で書かれた JSON API サーバのサンプルです。早速試してみたいという方はまずはこちらを触ってみてください。
http://seratch.hatenablog.jp/entry/2013/07/02/005454
http://typesafe.com/activator/template/scalikejdbc-activator-template
Activator 経由ではなく直接ダウンロードする場合はこちらです。
https://github.com/seratch/hello-scalikejdbc
その他、参考情報
まずはこの辺を見ていただければと思います。
Wiki
https://github.com/seratch/scalikejdbc/wiki
ScalikeJDBC Users Group
https://groups.google.com/group/scalikejdbc-users-group
ScalikeJDBC Users Group Japan
https://groups.google.com/group/scalikejdbc-users-group-ja
ScalikeJDBC-Async
最近 non-blocking な API を提供する拡張をリリースしました(PostgreSQL、MySQL のみ対応)。そういうニーズのあるアプリケーションを書く時も ScalikeJDBC を使うことが出来ます。
http://seratch.hatenablog.jp/entry/2013/07/30/234630
何を使うべきか
今のところ Slick と Squeryl が人気のあるライブラリです。
http://seratch.hatenablog.jp/entry/2013/06/27/001256
特に Slick が Typesafe Stack 標準ということで「これからやるなら Slick でコードを書いてみたい」という方も多いのではないかと思います。Slick を使いこなせて、かつ、特に不便も感じないという方はそのまま Slick を使うのが良いと思います。もし「これとはちょっと違った方向のもので使いやすいものないかな?」と思ったときは ScalikeJDBC を試してみてください。