sohatach's blog

http://github.com/soha

Skinny Frameworkを使ってみる。その1

・作るアプリ

イベントとそのイベントへの参加者を管理するWebアプリ。
Atndもどきのようなものを目指す。

・データモデルの説明

 イベント(Event):タイトル、開始日時、終了日時を持つモデル。
 参加者(Member):名前、メールアドレスを持つモデル。
 イベント参加者:イベントID、参加者IDとの紐付けモデル。

イベント -<(1:n) イベント参加者 >-(n:1) 参加者
の関係。

・やったこと

1.プロジェクトの雛形ファイルとしてのブランクアプリのダウンロード

https://github.com/skinny-framework/skinny-framework/releases/download/1.0.14/skinny-blank-app-with-deps.zip
上記を展開して、フォルダ名をatumeruとリネームしました。


2.プロジェクトのIntelliJ IDEA化

プロジェクトフォルダ(ここではatumeru)に移動し、以下のコマンドを実行。

skinny idea

と.gitignoreへの.idea,*.imlの追加。(環境ファイルコミットするといろいろめんどいので除外する)
具体的には以下のコミット。
https://github.com/soha/atumeru/commit/4bb020be03cdbeac22d5220d32ee7c18ee1f1199


3.イベントモデル追加

scaffoldにより、イベントの登録更新削除可能な機能を自動生成する。
以下のコマンドを実行する。

skinny g scaffold events event title:String startDateTime:Option[DateTime] endDateTime:Option[DateTime]

skinny db:migrate

skinny runで起動し、ブラウザで http://localhost:8080/events にアクセスする。


4.メンバーモデル追加

こちらも同じくscaffoldにより、イベントの登録更新削除可能な機能を自動生成する。
以下のコマンドを実行する。

skinny g scaffold members member name:String email:String

skinny db:migrate

skinny runで起動し、ブラウザで http://localhost:8080/members にアクセスする。


5.イベント参加者モデル追加

skinny g scaffold eventMembers eventMember event_id:Long member_id:Long

(イベント参加者モデルは、リレーションモデルなのでscaffoldは冗長かも)

skinny db:migrate

skinny runで起動し、ブラウザで http://localhost:8080/event_members にアクセスする。
デフォルトでは、URLはスネークケースになる。EventMembersController参照。

このあたり、言語は違いますが、なにげにRailsチュートリアルの11章が凄く役に立ちました。考え方は同じかと。
http://railstutorial.jp/chapters/following-users?version=4.0#sec-the_relationship_model
今回は、モデル(イベント)とモデル(メンバー)の紐付けモデル(イベント参加者)。


6.scaffold成果物の確認

ここまででテスト通してみる。
自動生成しかしてないので通るはず。

テスト用DBの作成。

skinny db:migrate test

これをやっておかないとテストに失敗する。
続いてテストの実行。

skinny test

テスト結果

[info] Passed: Total 50, Failed 0, Errors 0, Passed 50
[success] Total time: 45 s, completed 2014/05/18 21:56:17

7.リレーションモデルの設定

scaffoldされた不要なファイルを削除し、
EventMemberモデルをリレーションモデル(SkinnyJoinTable)にする。
https://github.com/soha/atumeru/commit/fb931c393647c7c274a0563bb201bc5712f2ac22


8.ORMのテストクラス追加
https://github.com/soha/atumeru/commit/4e2b4511bf86aabbb751f8ac03ec944e2fa9f5b1
テストを動かしてみる。

skinny testOnly skinny.orm.SkinnyORMSpec

実行結果

[info] SkinnyORMSpec:
[info] EventMembers
[info] - should Event has Members
[info] Passed: Total 1, Failed 0, Errors 0, Passed 1
[success] Total time: 21 s, completed 2014/05/21 0:34:33


今日はここまで。
無駄なことやってるところあるかもしれませんが、
情報も少ないため、今後もとりあえず手探りでやってみる。
次はとりあえず画面からイベントと参加者を紐づけ登録できるようにしたい。