RAILS OF RUBY ON RAILS が実にすばらしい件

by tanabe on July 24, 2008

yugui さんのレビューを読んで、RAILS OF RUBY ON RAILS を買ってみた。

詳しくはまた別に書きたいが、想像以上に本当にすばらしい内容の本だった。

誤解を恐れずに言ってしまうと、RAILS OF RUBY ON RAILS は Rails2.x 世代の最高のチュートリアルだと思う。これから Rails について知りたい人は、Web で一生懸命に Rails 情報を探すよりも、まずこの本を買って読んでみるほうがいい。

読むだけなら短時間で内容に目を通せるのもチュートリアル的だ。教科書としてではなくチュートリアルとして買うのであれば、(同じくショッピングカートを作っている)「RailsによるアジャイルWebアプリケーション開発」と比べてもぼくはこちらを推す。

チュートリアルと呼んでしまうと内容が薄そうに聞こえるが、この本のすごいところはチュートリアルとしての進め方をしながら、その実要所要所で必要となる Rais の機能についてはきっちり説明がされているところだ。

もちろん、説明されていないことはたくさんある。説明されていることだって、説明の内容が深いかと言うとそんなことはない。でも、ここから後は必要に応じて自分でリファレンス読んだり、別の本を買ったり、Web で検索したりして調べることができる。

他にもいろいろな点で感動したのだが、とりあえずここまで。(あ、純粋に技術書として買うとここまでの評価にはならないかもしれません。でも、そういう需要には達人プログラマー+DHH+前田修吾さんが応えてくれるので問題ないでしょう。)

Rails of Ruby on Rails ~Case of LOCUSANDWONDERS.COM~
Plan de Sens 清水 智雄
毎日コミュニケーションズ
売り上げランキング: 43091
  

Mongrel 生まれの高速(らしい) Web サーバ Thin に関するメモ。

by tanabe on January 06, 2008

Ruby Inside で紹介されていた Thin に関するメモ。(なんだけど、試していないので実態は不明。)

Thin actually relies on Mongrel, but is ultimately faster than it, even against Mongrel's EventMachine-enhanced guise.

とのこと。公式サイトの about を読むと、Mongrel のパーサを使っているので、Mongrel の速さとセキュリティを受け継ぎ、EventMachine を使っているから、安定していてスケーラブル。そして、Rack 対応なので既存アプリも簡単に移行できるということらしい。

上記のブログのコメントからいくつか抜粋。

Does Thin run multiple Rails processes? Or do you still need to put it behind a load balancing proxy like you do with Mongrel? (like this config: http://blog.codahale.com/2006/06/19/time-for-a-grown-up-server-rails-mongrel-apache-capistrano-and-you/)

に答えて、

Thin is exacly like Mongrel on that side, you’ll need multiple Rails processes for a web site with some traffic.

You should probably also check out Rev (http://rev.rubyforge.org) which is a light simple binding around libev (not libevent) and works only in Ruby 1.9. Tony is building a very nice API for it that you can use, and libev is very fast and small.

これは Zed Shaw のコメント。libev はこれか。

How long, you think, before it can be used on a production server?

への回答。

A better reply would be: you tell me! If you feel like it, deploy an app using it and let me know if it works for you.

そら、そうだw

(Ruby はあんまりスケールしない(しなかった)って議論があるんだけど、その点はどうなの?って質問に答えて。)

Ruby had some problems in the past with threads, Mongrel helped fixing those bugs in Ruby’s core but still, Ruby threads are not native (don’t use OS processes, so can’t take advantage of multicore processors). And threading is not the most scalable way of handle huge loads. Event-driven I/O can handle more requests and uses only one thread.

"Event-driven I/O can handle more requests and uses only one thread." について関連情報を検索してみた。

Cool, now where’s the info on how to replace my mongrel clusters with thin clusters?

here’s a rake task to start and stop a cluster:
http://groups.google.com/group/thin-ruby/browse_thread/thread/a639d1e20a1b0d75

豆知識として、現状、Thin で検索かけてもさっぱり目的の情報は見つからないので、"gem install thin"あたりで検索するのがオススメ。

  

Rails の link_to_remote を訳してみた

by tanabe on June 18, 2007

勉強会用に Rails API ヘルプの link_to_remote を訳していて、ラストまで訳したときに過去にも一度訳したような覚えが。そして大嘘が発覚babie さん、ごめんなさい。。

新訳から抜粋。

さらに、オプションを指定することで、ブラウザサイドの JavaScript コードを利用することもできる。

  • :confirm: 確認ダイアログを利用する。
  • :condition: リクエストは、ある条件が満たされたときだけ実行される。リクエストが実行されない場合の条件を指定する。
  • :before: リクエストが開始される前に呼び出される。
  • :after: リクエストの完了後に呼び出される。
  • :submit: FORM エレメントの親となる DOM エレメントの ID を指定する。デフォルトでは現在の(current の)FORM となるが、テーブルの行の ID やその他の DOM エレメントとすることが多い。

過去訳から抜粋。

:condition: この表現を使うことで、リモートリクエストをより安定して (conditionally) 使うことができます。リモートリクエストが発行されない場合には、ブラウザサイドの状態を返すようになります。

これはひどい。

  

Rails + DB2 だって。

by tanabe on May 26, 2007

DB2 で Rails だって。需要あるのかな?

http://www.ibm.com/developerworks/db2/library/techarticle/dm-0705chun/

  

Rails でチュートリアルが終わったら、の Wiki を作ってみた

by tanabe on May 16, 2007

職場でやっている AWDwR 読書会がようやく終わりそうなので、その次のステップに役立ちそうな情報集めた Wiki を作ってみた。

http://wiki.hacklife.net/rails/

といっても、「自分で調べて書きました。」な内容よりも役立った情報へのリンク集みたいなものだけど。

自分のメモにも使うつもりなので、今後も適当に項目だけ挙げているやつとかを追記していきます。

さて、次は何をやりましょうね。

  

Ruby on Rails 入門を購入

by tanabe on August 08, 2006

くまくまーの中の人が書いた Ruby on Rails 入門が気になっていたので、仕事帰りに本屋で購入。(既発の Rails 本が全部置いてあった職場近くの本屋は正直どうなんだとちょっと疑問に思った。それだけ Rails が浸透したのか?)

肝心の本を2時間くらいで読了したわけですが、かなり良い出来でした。2冊目の Rails 本に一押し。1冊目なら、大人しく AWDwR の前田修吾さん監訳版なんかを購入しておいた方が安全と思われます。

それにしても、舞波はさておき、ActiveSupport から始まる Rails の解説というのもこだわりが感じられ、とにかく今この瞬間の Rails を切り取った本としては最高に面白い仕上がりでした。「 Pragmatic Programmers の Ruby 本 + レシピブック」みたいなかんじで、「 AWDwR + 舞波本」というかんじのポジション取りに最適。

Ruby on Rails入門―優しいRailsの育て方
西 和則
秀和システム (2006/08)
  

ActionView::Helper::PrototypeHelper の link_to_remote

by tanabe on July 26, 2006

babie さんの ■[rails] link_to_remote の★のところを。(遅レスに遅レス)

Optionally, you can use the options[:position] parameter to influence how the target DOM element is updated.

また、引数の options[:position] では対象の DOM エレメントをどのように更新するかを指定することもできます。:before, :top, :bottom, :after のどれかを指定しましょう。

:condition: Perform remote request conditionally by this expression. Use this to describe browser-side conditions when request should not be initiated.

:condition: この表現を使うことで、リモートリクエストをより安定して (conditionally) 使うことができます。リモートリクエストが発行されない場合には、ブラウザサイドの状態を返すようになります。

:submit: Specifies the DOM element ID that’s used as the parent of the form elements. By default this is the current form, but it could just as well be the ID of a table row or any other DOM element.

:submit: (submit する)フォームエレメントの親となる DOM エレメントの ID を指定できます。デフォルトではカレントフォームですが、テーブルの行にすることも、別の DOM エレメントにすることもできます。

それから、Duck Typing は、こんなところでいかがでしょう?

まつもとさんの「計算機システム特別講義IA」より。
http://www.rubyist.net/%7Ematz/slides/tsukuba-seminar2/mgp00038.html

ポリモーフィズムは具体的な現象であり、Duck Typing は方針なのだと思います。Java だと Interface で外部インタフェースを定義するけど、 Ruby は型でしばることをせずメソッドだけで外部インタフェースをやりくりした方が動的型言語っていう特長が生きてうれしいよねっていう。

参考) ActionView::Helper::PrototypeHelper の link_to_remote
http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html#M000412

  

Rolling with Ruby on Rails, Part2の日本語訳が公開!

by tanabe on April 15, 2006

うちで公開しているRolling with Ruby on RailsにはPart2があります。こちらもCurt Hibbsによる記事なのですが、なんと長谷部 陽一郎さんによる日本語訳が公開されました。

Rolling with Ruby on Rails, Part2

非常に読みやすい上に全文一気に公開。仕事速いです。すばらしい!

yohasebe.comというブログの方もおもしろくて思わず読み耽ってしまいました。

追記:あと、デザインもスマート。とても読みやすいです。

  

jascaffoldのまとめページを勝手に作ってみた

by tanabe on February 28, 2006

jascaffoldがAWDwRの日本語訳で取り上げられていてって話をくまくまーの人が書いていたので、イントロダクションだけのまとめページを作ってみた。

jascaffold 勝手にまとめページ

識者の方はたっぷりと追記して頂けると、誰よりぼくが喜びます。

勢いあまってスペジェネの解説とか付いちゃうと最高です。

  

Railsでテーブルをまたいだ関連を扱うには

by tanabe on February 23, 2006

舞波乙!ってことで。本題終わり。

でもそれじゃあんまりなので、くまくまーの人の作った便利なパッチのご紹介。

まずこれを読む。
Cascaded Eager Loading が欲しい

で、これを読む。
Cascaded Eager Loading

ってことで、ActiveRecordでテーブルの参照のそのまた参照みたいなケースを簡単に表現できますよってパッチです。

これ

Group.find_by_sql(<<-SQL)
  SELECT     *
  FROM       groups
  LEFT JOIN  members   ON members.group_id    = groups.id  LEFT JOIN  favorites ON favorites.member_id = members.id
SQL

こうなる

Group.find(:all, :include=>[{:members=>:favorites}, :songs])

パッチは、「Cascaded Eager Loading」の下の方にあります。

で、寂しくて死なれてしまっては困るという人は舞波乙!と言うといいらしいです。

  

簡単Ruby on Railsの決定版? - Instant Rails -

by tanabe on November 14, 2005

最近はCNETでも取り上げられたり、DHHがGoogle-O'Reilly Open Source AwardsのHacker部門受賞したり、日本でも結城浩さんが「Railsアプリに挑戦」されていたり、とすっかりRubyという枠を飛び越えて走り始めた感のあるRails。

そんなRuby on Railsがまた一つお手軽になりました。それがこのInstant Rails。

これはRailsの開発環境一式がダウンロード&Drag and Dropで作れてしまう「ちょっとRailsを試したい」という人にはぴったりのパッケージになっています。このInstant Railsをダウンロードしてzipを解凍し、使いたいフォルダへD&Dするだけで、Ruby、Rails、Apache、MySQL、さらにMySQLの管理ソフトとしてphpMyAdminが使えてしまうというスグレモノ。新しいものを始める時にひょっとしたら一番面倒かもしれない実行環境を整えるまでのストレスがとんでもなく軽減されます。しかも、提供者は"Rolling on Ruby on Rails"を書いたCurt Hibbs。記事中のcookbookアプリケーションが実際に実行できる状態でサンプルアプリケーションとして入っているという、Rails入門者にはうれしいオマケ付。

ということで、実際に使ってみました。

  1. Instant Railsのサイト[Download]ページから最新版のInstantRails-1.0-preview5-win.zipをダウンロード。適当なディレクトリ(スペースは含んではいけないそうです。)へ解凍。解凍後のサイズは128MBほど。
  2. InstantRails.exe を実行。
  3. 現在のパスを実行環境として設定して良いかを確認してくる("Instant Rails has moved from "E:\Dev\RubyDev\InstantRails-Project\trunk\InstantRails" to "copy-to-directory-path". Regenerate configuration files?")ので、OKと答える。*1
  4. ApacheとMySQLのサーバーが起ち上がり、信号がStarted(Green)になったら準備完了。Instant Railsウィンドウの小窓上のTマークのアイコンを押すとメニューが開いて各種アプリケーションへアクセスできます。

ここで、実際に使ってみる前に日本語環境でハマリそうな点を一個だけ。TマークのアイコンからConfigure > Database ( via phpMyAdmin )でphpMyAdminが起動できるのですが、2005年11月現在の1.0preview5の日本語環境では下記のエラーが発生します。

Notice: Undefined index: UTF-8 in e:\instantrails\phpmyadmin\libraries\database_interface.lib.php on line 165

Warning: Cannot modify header information - headers already sent by (output started at e:\instantrails\phpmyadmin\libraries\database_interface.lib.php:165) in e:\instantrails\phpmyadmin\libraries\header_http.inc.php on line 14

Warning: Cannot modify header information - headers already sent by (output started at e:\instantrails\phpmyadmin\libraries\database_interface.lib.php:165) in e:\instantrails\phpmyadmin\libraries\header_http.inc.php on line 15

Warning: Cannot modify header information - headers already sent by (output started at e:\instantrails\phpmyadmin\libraries\database_interface.lib.php:165) in e:\instantrails\phpmyadmin\libraries\header_http.inc.php on line 16

Warning: Cannot modify header information - headers already sent by (output started at e:\instantrails\phpmyadmin\libraries\database_interface.lib.php:165) in e:\instantrails\phpmyadmin\libraries\header_http.inc.php on line 17

Warning: Cannot modify header information - headers already sent by (output started at e:\instantrails\phpmyadmin\libraries\database_interface.lib.php:165) in e:\instantrails\phpmyadmin\libraries\header_http.inc.php on line 20

Fatal error: Call to undefined function: pma_reloadnavigation() in e:\instantrails\phpmyadmin\header.inc.php on line 132

your-install-path\InstantRails\phpmyadmin\langのjapanese-utf-8.inc.phpを開いて、$charset = 'UTF-8'; を $charset = 'utf-8'; へと変更しましょう。$cfg['DefaultLang']のセットもしていないのに、なぜだかちゃんと日本語環境で起ち上がります。(phpMyAdminが日本語にならない人は、\InstantRails\phpmyadmin\config.inc.phpを開いて、$cfg['DefaultLang'] = 'ja';にしてみると解消するかも。)

では、Readme.txtに従って、添付のcookbookアプリケーションを使ってみましょう。

  1. Tマークのアイコンから、Configure > Windows Hosts fileで、「127.0.0.1 www.mycookbook.com」の行を追加
  2. Tマークのアイコンから、Rails Applications > Manage Rails Applications...
  3. cookbookの横のチェックボックスにチェックを入れて、Start SCGI Serverボタンをクリック
  4. ブラウザで、http://www.mycookbook.com/を開く

これだけ。まぁ、モノが出来上がっているので、当然といえば当然ながらRailsアプリが動いちゃいます。

現時点ではRails自体への支援機能はないのでRailsによる開発はすべてRailsの支援スクリプトで行うのですが、これはRails自体のスクリプトが充実しているので特に不便は感じません。とにかく試すのにRuby入れたり、Rakeを入れたり、RubyGemを入れたり、Rails入れたり、MySQL入れたり・・・と右往左往しなくて済むのはありがたいところ。環境がフォルダ単位で完結しているので、新しいバージョンのRailsをちょっと試したいときにもいいかも。

現在はWindows環境のみを対象に開発されてますが、Linux, BSD, OSX版の提供プランもあるとのこと。今後に期待です。

*1 : この時点でポートが競合していると、警告が出ます。私の環境ではApacheがIISとMySQLがセルフインストールしたMySQLと競合しました。適宜、サービスをシャットダウンするなり、アンインストールするなりして対応してください。

関連記事: Rolling on Ruby on Rails - Japanese Translation - p1

 

オススメ日本語Rails情報 (あさまし度:85%)

Agile Web Development with Railsの翻訳

オーム社さんから来年の2月ごろに出る予定です。まだ公式なアナウンスはありませんので、書店などへのお問い合わせは今しばらくお待ちを。

Journal In Time
http://shugo.net/jit/20051013.html#p01

前田修吾さんが監訳されているそうで、期待して挙げておきます。PDF買ったけど、日本語版出たら間違いなく買っちゃいます。

WEB+DB PRESS Vol.28

高橋メソッドの高橋征義さん&Rubyの会・吉田和弘さんによる記事。Railsの思想にも踏み込んだ高橋さんの記事は初期Railsの決定版的内容。ActiveRecordやTest::Unitを扱った吉田さんの記事は入門が終わって、さて自分のアプリを作ってみようというときに足がかりになる内容。どちらもとてもオススメ。scaffoldのgenerateで失敗する方は、"ruby script/generate User"を"ruby script/generate User User"でいけるはず。(仕様が変わったのだそうで)

WEB+DB PRESS Vol.28
WEB+DB PRESS Vol.28
posted with amazlet on 05.11.14
WEB+DB PRESS編集部
技術評論社 (2005/08/25)
売り上げランキング: 5,447

開発の現場 vol.002

川o・-・)<2nd lifeのgorouさんによるRails記事。Ajax+RailsでAmazonやGoogleのWeb Serviceを使いまくるというイマドキのプログラミングをまとめて楽しめる記事。最後にはmap.rails2u.comを作るところまで行ってしまう。実は欄外の注でうちのRolling on Ruby on Rails訳を紹介して頂いていたりする。どうもありがとうございます。(言う機会がなかったので、こっそりお礼を言っておいてみる)

で、そのgorouさんのRails Wiki

http://wiki.rails2u.com/

Ruby on Rails Wiki

こちらは別の日本語RailsWiki。Rubyコミュの人が多そう。

http://wiki.fdiary.net/rails/

るびま

基本。

http://jp.rubyist.net/magazine/

RailsでWikiクローンを作る

RailsでWikiクローンを作る ( pylori*style )
http://tam.qmix.org/archives/2005/08/railswiki.html

「XREAでRailsを使うには」メモ

XREA で Ruby on Rails を使う ( pylori*style )
http://tam.qmix.org/archives/2005/03/xrea_ruby_on_ra.html

xrea + rails + mysql + typo ( 川o・-・)<2nd life )
http://d.hatena.ne.jp/secondlife/20050621/1119365089

英語情報

Railsリファレンスドキュメント
http://rails.rubyonrails.com/

RailsWiki
http://wiki.rubyonrails.com/rails/

オマケ

こちらは試したことないけど、こんなのもあったりする。

Ruby on Rails IDE - The RadRails
http://www.radrails.org/

  

Rolling on Ruby on Rails - Japanese Translation - p5

by tanabe on October 06, 2005

Pages: 1, 2, 3, 4, 5

レシピをカテゴリー分けする

これでレシピとカテゴリーをもったクックブックになった。あとは紐付けが必要だ。レシピがなんらかのカテゴリーに所属するようにしたい。これはrecipesテーブルにフィールドを追加してそれぞれのレシピのカテゴリーidを持たせて実現しよう。あとはカテゴリーのドロップダウンリストを使えるようにするためにレシピにedit メソッドを追加しよう。

まず、categoryテーブルのキーと対応するようにint(6)category_id フィールドをrecipe テーブルへ追加する。Figure 48の通り。

the recipe table with its new category_id
Figure 48. 新しいcategory_idを持ったrecipe テーブル

このフィールドにはレシピの所属するカテゴリーのid が入る。ここでRecipe モデルクラスにもこのことを教えてやろう。

c:\rails\cookbook\app\models\recipe.rbc:\rails\cookbook\app\models\category.rb を開いて、Figures 49 ,50のように各モデルクラスに一行追加する。

setting relationships in the Recipe model
Figure 49. Recipe モデルにリレーションシップを設定

setting relationships in the
Category model
Figure 50. Category モデルにリレーションシップを設定

これでRailsに、レシピは一つのカテゴリーに所属することと一つのカテゴリーは複数のレシピを持てることが伝えられるのがわかるだろう。実際にRubyのコード上でも、これらの宣言(has_manyやbelongs_to)がデータ同士のリレーションシップを表現するメソッドを生成する。

例えば@recipeとしてレシピオブジェクトがあったとすると、カテゴリー名を得るためには@recipe.category.nameというコードがあればいい。同じように@categoryというカテゴリーオブジェクトがあったなら、このカテゴリーに属するすべてのレシピのコレクションを使いたいときは@category.recipesと書けばいい。

さて、そろそろレシピをカテゴリーに分類するためのレシピのedit処理とテンプレート(template from the scaffolding)の仕上げに入ろう。c:\rails\cookbook\app\controllers\recipe_controller.rb を開いたら、Figure 51のようにeditメソッドを追加しよう。

the Recipe controller's new edit method
Figure 51. Recipe コントローラーの新しいedit メソッド

このメソッドはテンプレートがレシピの編集("edit recipe")ページを作成するときに使われる二つのインスタンス変数を作成している。@recipeはぼくらが編集したいレシピだ(idパラメータはウェブリクエストから渡される)。@categoriesはデータベース中のすべてのカテゴリーのコレクションだ。テンプレートがカテゴリー選択のドロップダウンリストを作成するのに使われる。

c:\rails\cookbook\app\views\recipe の中にedit.rhtml という名前のファイルを作成して、下記のようなHTMLのテンプレートを記入しよう。下のコードはほとんどは普通のHTMLで、カテゴリー選択のドロップダウンリストを作成するために<select> タグと<option> タグが仕掛けられている。

<html>
 <head>
  <title>Edit Recipe</title>
 </head>
 <body>
 <h1>Edit Recipe</h1>

 <form action="../update/<%= @recipe.id %>" method="POST"">
  <input id="recipe_id" name="recipe[id]" size="30" 
         type="hidden" value="<%= @recipe.id %>" />
  <p><b>Title</b><br>
  <input id="recipe_title" name="recipe[title]" size="30" 
         type="text" value="<%= @recipe.title %>" />
  </p>
  <p><b>Description</b><br>
  <input id="recipe_description" name="recipe[description]" 
         size="30" type="text" 
         value="<%= @recipe.description %>" />
  </p>
  <p><b>Category:</b><br>

  <select name="recipe[category_id]">
   <% @categories.each do |category| %>
       <option value="<%= category.id %>" 
         <%= ' selected' if category.id == @recipe.category_id %>>
         <%= category.name %>
       </option>
   <% end %>
  </select></p>

  <p><b>Instructions</b><br>
  <textarea cols="40" id="recipe_instructions" 
            name="recipe[instructions]" 
            rows="20" wrap="virtual">
    <%= @recipe.instructions %>
  </textarea> </p>
  <input type="submit" value="Update" />
 </form>

 <a href="/recipe/show/<%= @recipe.id %>">
   Show
 </a> | 
  <a href="/recipe/list">
  Back 
 </a>

 </body>
</html>

@recipe@categories の変数が使われているのが確認できる。選択リストを作るためにすべてのカテゴリーをループさせている所に注目してほしい。<option> タグを見て、編集中のレシピが属するカテゴリーが選択された状態にするためにタグがどのように使われているかを理解してほしい。テンプレートをよく見て、試してみてほしい。

ブラウザでhttp://127.0.0.1:3000/recipe/list を開き、レシピ"Ice Water"を編集しよう。Figure 52のようにカテゴリーを"Beverages,"にしよう。

changing the category for a recipe
Figure 52. レシピのカテゴリーを変更する

最後のステップへ行く前に、データベース上のすべてのレシピがカテゴリーを持っていることを確認してほしい。それぞれを編集(Edit)し、カテゴリーを選択して、更新しよう。これが漏れていると、次のステップでエラーになる。

レシピ一覧にカテゴリーを表示させる

これが最後のステップだ。さっき作ったlistのテンプレートをいじって、それぞれのレシピのカテゴリーが表示されるようにしよう。

c:\rails\cookbook\app\views\recipe\list.rhtml を編集して、以下のようにする。

<html>
<head>
<title>All Recipes</title>
</head>
<body>

<h1>Online Cookbook - All Recipes</h1>
<table border="1">
 <tr>
  <td width="40%"><p align="center"><i><b>Recipe</b></i></td>
  <td width="20%"><p align="center"><i><b>Category</b></i></td>
  <td width="20%"><p align="center"><i><b>Date</b></i></td>
 </tr>

 <% @recipes.each do |recipe| %>
  <tr>
   <td><%= link_to recipe.title, :action => "show", :id => recipe.id %></td>
   <td><%= recipe.category.name %></td>
   <td><%= recipe.date %></td>
  </tr>
 <% end %>
</table>
<p><%= link_to "Create new recipe", :action => "new" %></p>

</body>
</html>

http://127.0.0.1:3000/recipe/list をブラウズして確認してみよう。Figure 53のように見えるだろうか。

recipes listed with categories
Figure 53. カテゴリーと共に表示されたレシピ一覧

読者のための次のステップ

おめでとう。これであなたもRailsアプリケーションを組み上げることができた。もちろん、まだまだ足りないところはある。それでもこれはちゃんと動く。

あなたのための宿題をいくつか。

  • レシピを削除することができない。editテンプレートに削除ボタン(かリンク)を追加してみよう。
  • レシピ一覧のページにカテゴリー編集のページへのリンクがない。どうにかしてほしい。
  • 特定のカテゴリーのレシピだけを表示するようなことができると便利だ。例えば、snackのレシピだけを全部表示させたいことがあるだろうし、あるいはbeverageのレシピだけを全部一覧したいこともあるだろう。レシピ一覧のページに各カテゴリーの名前を並べて、そのカテゴリーの全レシピだけを表示するページへのリンクにしてほしい。

この記事は二つのパートに分かれており、こちらはその一つ目のパートになる。二つ目のパートでは上の項目を実装していくのだが、あなたがそれをじっと待っている必要はない。これらを自分で実装してみるのはRailsでの開発のとてもいい第一歩になると思う。

Parting Thoughts

Ruby on RailsはWebアプリケーションの開発をまったく新しい次元に押し上げた。Railsが肩代わりしてくれるので、あなたはもうこれまでのうんざりするような作業をしなくて済むようになった。もしRailsの命名規約に従わないようなレガシーデータベースを使わないといけなくても、Railsを使うことによる生産性の向上を諦めないといけないわけじゃない。どのテーブル名とカラム名を使えればいいかをRailsに明示する方法も残されている。

さぁ、これでどれだけ手軽にWebアプリケーションが作れるかの触りを見てもらったし、もう他のやり方でやろうとは思わないんじゃないかな。

たぶんあなたの雇い主は特定のフレームワークやプログラミング言語をあなたに強いてきたと思う。あなたにはまだ数日の猶予があるんだから、Railsでプロトタイプを作ってボスに言ってやろう。「アプリケーションの全体をRuby on Rails使って作っちゃいました。もしお望みなら、我々にはあと数ヶ月残されています。当初の予定どおりのものに仕上げることもできますよ。」(ニンマリ)

資料集

Webサイト

メーリングリスト

Curt Hibbs は30年以上の経験の中で数えきれないほどのプラットフォーム、プログラミング言語、テクノロジーを股にかけてきたSaint Louis, Missouriに住むシニアソフトウェアデベロッパーである。


  

[memo] Ruby on Railsメモ

by tanabe on August 28, 2005

Rails話。とりあえずメモメモ φ(..) 。

僕は Rails のところで、Rails で作ったアプリケーションはどういう環境で動かすのが一般的なの? mod_ruby みたいなのを使うの? という質問をしました。前々からすごい気になってて、質問で積年の疑問が解消されてすっきりしました。答えとしては FastCGI、mod_ruby、lighttpd、みたいな感じ。

Lightweight Language Day
http://d.hatena.ne.jp/naoya/20050828/1125201739

それから 川o・-・)<2nd lifeな方のエントリからも。

あとid:naoya:20050828:1125201739について補足。Railsではデフォルトで、dispatcherがdispatch.cgi, dispatch.fcgiと二種類作られて、開発する側はdispatch.cgiを使えばcgiとして、dispatch.fcgiを使えばFastCGIとしてまったく意図せず切り替えが可能。なのでそこらへんは全く頭悩ますことなくていいんだよね。mod_rubyで動かす場合、mod_ruby開発者の前田さんがrails-dispatcher.rb を作っているのでそれを利用すればOK。

LLDN
http://d.hatena.ne.jp/secondlife/20050828/1125208676

ひさしぶりの更新が手抜きですいません。。

  

Rolling with Ruby on Rails - Japanese Translation - p1

by tanabe on June 05, 2005

見知らぬ極東のRubyistへ丁寧で親切な対応をしてくれたCurtONLamp.comへ最大級の感謝を込めて。

元記事はこちら(You can read the original article from here!)

  • nak2kさんからのご指摘で、リンク先を修正しました。'Seeing is Believing'の箇所の表記を修正してみました。どうもありがとうございました。
  • kdmsnrさんからの情報で、リフレクションによるRailsの自己解析の辺りの話が理解できました。文章修正しました。どうもありがとうございました。
  • おおやさんからのご指摘で、ideaに関する訳を修正しました。どうもありがとうございました。
  • 匿名希望さんからのご指摘で、本家でのedit.rhtmlのコードへの修正を反映しました。どうもありがとうございました。

2008.7.28 追記

Rolling with Ruby on Rails は Rails 登場当初のすばらしい内容のチュートリアルでしたが、Rails も Ver2.0 系に入った今、この内容を参考にしながら入門しようとするとかえって混乱することになると思います。

これまで、かわりに紹介すべき優れた内容のチュートリアルに思い当たらなかったため、問題を感じながらそのままにしていましたが、現在の環境に対応ししかも非常に優れた内容の書籍が出版されているのでここで紹介いたします。

進化の早い Rails ですから、この内容も直に時代遅れにはなるでしょうが、当面の基礎とするにはよい内容が網羅されていると思います。

Rails of Ruby on Rails ~Case of LOCUSANDWONDERS.COM~
Plan de Sens 清水 智雄
毎日コミュニケーションズ
売り上げランキング: 76302

Rails Ver2.1 で「バリデーションと日本語対応」のサンプルコードどおりには動作しなくなっています。「Rails2.1にしたらgettextがエラーになってしまう場合の対処方法」の対応を入れると動作します。

追記の最後に、私と Rails を出会わせてくれた Rolling with Ruby on Rails にあらためて感謝します。

2008.7.28 追記ここまで

Pages: 1, 2, 3, 4, 5

Rolling with Ruby on Rails

by Curt Hibbs
01/20/2005

Ruby on Railsはとんでもない生産性を誇るWebアプリケーション作成フレームワークだ。

きっとRuby on Railsって名前を聴いたことはあると思う。ひょっとすると試してみたいと思ったこともあるかもしれない。でも、具体的なことはまだ知らないはずだ。

これからの話の中で、Railsを使ってWebアプリケーションを開発していく。この中ではRubyでのプログラミングについては触れないけれど、他のオブジェクト指向言語を知っている人なら、きっと問題なく読み進められると思う。(最後にRubyを学ぶためのリンクも貼っておいた。)

さて、Webアプリケーションを作り始める前に、いくつかの大事な疑問へ答えておこう。

Rubyって?

Rubyは純粋なオブジェクト指向言語だ。とてもきれいな構文を持ち、プログラミングをエレガントで楽しいものにしてくれる。Smalltalkのように整然として美しく、Pythonのように使うのも学ぶのも簡単で、それでいてPerlのように実用的だ。Rubyは1990年代の始め頃に日本で生まれ、ここ数年で英語での解説書やドキュメントが豊富に利用できるようになるにつれ、世界的にも人気の言語と成りつつある。

Railsって?

Railsは、データベースを使ったWebアプリケーションを作るための、オープンソースのフレームワークだ。何か他と違って特別なんだろうか?すでにたくさんのフレームワークがあって、そのほとんどはRailsよりもずっと歴史がある。なんだっていまさら新しいフレームワークのことを気にしなくちゃいけないんだろう?

『Railsを使ってWebアプリを作れば、一般的なJavaフレームワークを使うよりも、少なくとも10倍速く開発できるかもしれない』と言ったとしたら、あなたはどう思うだろうか?

それが実際にできるんだ − それも品質を犠牲にすることなしに。いったい、どうやっているんだろう?

その答えの一つはRubyというプログラミング言語にある。色々な他の言語では簡単にはできないようなことが、Rubyではとても簡単にできたりする。RailsはこのRubyの強力さの恩恵をたっぷり受けている。

そして残りの答えは、Railsの二つの考え方にある。二つの考え方とは、『省ソフトウェア』、そして『設定の共通ルール化』だ。

省ソフトウェア』は、実際にアプリケーションを作るときに書かなくちゃいけないコードが少ないことだ。コードが少なくて済むということは、開発期間が短いということだし、バグが少ないということでもある。そして、コードを読みやすく、メンテしやすく、変更に強いものにしてくれる。早い話が、Railsは君のコードからいらないものを取り除いてくれるんだ。

設定の共通ルール化』は、あのわずらわしいXMLによる設定ファイルがいらないってことだ。RailsではXMLの設定ファイルはまったく使われていない。その代わりにRailsで作ったアプリケーションは、いくつかの単純なプログラム上の決め事がある。この決め事は、Railsがリフレクションやその結果を通じて必要なことをすべて自分で明らかにできるようにしてくれる。Railsが知らなければならないようなことはすべて、あなたのアプリケーションのコードやデータベースの中にあるんだ。

'Seeing is Believing' − 百聞は一見にしかず −

ぼくたち開発者は、新しいものには付きもののもっともな売り文句をもう聞き飽きている。ぼくのあやしげな主張を聞いていぶかしむ君の顔が見えるようだ。

でも、本当に十倍速く開発できるんだ。

とはいえ、なにも目をつぶってとにかく信じろと言ってるわけじゃない。どうやって信じてもらうか、ちょっと説明しよう。まず、ぼくが必要なソフトウェアをインストールする。そして、Webアプリケーションを開発する様子を見てもらうとしよう。

ソフトウェアのインストール

今回はWindows 環境を想定してアプリケーションを作成する。LinuxやMacintoshのユーザーも同じように進められると思うけど、スクリーンの見た目はここで使われている画像とはちょっと違っているだろう。それから、環境にあったソフトウェアをインストールする必要もある。他のソフトウェアへのリンクについては、記事の最後にリソースの項としてまとめたので、そちらを参照してほしい。

これから作るWebアプリケーションのために、次のソフトウェアをインストールしていく。

  • Ruby
  • Rails
  • MySQL(およびそのGUI フロントエンドのMySQL-Front)

Step 1: Rubyのインストール

Ruby Windows installer
Figure 1. Windows版Rubyインストーラ

Rubyのインストールはとても簡単だ。

  1. 最新のOne-Click Ruby Installer for Windowsをダウンロードする。(Figure 1.を参照) 執筆中の現在、最新はruby182-14.exe だ。 (訳者注:2005年5月現在はruby182-15.exe が公開済み)
  2. ダウンロードしたexeファイルをダブルクリックしてインストーラを起動し、手順のとおりにインストールをする。特に指定したい項目がなければ、デフォルト設定のまま進めてOK。

注)LinuxやMacintoshユーザーの場合は、Rubyをインストールし、さらにRubyGemsをインストールする必要があるだろう。Windows版のインストーラにはRubyGems が含まれている。

Step 2: Railsのインストール

installing Rails through RubyGems
Figure 2. RubyGemsによるRailsのインストール

さぁ、それではRubyGemsを使ってRailsをインストールしよう。(チュートリアルで使用するバージョンは、0.9.4。Figure 2.を参照。)

  1. コマンドプロンプトから gem install rails --remote を実行する。
  2. RubyGemsがRailsの依存する他のライブラリもインストールしてくれる。依存ファイルのインストールの度に、インストールするかどうかを確認されるので、"y"(yes)と入力する。

訳者注)原文には特に記載がありませんが、ネットワーク環境によってはremoteオプションでのインストールでこけます。firewall の設定などネットワークの管理者へ確認して解決してください。RubyGems の--local オプションで回避することもできます。

Step 3: MySQLのインストール

MySQL Server setup wizard
Figure 3. MySQL Serverのセットアップウィザード

さて、あとはデータベースをインストールしなければいけない。Railsは様々なデータベースを利用できるが、ここではMySQLを使うことにする。

  1. 最新の"essential"バージョンのMySQLをダウンロードする。(今はWindows Essentials (x86) 4.1.7が最新だ。)
    (訳者注:2005年5月現在のバージョンは4.1.11。)
  2. ダブルクリックでインストーラを起動し(Figure 3.参照)、デフォルト設定のまま手順を進る。ただし、mysql.com アカウントへのサインアップは、スキップする。
    (訳者注:"MySQL.com Sign-Up"というタイトルの画面で、"Skip Sign-Up"を選択します。)
  3. 最後のパネルまで手順を進め、Finish ボタンを押すと、設定ウィザードが開始する。
  4. 設定ウィザードでもほとんどはデフォルト設定で手順を進ていく。ただし、security パネルにある"Modify Security Settings"のチェックは必ず外すこと。(Figure 4.参照)MySQLはバージョン4.1.7から新しい認証アルゴリズムを採り入れており、現バージョンのRails を含む古いクライアントソフトウェアと互換性がないためだ。チェックを外しておけば、パスワード認証を経ずにMySQLへアクセスできる。

訳者注)

  • データファイルの格納先を変更する必要があれば、"InnoDB Tablespace Settings"の"Modify"ボタンから変更します。不要ならそのまま"Next>"です。
  • 日本語をデフォルトで格納したい場合は、"Please select the default character set."で"Best Support For Multillingualism"を選択します。これでデフォルトのcharacter setがUTF8になります。ここをデフォルトにチェックをした状態で飛ばしても、データを定義する時にUTF8を指定すれば日本語データの入力は可能です。

MySQL configuration wizard
Figure 4. MySQLの設定ウィザード

Step 4: MySQL-Frontのインストール

MySQL-Frontは、MySQLデータベースのGUIフロントエンドだ。MySQL-Frontは安価な商用アプリケーションだが、30日の試用期間がある。この記事では、MySQL-Frontを使ってデータベースを構築していこう。好みによっては、コマンドラインからSQLコマンドを発行してもいい。

  1. 最新のMySQL-Frontをダウンロードする。(現在、バージョン3.1)
    (訳者注:2005年5月現在、バージョン3.2Build6.0。)
  2. インストーラを起動し、特に必要がなければデフォルト設定でインストール手順を進める。
    (訳者注:MySQL-Frontは日本語に対応しており、インストーラも日本語です。)

訳者注)

MySQLサーバーはCommand Line Clientが付属するため、こちらからSQLによる操作も行えますが、MySQL-Frontを使う方が簡単です。また、MySQLにはphpMyAdminというWebアプリケーションもあるので、PHP環境のある方やMySQL-Frontの試用期間が切れて困った方はこちらを利用してみても良いでしょう。

MySQL-Front installer
Figure 5. MySQL-Frontのインストーラ

Pages: 1, 2, 3, 4, 5