Skinny Tutorial #1 試し書き(1)
さっそくRails Tutorialの第1章をはじめるべきなのですが、環境構築にまだとりかかれていないので、そちらにはあらためて時間を割くことにして、第2章のデモアプリケーションを試してみたいと思います。
はじめに
現時点での学習環境をメモしておきましょう。
サンプルプロジェクトの導入
第2章の目的は、scaffoldジェネレータの機能を紹介すること、RESTアーキテクチャにおけるWebプログラミングの手法を学ぶこととありますので、本稿でもSkinny Frameworkのscaffoldコマンドを実行してみます。
Skinny Frameworkの導入は、公開されている依存ライブラリ同梱済みのサンプルプロジェクトを利用することとし、sbtの設定なども初期値をそのまま使用します。
バージョン管理も省略しますので、gitへのパブリッシュは行いません。
デモアプリケーションの要件
チュートリアル第2章の課題は、ユーザ(User)がごく短い記事(Micropost)を投稿できるマイクロブログです。必要なモデリングは例題のものにならうとして、scaffoldジェネレータを利用したUserリソースの作成にとりかかります。
公式ドキュメントによれば、Skinnyのコマンドラインツールからscaffoldジェネレータ・スクリプトを起動するさい、次のパラメータが必要となるようです。
skinny g scaffold:[Viewテンプレート] [リソース名(複数)] [リソース名(単一)] [フィールド名:フィールドの型(オプションでDB上の型)]
Viewテンプレートの指定は、Skinnyのビュー層を担うScalateが複数のテンプレートに対応しているために存在している項目でしょう。ここではデフォルトのSSPを使います。
Userモデルは名前とメールアドレスを持つとありますので、scaffoldジェネレータの引数は次のようになりました。Skinnyでは、リソース名はキャメルケースで記述する必要があるようです。
skinny g scaffold users user name:String email:String
実行結果はこのようになりました。
[info] Running TaskRunner generate:scaffold users user name:String email:String *** Skinny Generator Task *** "src\main\scala\controller\ApplicationController.scala" skipped. "src\main\scala\controller\UsersController.scala" created. "src\main\scala\controller\Controllers.scala" modified. "src\test\scala\controller\UsersControllerSpec.scala" created. "src\test\scala\integrationtest\UsersController_IntegrationTestSpec.scala" created. "src\test\resources\factories.conf" modified. "src\main\scala\model\User.scala" created. "src\test\scala\model\UserSpec.scala" created. "src\main\webapp\WEB-INF\views\users\_form.html.ssp" created. "src\main\webapp\WEB-INF\views\users\new.html.ssp" created. "src\main\webapp\WEB-INF\views\users\edit.html.ssp" created. "src\main\webapp\WEB-INF\views\users\index.html.ssp" created. "src\main\webapp\WEB-INF\views\users\show.html.ssp" created. "src\main\resources\messages.conf" modified. "src\main\resources\db\migration\V20150906221545__Create_users_table.sql" created. [success] Total time: 45 s, completed 2015/09/06 22:15:47 C:\dev\stutorials>
Railsのログと見比べてみると、SkinnyではAsset関連のファイルは生成されないようですが、これはデフォルトでフロントエンドのロジックをBootstrapに任せているためでしょうか?
テストクラスも自動生成されています。
次に、アプリケーションを起動して確認するために、さくさくとmigrateも実行してしまいます。
skinny db:migrate
自動的にdb/migration/以下のフォルダにあるsqlファイルが読み込まれ、既定のH2データベースにテーブルが作成されました。
(つづく)