はじめに
sprayってなあに?
sprayはscalaのwebフレームワークです。
「akkaベースで速くて軽いぜ」と唱っています。
sprayのライブラリ
sprayはいくつかのライブラリで構成されています。
sprayのドキュメントに詳しい説明があります。
webサービスを作るのに、全てを使う必要はありません。
自分の作りたいものにフィットしたライブラリを適宜使います。
- spray-cachingAkkaのFutureと
concurrentlinkedhashmap
を使った軽くて高速なインメモリ・キャッシュを提供 -
spray-canspray-ioをベースとした、低次元&低オーバーヘッドなハイ・パフォーマンスなHTTPサーバとクライアントを提供
(完全非同期、ノンブロッキング) - spray-client高次元HTTPクライアントを提供。ベースはspray-can。
- spray-httpHTTPリクエストやHTTPレスポンスなどのHTTP構造体を提供。
- spray-httpxHTTPメッセージに関する高次ロジックを提供。
※spray-routingやspray-clientに依存していない。 - spray-io低次元ネットワークI/Oレイヤーを提供。非同期でJava NIOソケットに接続する。
これがベース。 - spray-routingハイレベルでとてもフレキシブルなルーティングDSLを提供。
※後述しますが、Freeモナドの結集体 - spray-servletサーブレット上にspray-canのインターフェイスを提供。
※sprayをサーブレット・コンテナで動かすときはこれ使います。 - spray-testkitsprayのテスト・キット。
actorに依存しないテストを書くことができる。
spray-util
いろいろユーティリティ。
これらのライブラリを組み合わせてアプリケーションをつくります。
sprayのソースコード
Githubにあります。
https://github.com/spray/spray
ドキュメントはこちら。
http://spray.io/documentation/1.2.1/
必要なもの
sprayでつくったWebサービスを動かすために、下記をインストールしておく必要があります。
- JDK (>=1.6 ※現時点でscalaがサポートしているのは1.6なので、敢えて1.7や1.8を使う必要はありません。)
- sbt (gradleでも可。お好みの方で)
またIDEを使うと開発がしやすいです。
わたしはIntelliJ(Community版)を使っています。
サンプルを動かしてみる
JDKやsbtをインストールしたら早速動かします。
Githubのsprayリポジトリにはサンプル・コードがあります。
これは実際のプロジェクトを作成する上でもテンプレートになりますので、持ってきて実行してみます。
https://github.com/spray/spray/tree/master/examples
ここで、spray-canとspray-routingのどちらを使えば良いのか迷います。
sprayのドキュメントを読むと、
- spray-can・・・プリミティブなHTTPレイヤー機能を提供
- spray-routing・・・spray-can + 高機能なルーティング機能
のようなので、エンドポイントが少ないサービスだったらspray-canを使っても良いのかもしれません。
ここでは、’Webサービス’をつくりたいのでエンドポイントがある程度多いことを予想してspray-routingを使います。
git clone git://github.com/spray/spray.git cd spray sbt "project simple-routing-app" run
PermGenErrorが出る場合
sbt appears to be exiting abnormally. The log file for this session is at /var/folders/1t/d9_8ydjd73v7qqpppm8tch8c79n593/T/sbt695834379471927656.log java.lang.OutOfMemoryError: PermGen space Error during sbt execution: java.lang.OutOfMemoryError: PermGen space
このようなエラーが出たら、sbt実行ファイルに
-XX:PermSize=128M -XX:MaxPermSize=128M
を追加してあげます。
vi sbt ~ #!/bin/sh test -f ~/.sbtconfig && . ~/.sbtconfig exec java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.13.5/libexec/sbt-launch.jar "$@" ↓ exec java -Xms512M -Xmx1536M -XX:PermSize=128M -XX:MaxPermSize=128M -Xss1M -XX:+CMSClassUnloadingEnabled ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.13.5/libexec/sbt-launch.jar "$@" ~
これで動きました。
curlやブラウザで
http://127.0.0.1:8080/
を実行してみます。
応答が返ってくるのがわかります。
次回はこのサンプルをテンプレートとしてWebサービスを作成していきます。