昨日西新宿のTISさんオフィスで開催された第二回Reactive System Meetup in 西新宿でSlick3について話してきました。
reactive-shinjuku.connpass.com
発表資料はこちらです。ところどころSlickディスになってしまい大変申しわけありませんでした。
www.slideshare.net
セッションでお話しさせていただいた通り、Slick3は単体で使ってもDBIO
によるモナディックなAPIを持った並列実行が可能なデータベースアクセスフレームワークに過ぎません。Slick3のどのへんがリアクティブなのかというと、個人的には以下の2点なのではないかと思っています。
- 戻り値を
Future
で扱うことができるのでリアクティブなシステムの一部にデータベースアクセスを組み込みやすい - ストリーム検索のための
DataPublisher
を他のReactive Streams実装と接続してバックプレッシャーを使うことができる
DBIO
によるモナディックなAPIは関数型プログラミングに慣れていないプログラマにとってはやはり敷居が高く、上記のようなメリットが出るケースでなければSlick3は逆に使いにくいフレームワークと見なされてしまう可能性もあります。Slickのタイプセーフなクエリは非常に強力かつ便利ですが、この点で採用しづらいというのはScalaQuery時代から使っているユーザとしては残念に感じる部分があります。
Konradさんに教えていただいたのですが、Slick関連のトピックとしてはSlick Extensionsのオープンソース化があります。これによって従来Typesafe社のサブスクリプションを購入しないと使えなかったOracle、DB2、MS SQLServerといった商用DB用のドライバが無料で使用できるようになります。すでにコードのマージ作業も始まっているようです。
さて、今回はAkkaのメイン開発者であるKonradさんのトークがメインセッションでした。Reactive Streams策定の経緯から、バックプレッシャーの概念、Akka Streams/Akka HTTPについてお話しされていたのですが、後半はSubscriberを停止するとPublisherの送信も止まり、Subscriberを再開すると受信側のTCPバッファが捌けたタイミングでPublisherの送信が再開されるというデモをされていました。非常にわかりやすいバックプレッシャーの動作例だったのではないかと思います。Yokotaさんのポイントを押さえた日本語解説も素晴らしかったです。
また、開始前に少し時間があったのでKonradさんと雑談をしていたのですが、昨年のScalaDaysでAkka Streamsについて少しだけ質問させていただいたのですが覚えてなかったようです。しょぼぼーん。今回はScalaパズルをプレゼントしてサインまで押し売りしておいたので、次に会った時ははじめましてとは言われないはず!!
週末のScalaMatsuriから続いたScalaイベントもこれで一段落です。主催のTISさん、お話しいただいたKonradさん、解説いただいたYokotaさん、そしてご参加いただいた皆様、ありがとうございました。