Play Framework 2.2.xのbuild.sbtにcucumberを実行するタスクを追加

背景

  • Play Frameworkでjavaを使って開発している。
  • UIのテストにcucumber-jvmを使っている。
  • it:testでcucumberを実行している
  • 開発中は特定のタグ @current のついたシナリオだけ実行したい
  • play it:current とかやりたいけど、方法が分からん
  • skipoleschris/xsbt-cucumber-plugin · GitHub を入れてみたが、Scalaが前提のようなので、使えない感じ

仕方がないので、タスクを作ってみた

実行方法

play cucumber

でcucumberが実行できる

play "cucumber [タグの名前]"
(ex play "cucumber @current")

タグの名前を指定して実行することもできる。

build.sbtに入れ込むコード

lazy val cucumberTask = InputKey[Unit]("cucumber", "Run Cucumber tests.")

cucumberTask := {
  val logger = streams.value.log
  logger.info("Running Cucumber tests.")
  val args: Seq[String] = Def.spaceDelimited("<arg>").parsed
  val cucumberOpts = args.isEmpty match {
    case false => "-Dcucumber.options=" + args.map("--tags " + _).mkString(" ")
    case true => ""
  }
  logger.info("Cucumber.Options: "  + cucumberOpts)
  val cucumberRunner = "features.RunCucumber"
  val classPassArgs = (fullClasspath in Test).value.map(_.data).mkString(";")
  Fork.java(ForkOptions(runJVMOptions=Seq(cucumberOpts)), Seq("-cp", classPassArgs, "org.junit.runner.JUnitCore", cucumberRunner))
}
  • クラスパスはfullClasspath in testを使っている
  • CucumberのRunnerはコードに埋め込み
  • tags以外のオプションは対応していない

自分で使う分にはここから始めればいいから十分だ。

  • 引数とりたい場合はTaskKeyじゃなくて、InputKeyに突っ込む
  • Def.spaceDelimited("").parsedで引数が取れる
  • Fork.javaでjvmを起動できる

がポイント?

PlayFrameworkをHerokuにデプロイするまで

  • Herokuでサインアップ
  • HerokuのClientをインストール
  • 以下のコマンドを実行して、デプロイ先を作成
heroku create [HerokuアプリのID]
  • デプロイに使うgitリポジトリのURLが出力されるので、それを使って以下のコマンドを実行
git remote add heroku [URL]
  • Procfileを作成。Playアプリ名には、build.sbtのnameで指定している名前を入れる。

今回はdevモードで動かしかったので%prod.application.modeを指定。

web: target/universal/stage/bin/[Playアプリ名] -Dhttp.port=${PORT} -DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver -Ddb.default.url=${DATABASE_URL} -D%prod.application.mode=dev
  • system.propertiesを作成 (SecureSocialを使ってるのでJava7が必要)
java.runtime.version=1.7
  • Pushする (developブランチをPushする場合)
git push heroku develop:master

Pushするときに以下のメッセージが出る場合は、msysgitのインストールディレクトリにある.sshフォルダにキーを置くこと。
Heroku – Trouble with Windows and SSH Keys | Ganeshji Marwaha による。

Permission denied (publickey).

Play Frameworkについてのメモ

社内のコミュニティでPlay Frameworkを使ってちょっとしたアプリを作ることになったので、メモ。

  • いつものようにWindows
  • なるべくJavaを使う (手伝ってくれる人が多くなるかもしれない)
  • EclipsePleiades All in One 4.3.1.v20130926を利用する

Play Frameworkのインストール

Download Play Framework でZip形式のファイルをダウンロード。
適当なフォルダに解凍して終了。
パスを通しておくとよい。

Eclipseを使うための準備

Webアプリを作った後、以下のコマンドで.projectファイルを作ってくれる。

> play eclipse

Eclipseで[ファイル -> インポート -> 一般 -> 既存プロジェクトをワークスペースへ]を選択、インポートすればOK。
プラグインとして"ScalaIDE for Eclipse"をインストールしておく。

Eclipseを使ってデバッグ

Play Framework 2.0 で Eclipse を使ってデバッグする | ときどきウェブサイト構築記 を参考に。

> play debug run
  • 最後に以下のようなメッセージが出力されるので、9999にあたる部分の数字を覚えておく
Listening for transport dt_socket at address: 9999
  • Eclipseで[実行 -> Debugの構成 -> リモートJavaアプリケーション]に新しい設定を追加する
    • プロジェクト : 現在開いているプロジェクト
    • 接続プロパティ ホスト : localhost
    • 接続プロパティ ポート : 覚えておいた数字

テスト

ここくらいはScalaで書いても良いんじゃないかなぁ…。無理かなぁ。
モデルのテストをJavaで書いて、コントローラーのテストをScalaで書くか。

(ちょっと考える)

PlayFramework - Play Framework (Java) の fakeApplication を使ったテストをスッキリ書く - Qiita
Play Javaでspecs2を使う

データベースにデータをロードするのにEbeanを使うのか。
Yaml何となく苦手。DBUnit+Excelさんに登場してもらおうかなぁ…。

おまけ

社内のリポジトリSubversion。社外からアクセスするのは無理。
SubversionGitHubを連携させればなんとかなるのかな?

git-svnを利用した運用を考える - Qiita

Windows 8 に Rails 3.2.13 + Ruby 1.9.3 をインストールする

以前にWindowsでやろうとして死亡したんだけど、
またちょっと手を出すことになりそうなので、今どうなってるか確認。

インストール

Ruby をインストールする

http://rubyinstaller.org/downloads/ から Ruby 1.9.3-p429 をダウンロード、インストールする。

ruby --version

でバージョンの確認をする。

DevKit をインストールする

http://rubyinstaller.org/downloads/ から DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe をダウンロード、インストールする。

DevKitは解凍後、

cd [解凍したフォルダ]
ruby dk.rb init
ruby dk.rb install

でインストールができる。

Rails をインストールする

以下のコマンドを実行する。

gem install rails --version "3.2.13"

最後に file 'lib' not found と言う若干不安なメッセージがでているけども進む。

rails --version

でバージョンを確認。

Git for windows (msysgit) をインストールする

http://code.google.com/p/msysgit/downloads/list?q=full+installer+official+git から Git-1.8.3-preview20130601.exe をダウンロード、インストールする。
※ therubyracer のために必要。

アプリケーション作成

ガワを作る
rails new fuga --skip-test-unit --skip-bundle

fuga フォルダにアプリができる。

therubyracer のおぜん立てをする

Windows環境でtwitter-bootstrap-railsを利用する - Qiita を見ながらインストールする。
3 の Gemfile を変更するところまでやればOK。

変更点は以下。

  • v8.dll, v8preparser.dll を [Rubyをインストールしたディレクトリ]\bin に入れる
とりあえず動かしてみる
bundle install --path vendor/bundle

会社ではこれの前にひと工夫いるわけだが、家からやるのであれば大丈夫。

rails server -p 3003

3003 ポートでスタート。ファイアウォールの警告がでるので接続を許可する。
http://localhost:3003/ でアクセスして、Welcome aboard が出ればOK。

シャットダウンする。CTRL+C でOK。

アプリを作る

簡単!Rails3.2を使って10分でブログアプリを構築する方法 - DQNEO起業日記 をみてもくもくと作る。
"Hello Rails"を表示するためのコントローラを作成 以降を流せばよし。

おー、できる!! 素晴らしい!!!

テストを作ってみる

あとで書き足す。前回はここでもはまったんだよなぁ。
あとこれが WindowsXP/7 でも動くかどうか…。

Agile2012 の記事まとめ

自分じゃかけないので、人のをまとめて紹介するという苦しい作戦。

Agile2012のサイト

Agile2012 :: Home

EMZERO

サマリ、すげー!!! 俺がまとめる必要一切ないんだけど、せっかくなので続ける。

Agile2012 まとめ | ManasLink ONLINE

インフィニティソリューションズ

http://www.infinity-solutions.jp/blog/2012/08/21/scaling-up-excellence/