Merb will be merged into Rails 3 !!

歴史は繰り返すとはこのことでしょうか。眠気もさめるようなニュースが到来。 ちょうどかつてWebwork2がStruts2にマージされたように、


 


最近話題を集める「Merb2」がRails3にマージ!


このマージによる変更点やメリットなど。




  • merb-coreをベースにRailsが作られる。それにより現在のmerbのように、Railsがモジュール化する。

  • ORM/template/javascriptなどは、デフォルトとして提供されるものもあるが、それ以外のものもサポートする。たとえばORMでは、デフォルトは現状と同じActive-Record。一方でSequelやDataMapperも使用可能に。テストではRSpecが使えたりなど。

  • パフォーマンスを改善するために行われたMerbの改善点をRailsにポート。

  • プラグイン開発のためのpublic APIを提供。現状のRailsで起こりがちなRailsのアップグレードによるプラグインの動作不能をなくすためのプラグイン開発用APIを提供。

  • Rails3は現状の2.xといくつかの部分で互換性がなくなる。非互換部分は最小にする予定で、2.xのアプリケーションを3のアプリケーションに簡単にマイグレーションする方法も提供予定。


 


少なくとも5月にラスベガスで開催されるRailsConf2009にはベータバージョンをリリース予定。全体的にRailsがMerbのいいところを取り入れるような感じになるようですね。


以下、アナウンス。


The day Merb joined Rails
Katz Got Your Tongue?
The Merbist

2008/12/24 by Tomo Nozawa

sun techdays 2008 presentation pitch

僕もJRuby On Railsについて話しましたが、12月2、3日に行われたSun Tech Daysのプレゼン資料が公開になっています。すべてPDFです。



Sun Tech Days2008  in Tokyo presentations

2008/12/15 by Tomo Nozawa

Ruby on Rails with Netbeans Seminar

先日Netbeansを使ってRailsによるWebアプリケーションの作成方法を解説した本、



かんたんRuby on RailsでWeb制作



黒田 努 山本 不二也
翔泳社
売り上げランキング: 26665






が発売されました。
その著者である黒田努氏による無料セミナーが12/16(木)に開催されます。
Netbeans6.5を使用して、Railsの解説(特に
データベースを更新するための入力フォームの作り方とテスト方法)が紹介されるようです。
NetbeansやRailsに興味がある方は参加してみてはいかがでしょうか?登録等は上記サイトにあります。

2008/12/12 by Tomo Nozawa

JRuby on rails 2.2.2 new feature(4) : Connection Pooling

前回のスレッドセーフによって、もたらされた大きな機能として、コネクションプーリングがあります。Javaによるweb開発等ではおなじみのこの機能がついにRailsにも提供されることになります。

設定としては、database.ymlに、


 development:
adapter: jdbcmysql
database: rails_development
encoding: utf8
pool: 5
username: ユーザ名
password: パスワード
host: localhost



のように、プールサイズを指定することで設定します。デフォルト値は5です。

またJRuby on Railsの場合は、DataSourceを使うことももちろんできますので、


development:
adapter: jdbc
jndi: jdbc/jndi_rails
driver: com.mysql.jdbc.Driver
pool: 5



というように設定して、アプリケーションサーバ側でデータソースを作成すれば、jndi経由でコネクションプーリングを行うことができます。

2008/12/12 by Tomo Nozawa

Rails2.2 new feature(2) - 1 : i18n_generators

先日i18nを試してみましたが、正直ロケールファイルが面倒くさいとおもっていたら、こんなのがあるようです。


i18n_generators


i18n対応Scaffoldとロケールファイルを自動生成してくれるgem。現在0.3.1。

JRubyでも動作します。Rails2.2.2以降対応

まずインストール。


$ gem install gettext
$ gem sources -a http://gems.github.com (githubをgemレポジトリとして追加)
$ gem install i18n_generators



デモアプリで試してみます。まずはscaffold。generatorが変更になっています.


$ ./script/generate i18n_scaffold article title:string body:text


この状態で、英語、ドイツ語のロケールファイルが自動生成されますが、日本語がないので、以下のコマンドで作ります。


./script/generate i18n ja


そうすると、environment.rbに

config.i18n.default_locale = 'ja'


が設定され、config/locales/ja.ymlが自動生成されます。

僕の環境では、generateした時に必ず



undefined method `count' for #


と出ますが、問題なく動作はしています。



さらにModel/Viewをi18n化したい場合は、 





./script/generate i18n_translation ja


で生成されるはずなのですが、同様のエラーが出て、こちらは動作しません。

現在のものでも、十分使えますが、very very very very roughly implemented just for experimentとあるので、これから開発が進んでいくのでしょう。これからの発展に期待です。

Via :: Close to the EDGE

2008/12/09 by Tomo Nozawa

(j)Ruby on Rails 2.2 new feature (2) : i18n

かなり時間があいてしまいましたが、Rail2.2の新機能であそんでみたいと思います。前回は2.2.0でしたが、書かない間に2.2.2の正式リリースがでてしまいました。すいません。


gem update rails



でアップデートできます。アップデート後は、railsコマンドでdemoアプリを作成しなおしました。

今回はi18nを使ってみます。まず日付をローカライズするためのプラグインをインストールします。


./script/plugin install git://github.com/clemens/localized_dates.git



続いてi18nを初期化してロケールファイルを読み込む処理を行います。


I18n.default_locale = 'ja-JP'
%w{yml rb}.each do |type|
I18n.load_path += Dir.glob("#{RAILS_ROOT}/app/locales/*.#{type}")
end



config/initializers/load_i18n.rb(ファイル名は任意)に上記の内容を記述。

demoアプリでscaffold


./script/generate scaffold post title:string content:text



もちろんmigration。そしてapp/models/posts.rbを編集。


class Post < ActiveRecord::Base
validates_presence_of :title, :content
validates_uniqueness_of :title
end



つづいて、ロケールファイルの準備。
app/locales/ja-JP.rb


{  
:'ja-JP' => {
:date => {
:formats => {
:default => "%Y-%m-%d",
:short => "%e %b",
:long => "%B %e, %Y",
:long_ordinal => lambda { |date| "%B #{date.day}, %Y" },
:only_day => "%e"
},
:day_names => %w(日曜日 月曜日 火曜日 水曜日 木曜日 金曜日 土曜日),
:abbr_day_names => %w(日 月 火 水 木 金 土),
:month_names => [nil] + %w(1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月),
:abbr_month_names => [nil] + %w(1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月),
:order => [:year, :month, :day]
},
:time => {
:formats => {
:default => "%a %b %d %H:%M:%S %Z %Y",
:time => "%H:%M",
:short => "%d %b %H:%M",
:long => "%B %d, %Y %H:%M",
:long_ordinal => lambda { |time| "%B #{time.day}, %Y %H:%M" },
:only_second => "%S"
},
:am => '',
:pm => ''
},

:datetime => {
:distance_in_words => {
:half_a_minute => '30分',
:less_than_x_seconds => '{{count}} 秒以下',
:x_seconds => '{{count}} 秒',
:less_than_x_minutes => '{{count}} 分以下',
:x_minutes => '{{count}} 分',
:about_x_hours => '約 {{count}} 時間',
:x_days => '{{count}} 日',
:about_x_months => '約 {{count}} ヶ月',
:x_months => '{{count}} ヶ月',
:about_x_years => '約 {{count}} 年',
:over_x_years => '{{count}} 年以上'
}
},
:number => {
:format => {
:precision => 3,
:separator => '.',
:delimiter => ','
},
:currency => {
:format => {
:unit => '¥',
:precision => 2,
:format => '%u%n'
}
}
},

:activerecord => {
:errors => {
:template => {
:header => "{{model}}でエラーが発生しました",
:body => "以下のメッセージを確認してください:",
},
:messages => {
:inclusion => "は、含まれていません",
:exclusion => "は、有効ではありません",
:invalid => "は、妥当ではありません",
:confirmation => "は、確認できません",
:accepted => "は、入力できません",
:empty => "は、何も入力されていません",
:blank => "は、ブランクです",
:too_long => "は、長すぎます ({{count}}文字以下)",
:too_short => "は、短すぎます ({{count}}文字以上)",
:wrong_length => "は、桁数が合っていません({{count}}桁必要です)",
:taken => "は、有効ではありません",
:not_a_number => "は、数字ではありません",
:greater_than => "は、{{count}}文字を超えて入力されています",
:greater_than_or_equal_to => "は、{{count}}文字以上入力されています",
:equal_to => "は、{{count}}と同値です",
:less_than => "は、{{count}}文字未満です",
:less_than_or_equal_to => "は、{{count}}文字以下で入力されています",
:odd => "は、端数が入力されています",
:even => "は、偶数が入力されています"
}
},
:models => {
:post => "記事"
},
:attributes =>{
:post =>{
:title => "タイトル",
:content => "内容"
},
},
},
}

}




これでエラーメッセージが日本語化されます。


上記はruby hashで記述しましたが、


:ja-JP
:date
:format
:default "%Y-%m-%d"
.
.
.



のようにyaml形式で書くこともできますので、viewの日本語化をymlで書きます
/app/locales/ja-JP.yml


ja-JP:
label:
posts:
new_post: 新しい記事を作成
create: 投稿する
back: 前の画面へ



そしてview、app/view/posts/new.html.erbを以下のように編集。


<h1><%= t('label.posts.new_post') %></h1>

<% form_for(@post) do |f| %>
<%= f.error_messages %>

<p>
<%= f.label :title, t('activerecord.attributes.post.title') %><br />
<%= f.text_field :title %>
</p>
<p>
<%= f.label :content, t('activerecord.attributes.post.content') %><br />
<%= f.text_area :content %>
</p>
<p>
<%= f.submit t('label.posts.create') %>
</p>
<% end %>

<%= link_to t('label.posts.back'), posts_path %>




そうすると、このように、


viewも日本語化できます。


正直なところ、gettextを使う方が何倍もお手軽ですが、Rails標準のi18nとして使うことがあるかもしれません。

2008/12/05 by Tomo Nozawa

(J)Ruby On Rails in Sun TechDays 2008

Rails 2.2.x系の新機能紹介を書く予定がかなり遅めの夏休みをとっていたりしたので、遅れ遅れになってしまってすいません。

そうこうしているうちに、2.2の正式リリース2.2.2がリリースされました。明日から続きを書く予定です。


ところで、来月12月2-4日、Sun Tech Days 2008 in Tokyoが開催されます。

このイベントで僕も(J)Ruby On Railsについて話させていただきます。

時間は12月3日(水)13:10-14:00 (J)Ruby On Railsです。

サイトの説明文では今一つ内容がつかみ辛いかもしれませんが、一応下記の内容で話す予定です。

主にRoRを知らない方向けの内容になりますが、最後にRails2.2.2とJRubyについて話します。


  • Rubyとは?

  • Ruby on Railsとは?

  • RoRのMVC解説(HelloWorldアプリケーションを作成しながら)

  • JRubyとは?(Ruby-Processing のライブコーディングするかも)

  • Warbler/Glassfish v3

  • RoR2.2.2+JRubyでパフォーマンス向上



こんな感じになる予定です。ぜひ立ち寄って見てください。

2008/11/25 by Tomo Nozawa

JRuby On Rails2.2RC1 with Glassfish gem (1)

JRubyにとって、史上最も重要なRails、v.2.2のリリースが近づいて来ました。現在RC1となる2.2.0(正式リリースは2.2.1)がリリースされていますが、このRC1とglassfish gemを使って、何回かにわけて、v.2.2の新機能に迫っていきたいと思います。

まず以前にも書きましたが、2.2最大の特徴は「スレッド・セーフ」。ただしMRI(cRuby)だとRails自体はグリーンスレッドで動作する。しかしJRubyを使うことで、グリーンスレッドではなく、ネイティブスレッドとして動作が可能。これにより、一つのプロセスで、すべてのリクエストを並列に処理できるようになり、メモリの使用量の削減はもちろん、よく問題になるスケーラビリティについても改善されることになります。

ということで、実際に2.2を使っていきます。今回はインストールまで。
JRubyのインストール
こちらから1.1.5をダウンロード後、解凍し、パスを通しておいてください。
GlassFish gemのインストール

jruby -S gem install glassfish

Rails2.2.0のインストール

jruby -S gem install rails -s http://gems.rubyonrails.org -v 2.2.0

activerecord-jdbcmysqlのインストール

2.2.0にはrubyのmysqlドライバが同梱されていないようです。

jruby -S gem install activerecord-jdbcmysql-adapter


これで準備は完了。いつものようにアプリケーションを作ります。


$ rails -v
Rails 2.2.0
$ rails demo



config/environment.rbを確認すると、

RAILS_GEM_VERSION = '2.2.0' unless defined? RAILS_GEM_VERSION


となっています。

最後に、スレッドセーフモードで動作させるために、config/environments/production.rbを編集します。


# Enable threaded mode
config.threadsafe! #コメントアウトをはずします。



今回はここまで。

2008/11/06 by Tomo Nozawa

How to compile EventMachine on Solaris

thinやneverblockを使う際に必要になるeventmachine。しかしSolarisではデフォルトでは、gem install eventmachineではコンパイルエラーでインストールできません。eventmachineをインストールするには、一工夫必要です。

まずgccではなくSun Studioをインストール。

その後、環境変数に以下の値を設定します。


export CXX=g++



(/usr/sfw/binにはパスを通しておいてください)

そして


gem install eventmachine



これでthinもneverblockも使うことができます。

2008/10/09 by Tomo Nozawa

Passenger for Solaris

RailsアプリケーションをApacheに非常に簡単にデプロイできるモジュールPhusion Passenger a.k.a. mod_rack/mod_railsをSolaris10(SPARC) + Apache 2.2.9で動作させてみました。

今回はSPARC版ですが、基本的にx86版でも動作すると思います。






あらかじめSunStudioまたはgccをインストールしておきます。

そしてまずCoolStackのRubyを用意します。CoolStackのRubyはこちらからダウンロードできます。

解凍後、pkgaddします。



あらかじめSunStudioまたはgccをインストールしておきます。

そしてまずCoolStackのRubyを用意します。CoolStackのRubyはこちらからダウンロードできます。

解凍後、pkgaddします。


pkgadd -d . CSKruby_1.3.1_sparc.pkg



そうすると、/opt/coolstack/bin/ 以下にruby/gemがインストールされるので、パスを通しておきます。

Passengerのインストール時に必要になるので、rackをインストールします。


gem install rack



上記のmod_rackのサイトのバイナリ/ソースではインストールできないので、
こちらからパッチをあてたソースをダウンロードします

9/29追記]Passenger2.1.0からSolarisパッチがマージされているようです。こちらからソースをダウンロード。

ソースを解凍後、(ここでは解凍後/opt/passengerというディレクトリに展開されたとします)以下のようにしてインストールします。


cd /opt/passenger/bin
./passenger-install-apache2-module



対話式のインストールになりますので、指示に従うだけでPassengerがインストールされます。後は、httpd.confに通常のPassengerと同様に


LoadModule passenger_module /opt/passenger/ext/apache2/mod_passenger.so
PassengerRoot /opt/passenger
PassengerRuby /opt/coolstack/bin/ruby



と設定し、後はVirtual hostを設定するだけで、railsを動作させることができます。

2008/09/26 by Tomo Nozawa

New Relic Lite

(J)Railsアプリケーションの状況をブラウザ上で監視するサービス「Relic」から無料版が登場。

RPM Lite


上記のサイトで登録すると、Rails用のプラグインのアドレスとライセンスが送られてきます。そのメールにしたがってプラグインをインストール後、送られてきたライセンスファイルを<$RAILS_ROOT/config/に配置すると自動的に情報を送信し始めます。


その後は、カットオーバー後のサイトであれば、New Relicのページにて、リアルタイムに監視することが可能です。無料版の場合、CPU、メモリー負荷、ActiveRecordのfind/saveのレスポンス時間、ユーザリクエストのレスポンス時間、各アクションのレスポンス時間などをみることができます。


また開発中であれば、Developer Modeというものがあり、ローカルホストで上記のような情報を取得することも可能です。アプリケーションのボトルネックを見つけるにはちょうどいいかもしれません。


さらに有料版ではActiveRecordの詳細情報やCluster情報、Error、トランザクション情報もみることができます。

2008/09/20 by Tomo Nozawa

Project Kenai

先日、弊社のオープンソースホスティングサービス

Project Kenai



がサービスインしました。このProject Kenai(キーナイ)はsubversionとMercurialに対応したコードホスティングで、メーリングリスト、フォーラム、wikiを提供します。また近日中にgitとJIRAがサポートされる予定です。
登録すればどなたでもアカウントを作ることができます。現在ベータのため、新規プロジェクトの登録にはinvitationが必要です。新規プロジェクトを登録したい方は、僕にメール(名.性アットマークSun.COM)していただければ、少し時間をいただきますが、招待させていただきます。

現状ではGoogle Codeやgithubと同様のサービスとなっていますが、将来的にはSNS機能やクラウドコンピューティングを使ったテスト環境の提供なども行う予定のようです。

このサイト自体は、Apache + mod_proxy_balancerをフロントエンドにたて、そのバックで、Glassfish v2 + JRuby on Rails + MySQL + Warblerで稼働しています。H/WはSunFire T-2000 + X4500(ストレージとして)、OSはNevada 70bです。

これからどんどんKenai自体の開発も進んでいくようなので、その変化にも注目してください。

2008/09/16 by Tomo Nozawa

Bort : the prototype of rails2.1 application

新しくRailsアプリケーションを作ろうとした際に、最初のいくつかの工程はいつも同じかもしれません。例えばrestful_authenticationインストールして、generateして、route.rbを書き換えて、will_paginateをインストールして、Capistranoの設定ファイルを作ってという風に。

正直なところ、少し面倒かもしれません。その面倒くささに着目したRails2.1用のアプリケーションのひな形が登場

bort

このbortには以下のプラグインおよび設定がなされています。
Restful Authentication
user/sessionコントローラ作成済み。AASMインストール済み。route.rbおよびmailer/observer設定済み。ユーザアクティベーション設定、パスワードリマインダー設定。

Will Paginate
プラグイン版
Rspec & Rspec-rails
Exception Notifier

Railsアプリで問題が発生した場合、メールで通知。
deploy.rb

Capistranoの設定ファイルひな形作成済み。


ほかにもindex.htmlやrails.pngが消去済みだったり、application.html.erbが作成済みだったり、かゆいところに手が届く感じのひな形になっています。

ルーティンワーク的な処理がすべて終わっているという意味では、ちょっと便利かもしれません。

2008/09/10 by Tomo Nozawa

Rails 2.2 and Connection Pooling

C・ナッターのスレッドセーフRailsに関するブログ記事が大きな話題になっていますが、まもなくそのスレッドセーフであるRails2.2が登場します。

この2.2からスレッドセーフになることにより、以前取り上げた通り、従来まではActiveRecordではデータベース接続が1つで使い回していたものが、コネクションプーリングを行うことができるようになるようです。

2.2からはdatabase.ymlにpoolパラメータが追加され、以下のような設定でプール数を設定可能になります。

development:
adapter: mysql
username: root
database: myapp_dev
pool: 10


ナッターの文章にもありますが、スレッドセーフになることにより、JRubyを使えば、RubyのスレッドはJavaを経由してカーネルネイティブスレッドへと展開されるため、従来よりはるかに高いスケーラビリティを得ることができるようになるはずです。またJDBCのコネクションプールをJRubyから使うことにも意味が出てきて、より信頼性が高く、効率的になるはずです。

2008/09/08 by Tomo Nozawa

Passenger2.0

オランダのスタートアップ「Phusion」が開発し、大きな話題になったPassenger。
それを大幅に改良したPassenger2.0RC1がRailsConfで発表され、リリースがまたれていましたが、ついに登場。
Passengerはmod_railsとも呼ばれ、phpのように特に難しい設定をすることなく、RailsアプリをApacheで高速に動作させることができるというものです。
1.0.5では高速なものの、そのメモリ消費量が問題視されていましたが、2.0では大幅にメモリ使用量を改善。さらに2.0では以下のような特徴があります。

  • Rackサポート
    これによりRails専用だった1.0.5とは異なり、MerbなどのRack対応アプリも動作可能に
  • WSGIサポート
    Pythonのウェブ層抽象化のWSGIをサポート。Djangoが動作可能に
  • Apache Worker MPMをサポート
  • Fair Load バランシングをサポート

もちろんより安定性が向上したことに加えて、パフォーマンスも向上。
2.0でレンタルサーバなどリソースが限定されている環境でより手軽にRailsアプリを使えるようになったことは間違いないでしょう。
なお詳細はRailsConfでのプレゼンテーション資料(PDF)をご覧ください。


2008/06/13 by Tomo Nozawa

メイン | 次のページ »