- なかやん・ゆーき / ぺんぎん / もみあげ
- @pocketberserker / id:pocketberserker
- Microsoft MVP for
F#.NET (2015/04/01~ 2016/03/31) - そういえば Scala でアプリケーション作ったことない…
- 何か作ろうとしてときに使ったライブラリ紹介
- http4s
- doobie
- scalaprops
- argonaut
- parboiled2
- scalajs-react
- (scalajs-dom)
- scajajs-ace
本当は最低限作り上げてから臨みたかったけど時間が全然たりませんでしたorz
Q. Scala といえば?
A. 乙女ゲーム
つまり…?
_人人人人人人人人人人人人人人人人人人人人_
> クイズ式プログラミング養成乙女ゲーム <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
もみあげよ…お前は何を言っているんだ…
いわゆるソーシャルゲームのクエスト部分がCodeIQのあれみたいなものになっただけ
- クエスト選択して
- 使用する言語選択して
- コード書いて
- gist からの import でもよさげ
- 送信ボタン押す
- 正解したらクエストクリア
- 不正解なら席に戻ってやり直し
- 正解不正解は Wandbox (オンラインコンパイルサービス)にコードを投げつければいいよね、とか
- DB使う
- サーバは Scalaz もしくは shapeless に依存するライブラリ縛り
- クライアントは ScalaJS 縛り
https://github.com/pocketberserker/my-lord
https://github.com/scalaz/scalaz
- 関数プログラミングのための Scala ライブラリ
- 便利な型をいろいろ提供している
- ScalaJS でも使える(!)
- (どーでもいい話)私はこのライブラリがなかったらScala触っていなかっただろう
https://github.com/scalaz/scalaz-stream
- ストリーミング IO ライブラリ
- 流れだよ!reactive で stream なんだよ!(錯乱)
- iteratee や iteratee スタイルのものを置き替えを目指す
- reactive-streams と競合してる気がするけどいったいどうなることやら…
ここで宣伝。
- https://gist.github.com/pocketberserker/566dd6cd3ed4c36c3486
- なお問題(と解答)が集まらなければ企画倒れするので皆さん問題考えてください
https://github.com/http4s/http4s
- "最小の慣用的な HTTP のための Scala インターフェース"
- Haskell の WAI, Ruby の Rack とかと同じようなやつ
- サーバは blaze, jetty, servlet, tomcat あたりをサポート
- argonaut, json4s, xml, twirl などもサポート
- 作っている人たちはたぶん猫派
- 非同期ぜんてーな作り
- それとなく Scalaz, scalaz-stream ちからが必要
昔に比べて機能は増えたが、oauth2 をまだサポートしてなかったりともう一息?
blaze というサーバを使って http4s のインターフェースを実装したもの。
- HTTP/2 をサポート
- http4sの実装が一番充実している
- blaze のクライアント実装
- argonaut <-> http4sのEntity を相互変換しやすくするためのパッケージ
- argonaut は後述
https://github.com/argonaut-io/argonaut
- Json ライブラリ
- scalaz./ がなんとなくわかれば使えるゆるふわライブラリ(?)
- 今回は Wandbox と通信するために必要だったので使った
(特に Json 使う理由がなければ msgpack4z つかったんじゃないかなぁ)
https://github.com/scalaprops/scalaprops
- property based testing のためのライブラリ
- 解説省略
- エンコーダ、デコーダ (や独自定義しようとしていた Parser) のテストに使用
https://github.com/sirthias/parboiled2
- マクロベース PEG パーサジェネレータ
- "parboiled2 is a Scala 2.10.3+ library enabling lightweight and easy-to-use, yet powerful, fast and elegant parsing of arbitrary input text."
- 様々な設定ファイルを解析するために使おうとしてた(もちろん間に合わなかった)
- コンパイル時間が Booooooost しないか心配ではある
https://github.com/tpolecat/doobie
- "pure functional JDBC layer"
- ORM ではない
- scalaz-stream を使って読み込む
- 読み込むデータによっては HList を使って変換をかけたりもする
http://tpolecat.github.io/doobie-0.2.2/04-Selecting.html
- パフォーマンスの話
take
くらいならLIMIT
を使えばいいという話もあるが、Process
は一般的に使えてパワフルだ
https://github.com/japgolly/scalajs-react
- 噂の React を ScalaJS 上で使うためのライブラリ
- いくつか独自の機能がある
- Scalaz や Monocle を使った拡張が存在する
- サンプル豊富
https://github.com/scalawarrior/scalajs-ace
- ScalaJS で Ace Editor 使うための static ラッパー
- ドキュメントがあまりないのでコードを眺めて気合で使おう!
- 非同期、非同期 IO は当たり前になりつつある(主観)
- ScalaJS はどうなんだろうなぁ
- ラッパー作るというのは TypeScript と同じで泥沼になるんじゃないかという予想
- エコシステム氏〜
- でも型安全からくる安心感はある
- Scalaz, shapeless 縛りしててもなんだかんだ何か作れなくはなさそうな世の中であるらしい