twitterを支えるfinatraを使ってみた
finatra
finatra(https://twitter.github.io/finatra/)はSinatraからアイデアを得て、twitterSeverを使って作られたScalaベースのwebフレームワークです。この記事を書いた時点で、最新のバージョンは2.0
です。
Hello World
finatraのリポジトリ(https://github.com/twitter/finatra)にあるexamples/finatra-hello-world
を使います。
README.md
には既に詳しいディプロイ方法が載ってありますが、起動方法は下記のコマンドを叩く:
portを変える
このプロジェクトはデフォルトに8888
(フロント)と9990
(内部用)を使っていますが、もしいずれかのport
は既に他のアプリに使われたりしたら、エラーがでます。port
を変えるには、run
の後ろに、-http.port=:1212
(フロント)、-admin.port=:9911
(内部用)というオプションを追加してください。
ブラウザを開いて、http://localhost:8888/hi?name=Worldにアクセスすると
ServerとControllerをつくてみる
先ほどのHello Worldプロジェクトでは、既にHelloWorldSever
とHelloWorldController
が
用意されたので、特に何もしなくてもサイトとして動きます。これから、自分でServerとControllerを作ってみます:
Server
./src/main/scala/jp/co/befool/bii
にBiiServer.scala
を作成します。
この記事のコードがパッケージ
jp.co.befool.bii
にあります。パッケージというコンセプトが分かる方は、自分好きなパッケージにしても大丈夫です。
Controller
./src/main/scala/jp/co/befool/bii/controller/RootController.scala
を作成します:
BiiServer
からRootController
にルートします:
コマンドsbt run
すると
サーバーが二つ検出されたので、どっちを実行するかという質問です。2
で入力します。問題なければ、ブラウザでhttp://localhost:8888
で見ると:
サーバーちゃんと動いています。
RequestのValidationをやってみます
先ほど作ったRootController
の直前に、RootRequest
を作成します:
RootController
のget("/")
ルートに修正を入れます:
request
のタイプを先ほど作ったRootRequest
に宣言します。
sbt run
して、ブラウザでhttp://localhost:8888
にアクセスして、下記のエラーが表示されます:
URLをhttp://localhost:8888/?name=世界
にして、アクセスすると:
Request
のバリデーション動いてるとわかりますね。
まとめ
finatraに興味ある方は、より詳しい説明と使い方が公式のリポジトリに載っています:https://github.com/twitter/finatra/blob/master/http/README.md。
オープンソースのwebフレームワークとしては、finatraのドキュメントなどはまだ不足してる感じがします。しかし、twitterという超大手なweb企業が使ってるというとこが、魅力を感じる人もいるでしょう(自分はそうでした)。次回はfinatra
を利用してアプリのバックエンドを作ってみようと思います。