2013-12-30

IntelliJ IDEA 13のCloudBees対応

IDEAにはCloudBeesサポートプラグインが存在するけど、IDEAが13になって12のために書かれたプラグインの解説文書が通用しなくなっている。(よくわかってないだけかもしれないけど)

デプロイのためのwar作成設定が正しく働かない。
出力先のディレクトリを指定しても、その前に別のディレクトリ(ローカルのTomcat?)を付加されて、warの作成でエラーになってしまう。

デプロイしてのテストが出来ないので、動作手前まではローカルでplayのコマンドでビルドし、デプロイはCloudBeesのSDKを用いるのがとりあえずの次善策か。

追記:
出力先のディレクトリを作っておけば、エラー無くデプロイ操作が終わりました。が、warが作られた形跡がない・・・。
CloudBeesのGitリポジトリにPushして、Jenkinsでビルド・デプロイさせることも試したけど、ビルドはできてもデプロイできない・・・・。
デプロイの設定でaccountに何も設定できないのが原因か?
なにか設定できるようにできればいいんだろうけど。

追記2:
Jenkinsのシステム設定で、CloudBeesのアカウント設定ができた。
CloudBeesのJenkinsなのだから、デフォルトでアカウント設定を登録しておいてくれればいいのに。

2013-12-23

Play + Scala + Slick

PlayのDAOは、2.2まではAnormを使用するのが標準ですが、2.3からSlickに変わるらしい。
また、AnormはSQLをそのまま記述することを基本としているので、ORMに慣れきった僕にはORMであるSlickのほうが楽そうってことで、Slickを使うようにプロジェクトの設定を変更する。

参考にしたのはこの記事。

Playの初歩とSlickAdd Star

PlayFrameworkerのisobeです。Scala面白いです。

Play使い始めてしばらくDAO周りでAnormを使ってたのですがノーテーションが冗長すぎて辛いのでSlick(旧ScalaQuery)に乗り換えました。今最新のPlay2.2を使ってるのですが次期2.3では標準ORM(というかDAO)がAnormからSlickに置き変わる予定だそうです。(ってことをSlick使い始めてから知りました)

ライブラリの設定をbuild.sbtにしますが、とりあえず丸パクリ。
libraryDependencies ++= Seq(
  jdbc,
  anorm,
  cache,
  "mysql" % "mysql-connector-java" % "5.1.18",
  "com.typesafe.slick" %% "slick" % "1.0.1",
  "com.typesafe.play" %% "play-slick" % "0.5.0.8",
  "commons-dbcp" % "commons-dbcp" % "1.4")
コネクションの設定はapplication.confですが、こちらは接続先がCloudBeesのDBになるので、CloudBees側の設定に合わせて以下の感じ。
slick.default="models.*"
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:"${MYSQL_URL_MYDB}
db.default.user=${MYSQL_USERNAME_MYDB}
db.default.password=${MYSQL_PASSWORD_MYDB}

あとは、モデル作ってテーブルの生成やらなんやら試そうかってところだけど、IDEAの機能で作ったPlayのプロジェクトがなんか色々微妙な模様。
雛形として形はできているけど、ディレクトリの意味付けがついてないし、新規にScalaオブジェクトを作れる状態じゃなかった。
初期設定的にまずかったのか、機能が不完全なのか不明。
とりあえず、CloudBeesで作られたgitリポジトリからPlayの初期プロジェクトをcloneして、play ideaして使えば大丈夫みたい。

というわけで、application.confの変更は不要になり、build.sbtの代わりにBuild.scalaを編集。
import sbt._
import Keys._
import play.Project._

object ApplicationBuild extends Build {

    val appName         = "playsignage"
    val appVersion      = "1.0"

    val appDependencies = Seq(
      // Add your project dependencies here,
      "mysql" % "mysql-connector-java" % "5.1.21",jdbc, anorm,
      cache,
      "com.typesafe.slick" %% "slick" % "1.0.1",
      "com.typesafe.play" %% "play-slick" % "0.5.0.8",
      "org.slf4j" % "slf4j-nop" % "1.6.4",
      "commons-dbcp" % "commons-dbcp" % "1.4"
    )

    val main = play.Project(appName, appVersion, appDependencies).settings(
      // Add your own project settings here      
      testOptions in Test += Tests.Argument("junitxml", "console")
    )

}
てな感じでどうだろうか?

ここまで設定を直してplay ideaをやり直せば、ideaプロジェクトのライブラリ設定に反映されました。

IDEAでPlayのプロジェクトを作り、CloudBeesの設定をする途中まで

とりあえず、IntelliJ IDEAを起動して、新しいプロジェクトを作る。

ScalaのPlay Moduleを選ぶ。
Playで作るサイネージ、そのままの名前。

で、設定画面でCloudBeesのアプリケーションサーバを設定する。
CloudBees Serverを追加。

CloudBeesで登録した、ドメイン、ユーザ名、パスワードを入力。
「Download client libraries」ボタンをクリックすると、ライブラリがダウンロードされて、接続できるようになるので、「Test connection」ボタンをクリックして、接続できることを確認。
「OK」で、登録完了。
忘れちゃいけないのが、CloudBeesはwarでデプロイするので、warを作成する設定をすること。

Project Structure画面で「WebApplication:Exploded」を選んで・・・その先がまだ良くわかってない。

この先は、またイロイロ試してから書く。

CloudBees + IntelliJ IDEA + Play2 + Scalaという試み

放置してたこのブログを、なんとなく再開。

会社の勉強会で作ろうとしてたデジタルサイネージを、最近覚えた技術とこれから覚えたい技術を散りばめて作りなおそうかと思いたったので、備忘録として。

PaasにCloudBeesを選んだのは、Jenkinsを使ってみたかったのとPlayFrameworkをサポートしてるから。Jenkinsを使いこなせるかわかんないけど。

IDEに使うIntelliJ IDEAはScalaやるならEclipse(ScalaIDE)よりイイって色んなとこで見たので。有料なので会社でも使えるか微妙だけど、無料期間中に使い倒してほんとに良かったら個人的には購入しようかと。
ここまでほんのちょっと使っただけだけど、かなりヨサゲ。

PlayFramework2とScalaは将来のメインストリームにならないか期待を込めて。

これで、HTML5(できればSVG)を使ったデジタルサイネージをオンラインで作って、安いAndroidタブレットで表示してお店に置くような使い方ができる、サービスを作ろうと思ってます。
できればSVGでと思ってますが行けるかどうかはブラウザの対応レベル次第なので、そこ実験が先か・・・。