古いブログを復旧しました
CloudFoundryを試してみた
VMwareが発表したオープンソースのPaaS基盤、CloudFoundryを早速試してみました。
手順は、下記のリポジトリに書いてあるとおりですが、ちょっとした注意事項を書いておきたいと思います。
https://github.com/cloudfoundry/vcap
pg 拡張ライブラリのコンパイルが失敗する。
インストーラーは、PostgreSQLはインストールしてくれますが、pgライブラリのコンパイルに必要なソースライブラリをインストールしてくれないので、バイナリのコンパイルが失敗します。セットアッププログラムの実行後に、手動でインストールしてコンパイルし直しが必要です。
sudo apt-get install postgresql-server-dev-8.4 sudo gem install pg
rake testsが失敗する。
インストール終了後のCucumberテストが失敗します。どうもRailsがインストールされていないことによる失敗のようです。
後続のRSpecテストを実行するとRailsがインストールされ、Cucumberも成功するようになるようです。
Rails3で自分専用のブログを作る(17) ─ featureを日本語化する
Cucumberのfeatureを日本語で記述したいので、web_steps.rbを日本語化するweb_ja_steps.rbを作成しました。翻訳はid:moroさんのmoro-misoを参考にしました。
# coding: UTF-8 Given /^"([^\"]*)"ページを表示している$/ do |page_name| Given /^I am on #{page_name}$/ end When /^"([^\"]*)"ページを表示する$/ do |page_name| When /^(?:|I )go to #{page_name}$/ end When /^(?:"([^\"]*)"の)?"([^\"]*)"ボタンをクリックする$/ do |selector ,button| When /^(?:|I )press "#{button}"(?: within "#{selector}")?$/ end When /^(?:"([^\"]*)"の)?"([^\"]*)"リンクをクリックする$/ do |selector, link| When /^(?:|I )follow "#{link}"(?: within "#{selector}")?$/ end When /^(?:"([^\"]*)"の)?"([^\"]*)"に"([^\"]*)"と入力する$/ do |selector, field, value| When /^(?:|I )fill in "#{field}" with "#{value}"(?: within "#{selector}")?$/ end #When /^(?:|I )fill in "([^"]*)" for "([^"]*)"(?: within "([^"]*)")?$/ do |value, field, selector| # with_scope(selector) do # fill_in(field, :with => value) # end #end # Use this to fill in an entire form with data from a table. Example: # # When I fill in the following: # | Account Number | 5002 | # | Expiry date | 2009-11-01 | # | Note | Nice guy | # | Wants Email? | | # # TODO: Add support for checkbox, select og option # based on naming conventions. # When /^(?:"([^\"]*)"の中に)?以下の項目を入力する:$/ do |selector, fields| When /^(?:|I )fill in the following(?: within "#{selector}")?:$/ end When /^(?:"([^\"]*)"の)?"([^\"]*)"から"([^\"]*)"を選択する$/ do |selector, field, value| When /^(?:|I )select "#{value}" from "#{field}"(?: within "#{selector}")?$/ end When /^(?:"([^\"]*)"の)?"([^\"]*)"をチェックする$/ do |selector, field| When /^(?:|I )check "#{field}"(?: within "#{selector}")?$/ end When /^(?:"([^\"]*)"の中の)?"([^\"]*)"のチェックを外す$/ do |selector, field| When /^(?:|I )uncheck "#{field}"(?: within "#{selector}")?$/ end When /^(?:"([^\"]*)"の中の)?"([^\"]*)"を選択する$/ do |selector, field| When /^(?:|I )choose "#{field}"(?: within "#{selector}")?$/ end When /^(?:"([^\"]*)"の中の)?"([^\"]*)"としてファイル"([^\"]*)"を選択する$/ do |selector, field, path| When /^(?:|I )attach the file "#{path}" to "#{field}"(?: within "selector")?$/ end Then /^次のJSONがえられること:$/ do |expected_json| Then /^(?:|I )should see JSON:$/ end Then /^(?:"([^\"]*)"に)?"([^\"]*)"と表示されていること$/ do |selector, text| Then /^(?:|I )should see "#{text}"(?: within "#{selector}")?$/ end Then /^(?:"([^\"]*)"に)?\/([^\/]*)\/と表示されていること$/ do |selector, regexp| Then /^(?:|I )should see \/#{regexp}\/(?: within "#{scope}")?$/ end Then /^(?:"([^\"]*)"に)?"([^\"]*)"と表示されていないこと$/ do |selector, text| Then /^(?:|I )should not see "#{text}"(?: within "#{selector}")?$/ end Then /^(?:"([^\"]*)"に)?\/([^\/]*)\/と表示されていないこと$/ do |selector, regexp| Then /^(?:|I )should not see \/#{regexp}\/(?: within "#{selector}")?$/ end Then /^(?:"([^\"]*)"の中の)?入力項目"([^\"]*)"に"([^\"]*)"と表示されていること$/ do |selector, field, value| Then /^the "#{field}" field(?: within "#{selector}")? should contain "#{value}"$/ end Then /^(?:"([^\"]*)"の中の)?入力項目"([^\"]*)"に"([^\"]*)"と表示されていないこと$/ do |selector, field, value| Then /^the "#{field}" field(?: within "#{selector}")? should not contain "#{value}"$/ end Then /^(?:"([^\"]*)"の中の)?"([^\"]*)"がチェックされていること$/ do |selector, label| Then /^the "#{label}" checkbox(?: within "#{selector}")? should be checked$/ end Then /^(?:"([^\"]*)"の中の)?"([^\"]*)"がチェックされていないこと$/ do |selector, label| Then /^the "#{label}" checkbox(?: within "#{selector}")? should not be checked$/ end Then /^"([^\"]*)"ページを表示していること$/ do |page_name| Then /^(?:|I )should be on #{page_name}$/ end Then /^次のクエリストリングが得られること:$/ do |expected_pairs| Then /^(?:|I )should have the following query string:$/ end Then /^ページを表示する$/ do Then /^show me the page$/ end
また、featureジェネレータが作成したarticles_steps.rbにも追記を行いました。
Given /^次の記事があるとき:$/ do |articles| Given /^the following articles:$/ end When /^(\d+)番目の記事を削除する$/ do |pos| When /^I delete the #{pos}(?:st|nd|rd|th) article$/ end Then /^次の記事が表示されること:$/ do |expected_articles_table| Then /^I should see the following articles:$/ end
これでfeatureも日本語化できます。manage_articles_ja.featureというファイル名にしました。
# language: ja フィーチャ: 記事を管理する [ゴール]に到達するために [ステークホルダ]は [振る舞い]が欲しい シナリオ: 新しい記事を登録する "前提" "the new article page"ページを表示している "もし" "title 1"に"Title"と入力する "かつ" "body 1"に"Body"と入力する "かつ" "Create"ボタンをクリックする "ならば" "title 1"と表示されていること "かつ" "body 1"と表示されていること シナリオ: 記事を削除する "前提" 次の記事があるとき: |title|body| |title 1|body 1| |title 2|body 2| |title 3|body 3| |title 4|body 4| "もし" 3番目の記事を削除する "ならば" 次の記事が表示されること: |Title|Body| |title 1|body 1| |title 2|body 2| |title 4|body 4|
「前提」、「もし」、「ならば」、「かつ」などをダブルクォーテーションで括っているのは、括らないとエラーになるため。以前は引用符なしでも大丈夫だったのですが、Ruby 1.9で正規表現の動作(単語の境界の検出)が変わったのが原因かもしれません。それにしても、「フィーチャ」や「シナリオ」が大丈夫なのは変ですがコロンで分離されているからでしょうか。
Rails3で自分専用のブログを作る(16) ─ RSpecに必要なwebratを追加
rake spec
でspecを実行してみるとhave_tagなどがNoMethodErrorになってしまいます。こうしたセレクタはwebratが持っているものなのでこれを追加する必要がありそうです。
gem install webrat --pre
と実行し、最新のベータ版をインストールしました。
次に、Gemfileに必要なgemとして定義します。本番環境には必要のないものなので、下記の様にグループを定義して、ブロック内に記述しましょう。
group :development, :test do gem 'capybara' gem 'database_cleaner' gem 'cucumber-rails' gem 'cucumber' gem 'rspec-rails', '2.0.0.beta.20' gem 'rspec', '2.0.0.beta.20' gem 'spork' gem 'launchy' gem 'webrat' end
この後、build install することでエラーが出なくなりました。
Rails3で自分専用のブログを作る(15) ─ featureとscaffoldをgenerateする
CucumberとRSpecの設定が終わったので、最初の機能であるブログ記事の作成についてのfeatureを生成してみます。Rails 2.xとは構文が変わっていますね。
rails generate cucumber:feature article title:string body:text
英語のmanage_articles.featureが生成された事を確認した後、早速テストを実行してみると、
rake cucumber
当然、いろいろなエラーと失敗がでます。
そこで、とりあえずお決まりのscaffoldを生成してみましょう。
rails generate scaffold article title:string body:text
Rails3ではデータベースは必要になったときに生成されるようなので、migrateを実行。
rake db:migrate
再びcucumberのテストを実行してみます。
rake cucumber
cucumberのfeatureが通るようになったようです。
新潟オープンソースカンファレンス 2010に参加しました
9月4日に新潟市中央図書館で開催された、新潟オープンソースカンファレンス 2010にスタッフとして参加しました。
こちらは、全国各地で開かれているものとは異なり、新潟オープンソース協会と日本PostgreSQLユーザー会(JPUG)新潟支部との共催によるものです。PostgreSQL 9.0の話や、直接OSSともPostgreSQLとも関係ないですがGoogle App Engineの話、EC-CUBEで有名な株式会社ロックオンの福田さんの話、オープンソースのルータVyatta、RailsやAndroidでの開発の話など多彩な話が聞けました。
夜は例によって地酒飲み放題の懇親会。先週の失敗があったので自重して一次会でかえりましたが、楽しい一日でした。
RubyKaigi 2010に来ています
27日からRubyKaigiに来ています。
初日の夜のCommunity Nightで飲みすぎて2日目は午前中一杯ホテルでダウン。「コミッター勢ぞろい」のところからUstreamで見ていたのですが、途中でホテルのインターネットが使えなくなって… Matzの基調講演や面白いセッション聞きのがしてしまいました。
飲みすぎて電車に忘れたノベルティのバッグを取りに行ってから会場についたのは3時過ぎでした。体調が戻らないので懇親会もパスする事に。飲み過ぎでの大失敗は久しぶりなので落ち込みました。
今日は最終日、神田明神のそばのホテルなので7時頃には朝食を食べに出ようとおもいます。今日は目一杯参加するぞ。
それにしても、ホテルを都内にしたのは失敗でしたね。時間とTXの電車賃が損失でした。