Skinny Tutorial #3 机上のクーロン(1)
ほぼ静的なページ
移動中に時間が取れそうなので、机上でのシミュレーションになりますが、第3章へトライしていきましょう。 実際のアプリケーションでの動作確認も、もちろん追記していきますよ!
あたらしいプロジェクトを用意して、まずは静的なページのコントローラからです。 チュートリアルではgenerateスクリプトを活用していますが、せっかくなのでいちから書いてみることにします。 わたしはキーボードをタイプするのが好きなのです。
/* ---- StaticPagesController.scala */ class StaticPagesController extends ApplicationController { def home = render("staticpages/home") def help = render("staticpages/help") } /* ---- Controllers.scala */ object Controllers { def mount(ctx: SkinnyContext): Unit = { root.mount(ctx) staticPages.mount(ctx) // 追加 ... } ... object staticPages extends StaticPagesController with Routes { val homeUrl = get("/staticpages/home")(home).as('home) val helpUrl = get("/staticpages/help")(help).as('help) } }
一つめのStaticPagesController
が、静的なページたちに対応するコントローラ本体で、実行するアクションを定義しているクラスです。render
メソッドは、指定した位置にあるViewテンプレートを描画する指示を行っています。
二つめのControllers
は、サンプルアプリケーションにも最初から用意されているオブジェクトで、各コントローラを、リクエストの種類(HTTPメソッドの種類)と要求されたURLから構成されるルーティングに対応させる役割を持っています。
Scalatraのサーブレット/フィルタをラップしたもので、最下部のstaticPages
オブジェクトがルートに対してアクションの解決を行っています。
val homeUrl = get("/staticpages/home")(home).as('home)
getメソッドは、リクエストがHTTPのGETメソッドで送信された場合のルーティング定義であることを表します。第1引数の文字列がマッチさせるためのURLパターン、第2引数でスーパークラスのアクションメソッドを引き渡しています。最後に、Skinny独自の処理として、ルーティング全体をシンボルで識別できるようにしています。
このコードでは、コントローラをインスタンス化するさいにコントローラクラスを継承したシングルトンのかたちをとっていますが、Skinny Frameworkの公式ドキュメントには、コントローラを直接new
でインスタンス化し、Routes
トレイトをミックスインしたval
として用意する例も紹介されています。
これでviewテンプレートさえ用意すれば、静的なページを表示できるようになりました。
思いのほか時間をかけてしまったので、シミュレーションの続きと動作確認は次回としましょう。 テストの書き方も、早く実践してみたいですね。
(続く)