トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

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()
また,Redirect(URL)でリダイレクトさせられる.

routesの定義でいろいろ指定する
  • /:id とかすると idを変数で取り出せる
  • 指定しないで,メソッドに引数(たとえばid)がある場合?id=valueなパラメタを渡せる
  • ワイルドカードとか正規表現とかも使える
  • メソッドの引数を定数にしたり,デフォルト値をセットしたりもできる