!Playで遊んでみる [Scala+Play 2.0でWebアプリ開発入門|http://www.atmarkit.co.jp/ait/articles/1210/26/news018.html]を辿りながら. ::まずは,インストール 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 アプリの構造|http://playdocja.appspot.com/documentation/2.0.3/Anatomy]に説明があるとのこと.あとで読む. ::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なパラメタを渡せる * ワイルドカードとか正規表現とかも使える * メソッドの引数を定数にしたり,デフォルト値をセットしたりもできる