投稿日:

Play Framewrok / Scala、初めました。


Play Framework / Scala 初めました。(*’-‘*)

2.3 系です(たぶん大事)。最初なので色々と細かなところで躓いています。主だったドキュメントに記載の無いようなこともあったりしましたので、この記事に備忘録的な感じで記録しておきます。
なお、この記事はしばらくは覚えた事を少しずつ追記しますー。

イケメン達の集まるチャット

まず、右も左も分からない時に、コチラ(https://gitter.im/scalajp/public)のチャットを教えていただきました。どうやら Scala 界のイケメン達が集まるチャットで、恐る恐る参加してみたのですが、優しく手取り足取り助けていただきました! Scala エキスパートの方はもちろん、初心者の方も是非参加してみてくださいー。

誘っていただいた @kawachi さん、ありがとう!

Implicit は最初に抑えておく

Play Framework / Scala …というか Scala かも知れませんが、これらのプログラムを書くなら、implicit(インプリシット)の概念は抑えておきましょう。他の概念は、他言語の経験があるとある程度は理解できるのですが、これはダメだと思います。暗黙の方変換はまだしも、暗黙の引数はまるで魔法です。呼び出し側で引数を渡していなくても、呼び出し側のスコープに一致する型があればそれが渡された事になる感じです。恐ろしい…って最初思いました。これらは抑えておかないと、サンプルコード読むのもおぼつかないです。

悪い事は言いません、頑張って最初のうちに理解しておきまよう。

URLの逆引き(リバースルーティング)

例えば controllers.MyController.myAction() に対してルーティング設定したURLは、次のようにして逆引き出来ます。

これは https://www.playframework.com/documentation/ja/2.1.x/ScalaRouting#リバースルーティング にも書かれています。

ところが、例えばコントローラを controllers.myPackage.MyController.myAction() みたいな感じでパッケージで分けて整理した時に、routes.myPackage.MyController.myAction() になるかと思いきや、「そんなものは無いよ」と怒られてハマりました。

この場合の正解は次の通りです。

最初の例で、routes.MyContro… と書いていますが、これが要は controllers.routes.MyContro… が省略されたものだったということですね! こちら教えていただいたのは、@kawachi さん、アザリガトゴザマス…(`;ω;´)モワッ

なお、ちょっとした注意点かも?な情報ですが、IntelliJ IDEA 上で、controllers.myPackcage.routes を指定してみたところ、IntelliJさんから「それ、無いぜ」と言われたんですが、IntelliJ さん無視して書き上げて実行してみたら、ちゃんと動作しました。その後はIntelliJさんも、無いとか言わなくなりました。そういうこともあるみたいですね!(*’-‘*)

その他、@tototoshi さんから、次のようなアドバイスを頂きました! なるほど!

routes は Play が Scala(or Java) に変換しているので、ハマったら target/scala-2.11/src_managed/main/controllers/ 以下にある実際に生成されたコードを見るとよいです。

Play 2.3 で MySQL を使う

Play Framework はバージョン毎に設定方法がだいぶ異なるみたいで、見つかる情報〜見つかる情報が全部少しずつ違ってて、自分のバージョンに合った情報を探すのに苦労しました。ということで、Play 2.3 では次のようにして使えました。

  1. まず conf/application.conf の Database configuration のセセクションに次のように設定します。(参考: https://www.playframework.com/documentation/2.3.x/ScalaDatabase
  2. 次にドライバが入っていないので、build.sbt を開いて依存ライブラリに MySQL のドライバを追加。次のコードの6行目です。

以上です。大した情報じゃないですが!(;゚∀゚)

追記予定…

コメントを残す