Diary/2014-5-27
Playで遊んでみる
Scala+Play 2.0でWebアプリ開発入門を辿りながら.
- まずは,インストール
play-2.2.3をダウンロードして,/usr/local以下に展開して
export PATH=/usr/local/play-2.2.3:$PATH
でパス通した.
- 実行してみる
play new sampleApp
で,プロジェクトを作ったら,そのプロジェクトディレクトリに移動して,playコンソールを起動.
cd sampleApp play
プロンプトが表示されたら,
run
http://localhost:9000 にアクセスするとデフォルトページがみえる,と.
初回は結構時間がかかった.
playコンソールの表示みてると
[info] 'compiler-interface' not yet compiled for Scala 2.10.3. Compiling...
とかでてるから,別途Scalaいらないのかな?
- Eclipseプロジェクトにする
eclipse with-source=true
eclipsifyじゃなかった.がりがりと,いろんなものがダウンロードされる.
- Tepesafe Activatorでも試す
ホームページには,Best Choiseって書いてあるので,こっちも試してみる.
同じようにダウンロード,展開して/usr/localに移してパス通す.
activator new sampleApp2
とかすると,テンプレートを選ぶよう促されるので,hello-playを選ぶ.
で,
cd sampleApp2 activator
で,コンソールが起動してくる.
run
とすると同じように http://localhost:9000 でアクセスできるようになる.
- Eclipseで開発をする...前に
2.11用の環境を構築していたのだけど,Playがひっぱってきた2.10のJarでエラーがでる.
とりあえず,2.10のEclipse環境を用意.
↓のページの"For Scala 2.10.4"からScala IDE for Eclipseをインストール.
http://scala-ide.org/download/current.html
- Hello World的な
- Application.scalaの views.html.indexの引数を変更してみる
- views/index.scala.htmlの中身を変更してみる
views/index.scala.htmlが,views.html.indexとして見えている,とのこと.
- 動く仕組みについて
- コントローラ: conf/routesで,HTTPリクエストのパスとScalaコードが関連づけられる
GET / controllers.Application.index
と書いてあることで,/にアクセスするとcontrollers.Application.scalaのindexが実行される.
- モデル: Anormというデータアクセスライブラルを使う(まだ使ってない)
- ビュー: Scala templateを使うのがデフォルト.HTMLにScalaを埋め込める,というもの.
- プロジェクトの構成
Play 2.0 アプリの構造に説明があるとのこと.あとで読む.
- playのコマンド
runとかtestとかconsoleとか.consoleでreplが立ち上がる.
プロジェクトの設定を変更したらreload,依存ライブラリの更新チェック/ダウンロード/設定はupdate.
- Eclipseのデバッガとの連携
playコンソールをデバッグモードで起動.
play debug
Eclipseの"Debug as"→"Debug Configuration"でRemote Java Applicationなデバッグ設定を作る.
ホストはlocalhost,ポートは9999.9999は play debug を実行したときにターミナルに表示されてる.
Webページ(http://localhost:9000)にアクセスすると,
ブレークポイントにひっかかったところでEclipseがデバッグモードになる.
- Actionとは?
Actionは,"リクエストを処理してクライアントへ送るレスポンスを生成するためのクラス"らしい.
で,たとえば,Ok以外には↓のようなものがある.
ステータス | 関数 |
---|---|
200 OK | Ok() |
404 NofFound | NotFound() |
409 Conflict | Conflict() |
500 Internal Server Error | InternalServerError() |
- routesの定義でいろいろ指定する
- /:id とかすると idを変数で取り出せる
- 指定しないで,メソッドに引数(たとえばid)がある場合?id=valueなパラメタを渡せる
- ワイルドカードとか正規表現とかも使える
- メソッドの引数を定数にしたり,デフォルト値をセットしたりもできる