hajimeyo_rails
書籍紹介
(-)
本書は「Ruby on Rails」というWebアプリケーションフレームワークを使って、Webアプリケーションを開発するための入門書です。
「Webアプリケーションフレームワーク」という言葉はご存知でしょうか?
Webアプリケーションフレームワークとは、Webアプリケーションを開発するにあたって、お決まりの面倒な作業を開発者に代わって行ってくれる便利なものです。その最新のものの一つが Ruby on Rails で、その画期的な使いやすさのおかげもあり、現在Webアプリケーション開発の場で熱狂的なブームを巻き起こしつつあります。
とはいえ、どんなに便利なツールであっても、今までWebアプリケーションを開発された経験がない方には、その使いこなし方が想像できないかもしれません。また、他のフレームワークを使って開発をされている方にとっても、かえってその経験のために今までのやり方のイメージでRuby on Railsを捉えてしまう危険性もあります。
そこで本書の第二部では、最近流行のソーシャルな機能を持ったWebアプリケーションを、「ペアプログラミング」という手法を使って開発していく過程を、実況中継のような形で紹介していきます。もちろん文章の形にするために加工されてはいますが、単に開発手順を示すだけのものよりも、Ruby on Rilsによる開発の雰囲気がつかみやすいのではないかと思います。
加えて、第三部「開発の手引き」では、よく使われる機能を中心に、Ruby on Rails全体の機能についてまとめました。
本書を読めば、Ruby on Railsでの開発の流れがわかり、高度なアプリケーションを開発する際にも自信を持って取り組めるようになるでしょう。
目次
- はじめに
- 目次
- 第1部 Ruby on Railsへようこそ
- 第1章 Ruby on Railsの歴史と特徴
- 第2章 インストール
- 第2部 アプリケーション開発実況中継
- 第3章 Step0 何を作る?
- 第4章 Step1 プロジェクト開始
- 第5章 Step2 まずはスケジュールの閲覧
- 第6章 Step3 データの編集
- 第7章 Step4 ヘルパーの利用
- 第8章 Step5 ファイルを添付できるようにしよう
- 第9章 Step6 複数ユーザ対応(1)
- 第10章 Step7 複数ユーザ対応(2)
- 第11章 Step8 ログイン機能(1)
- 第12章 Step9 ログイン機能(2)
- 第13章 Step10 ユーザインターフェイスの向上
- 第14章 Step11 パフォーマンス向上
- 第3部 開発の手引き
- 第15章 エクストリームプログラミング
- 第16章 テスト駆動開発
- 第17章 データベース
- 第18章 データベースの管理Migration
- 第19章 モデル(ActiveRecord)
- 第20章 ビューとコントローラ(ActionPack)
- 第21章 プラグイン
- 第22章 ActionMailer
- 第23章 Rake
- 第24章 ユーティリティ
- 第25章 実運用
- 第26章 セキュリティ
- 付録
- 付録A Ruby on Railsドキュメントの読み方
- 付録B RubyGems簡易マニュアル
- 付録C 開発環境をサポートするツール
- 付録D Rubyコーディング規約
- 付録E Ruby on Railsに関する情報源
- 付録F Rubyに関する情報源
ソースコード
正誤表
- P.26 コマンド実行例 3 個め
- 「gem install rails --include-dependencies --version 1.1.2」→「gem install rails --include-dependencies」
- セキュリティ修正版の 1.1.5 が出たこともあり、バージョン指定せずにインストールするほうがいいでしょう。
- P.87 app/models/schedule.rb
- unlessで始まる行は、前の行とつながっている必要があります。
class Schedule < ActiveRecord::Base
def validate
errors.add('title', '入力されていません') unless attribute_present?('title')
end
end
- P.97 本文 5 行め
- 「属性を class="sunday" にして」→「属性を class="specialDay" にして」(報告:うえださん)
- P.138 app/views/account/list_group.rhtml 4 行め
- 「:confirm => '削除しますか?') %>」→「:confirm => '削除しますか?', :post => true) %>」(報告:Kさん)
- P.148 コラム 下から 4 行め
- 『「n:n」の場合』 →『「m:n」の場合』(報告:うえださん)
- P.150 app/views/account/list_user.rhtml 4 行め
- 「:confirm => '削除しますか?') %>」→「:confirm => '削除しますか?', :post => true) %>」(報告:Kさん)
- P.151 app/views/account/list_group.rhtml 6 行め
- 「:confirm => '削除しますか?') %>」→「:confirm => '削除しますか?', :post => true) %>」(報告:Kさん)
- P.162 app/models/user.rb 8 行め
- 「update_attribute "password", self.class.sha1(pass)」→「update_attribute("password", pass)」
- P.162 app/models/user.rb 一番下の行
- 「before_create(:crypt_password)」→「before_save(:crypt_password)」(報告:overheatさん)
- P.163 app/models/user.rb 下から 2〜3 行め
- 「validates_uniqueness_of(:login, :on => :create)」→「validates_uniqueness_of(:login)」
- 「validates_confirmation_of(:password, :on => :create)」→「validates_confirmation_of(:password)」
- P.163 コラム 下から 6〜7 行め
- 「before_create(:crypt_password)」→「before_save(:crypt_password)」
- 「新規作成時に」→「保存時に」
- P.164 コラム 4〜5 行め
- 「validates_uniqueness_of(:login, :on => :create)」→「validates_uniqueness_of(:login)」
- 「新規作成時に」→「保存時に」
- P.184 本文 4 行め
- 「ゆっくり... test_delete_failure と...」→「ゆっくり... test_destroy_failure と...」(報告:うえださん)
- P.223 本文 1 行めおよびその下のスクリプトのファイル名
- 「001_add_users_table.rb」→「001_create_users_table.rb」(報告:うえださん)
- P.251 本文 :include の説明
- 「:includeで指定するのは関連するモデル名」→「:includeで指定するのは関連するアソシエーション名」(報告:うえださん)
- P.252 本文最後の行 〜 P.253 本文 4 行め
- この部分削除(報告:うえださん)
- P.253 本文 :include の説明
- 「:include => :staff_codes」→「:include => :staff_code」(報告:うえださん)
- P.282 本文 8 行目
- 「http://www.example.com/users/にアクセスする」→「http://www.example.com/users/index/1にアクセスする」(報告:うえださん)
ご意見・ご感想欄
高橋さんと鈴木さんによるペアプロ(!!)とTDDでストーリーカードがタスクカードな「開発実況中継」をメインに、「開発の手引き」と付録で各トピックをフォロー。オビには「Ruby on Railsを使ったアジャイル開発を実況中継でお届けします」とある。読んでるとイロイロ想像がふくらみそうで、楽しみ。あと、薄いのが嬉しい。
XP です! タスクカード切ってペアプロしてます! 流石、「恋とハックはアジャイルが命!」を座右の銘にしてるかずひこさんです。(略) そして説明が丁寧。Ruby関西でRuby初級者レッスン・Rails初心者レッスンを受け持っているかずひこさんならではだなぁ。いい感じ。
この本の特徴は、なんといっても第2部の「アプリケーション開発実況中継」でしょう。(略) アプリケーションを一個作るのに、しかもペアプロな対話形式で本の半分を使う本はそうそう現れないでしょう。Railsとかでの少人数開発の雰囲気を味わいたい、というひとには最適です。Javaとかで何人にも分かれて、要所要所別々のひとが開発しているようなスタイルしか知らないひとだと、読んで「へー」と思うかもしれません。 また、RailsとかWebアプリには興味ないけど、アジャイルには興味がある、という人にも読んでいただけるとよいかもです。
お気付きの点などあれば、この下に追記してください。 適宜編集した上で、正誤表などに反映させたいと思います。
- 上記ソースの中身はいつごろ入るのですか。予定を教えてください。(ijk)
- ↑すみません、ちょっと正確に意味を把握できませんでした。hajimeyo_source.zip のアーカイブは空っぽではないはずなのですが。(かずひこ)
- NISをオフにしたら取得できました。広告ブロックなど個別にオフにしても、サイズ0のファイルが返りました。変ですけど結果OKです。失礼しました。(ijk)
- p.252 の exclusively_dependent の記述例ですが、:exclusively_dependent => "category" ではなく、:exclusively_dependent => true では? (うえだ)
- そうですね。ただ :exclusively_dependent オプション自体が deprecated なので、正誤表では「削除」にします。(かずひこ)
- p.162 のuser.rbにbefore_update(:crypt_password)を追加しないと、パスワード変更後にログインできなくなると思います。(overheat)
- before_create とあわせて before_save にし、change_passwordメソッドではハッシュ化しないようにしました。さらにいくつかの validation の :on => : create 指定を削除し、それにあわせて解説も変更しました。(かずひこ)
- p.95 の schedules_controller.rb の month メソッドで、現在時刻が必要になるたびに Time.now しています。年を取得した後、年をまたいでから、月を取得するタイミングでこのメソッドが呼ばれた場合に、表示されるカレンダーが一年前のものになってしまいそうです。 (zunda)
- 正誤表にあるp.142が真っ白なページなのですが。。。ひょっとして乱丁本?(redrisefirm)
- P.148 の間違いです。。。ごめんなさい。(かずひこ)
- p.83 app/views/schedules/_form.rhtml の下から2行目 'cols' => 40 は 'cols' => '40' ですよね。(こなみ)
- p.117 app/controllers/schedule_controller.rb の set_file_name メソッドの中で、添付ファイルの無いスケジュールを登録しようとするとNoMethodError が出てしまいます。Rails-1.1.4です。どこかで私が間違っているのかなぁ…(ごとうだいすけ)
- 手元では以下としています。
(略) begin params[:schedule][:file_name] = @file.original_filename rescue @file = nil end (略)
- 添付ファイルが存在しないのは別に例外的なケースではないので、例外処理にしない方が良いのではないかと思います。
def set_file_name
if @file.kind_of? StringIO
@file = params[:schedule][:file_name]
params[:schedule][:file_name] = @file.original_filename
end
end
- p.119 もう一つすいません。app/controllers/schedule_controller.rb の update メソッドの中で、添付ファイルがあるスケジュールに対して、添付ファイルの無い更新しようとすると添付ファイルが見えなくなってしまいます。(ごとうだいすけ)
- 手元では以下としています。
(略)
def update
set_file_name
find_schedule
unless @file
params[:schedule][:file_name] = @schedule.file_name
end
(略)
- p.172にある図11-1ですが、この画面だとパスワードとパスワード(確認)欄に非ハッシュパスワードが入っているように見えます。が、この画面をロードしたときはこうはならないですよね。具体的にはパスワード欄にハッシュ化されたパスワード文字列が入っていて、確認欄には何も入っていない状態でロードされるようです。(ymlのテストデータはハッシュ化した状態で持っているので)(redrisefirm)
- p.43 「SQLLite3、MYSQL の場合 (1)」コラムで MySQL ではじめに以下のコマンドで 'rails'@'localhost' ユーザーを作成する必要があるのが分かりませんでした。
mysql> create user 'rails'@'localhost'
また、「$mysql -u root mysql」も 「$mysql -u -p mysql」でないとエラーとなりました。(しぶや)
- p.86 test/functional/schedules_controller_test.rb(修正後)の「post(:create, :schedule => {:title => 'テスト'})」の部分を、このまま rake すると期待どおりの結果にならず、「parse error, unexpected tIDENTIFIER, expecting '}' (SyntaxError)」と表示されます。「タイトル」「題名」「東京」「大阪」などなら期待どおりの結果になります。「テスト」のほか「試験」「表題」「名古屋」などがエラーになります。OSはWindows XPです。utf-8でもこんなに文字化けのような現象が発生するのでしょうか?ちなみに、「テスト?」のように日本語文字列の最後に「?」を付けると、なぜかこの現象は解消するようです。データベース以前の問題だと思うけど、もしかしてMySQL5の問題?(yoshi)
ryutaroといいます。 63ページの rake db:migrate でつまずきました。
環境
Mac OSX 10.4.7
ruby-1.8.5 ソースからインストール
Posgresql-8.1.4 ソースからインストール
gem-0.9
ruby-postgresは、gemでC版インストール
railsは2006/08/28にgemsでインストール
この状況で62ページまでは、問題なく来ましたが、 63ページのrake db:migrateを実行すると
[18:35:03 ryutaro:~/myrails/scheduler] $ rake db:migrate (in /Users/ryutaro/myrails/scheduler) rake aborted! no such file to load -- postgres (See full trace by running task with --trace)
となります。 --traceを付けると
[19:03:17 ryutaro:~/myrails/scheduler] $ rake db:migrate --trace (in /Users/ryutaro/myrails/scheduler) ** Invoke db:migrate (first_time) ** Invoke environment (first_time) ** Execute environment ** Execute db:migrate rake aborted! no such file to load -- postgres /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
となります。どこに問題があるのでしょうか? 一つ気になるのは、postgresql-8.1.4をインストールの際普通は、postgresユーザーを作ると思いますが、自分は面倒だし、遊びでしか使わないので通常のユーザー"ryutaro”のままで作りました。
./configure --with-openssl --with-bonjour --with-python --enable-thread-safety make sudo make install sudo mkdir /usr/local/pgsql/data sudo chown ryutaro:ryutaro /usr/local/pgsql/data chmod 700 /usr/local/pgsql/data
.bash_profileにpgsql用の設定を加えて,ターミナルを再起動して
initdb --encoding=UTF-8 --no-locale
こんな感じです。 今回の件と関係あるのでしょうか?
↑とりあえず、全文消して上書きするのは止めてください。 それはそれとして、ruby-postgres のロードに失敗しているように見えます。
gem install postgres-pr
してからだと成功するでしょうか?(かずひこ)
- 「CentOS5」で試みていますが、P.26の「Rails」のインストールでつまずいています。環境は「ruby-1.8.5-5.el5」、「rubygems-0.9.4」。です。まず、「gem install rails --include-dependencies」とすると、
Bulk updating Gem source index for: http://gems.rubyforge.org
ERROR: While executing gem ... (Gem::GemNotFoundException)
Could not find rails (> 0) in any repository
となり全くインストールできず。試しに「gem install rails」とすると、
Bulk updating Gem source index for: http://gems.rubyforge.org
Install required dependency rake? [Yn] y
Install required dependency activesupport? [Yn] y
Install required dependency activerecord? [Yn] y
Install required dependency actionpack? [Yn] y
Install required dependency actionmailer? [Yn] y
Install required dependency actionwebservice? [Yn] y
Successfully installed rails-1.2.3
Successfully installed rake-0.7.3
Successfully installed activesupport-1.4.2
Successfully installed activerecord-1.15.3
Successfully installed actionpack-1.13.3
Successfully installed actionmailer-1.3.3
Successfully installed actionwebservice-1.2.3
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- rdoc/rdoc (LoadError)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
from /usr/lib/ruby/site_ruby/1.8/rubygems/doc_manager.rb:71:in `load_rdoc'
from /usr/lib/ruby/site_ruby/1.8/rubygems/doc_manager.rb:41:in `generate_ri'
from /usr/lib/ruby/site_ruby/1.8/rubygems/commands/install_command.rb:112:in `execute'
from /usr/lib/ruby/site_ruby/1.8/rubygems/commands/install_command.rb:111:in `each'
from /usr/lib/ruby/site_ruby/1.8/rubygems/commands/install_command.rb:111:in `execute'
from /usr/lib/ruby/site_ruby/1.8/rubygems/commands/install_command.rb:49:in `each'
from /usr/lib/ruby/site_ruby/1.8/rubygems/commands/install_command.rb:49:in `execute'
from /usr/lib/ruby/site_ruby/1.8/rubygems/command.rb:70:in `invoke'
from /usr/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:121:in `process_args'
from /usr/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:92:in `run'
from /usr/lib/ruby/site_ruby/1.8/rubygems/gem_runner.rb:30:in `run'
from /usr/bin/gem:23
となり、途中までそれらしく行くのですが、「actionwebservice-1.2.3」の後 エラーとなってしまいます。それともこれは正常にインストールされているのでしょうか。 ちなみに、「rails -v」とすると「Rails 1.2.3」とそれらしく表示はされます。(gfish 2007/08/05)
- ↑他サイトを参考に、「yum install rdoc」でRubyのドキュメント(多分)を読み込むことで、正常にインストールできました。(gfish 2007/08/06 自己レス)
- 2点教えてください。
[1]
P.69のRakeコマンドでのテスト実行ですが、
結果、「8 tests,〜 8 errors」となってしまいます。以降のテストも同様です。
エラーメッセージ:
ActiveRecort::StatementInvalid: PGError: ERROR: invalide byte sequence for encoding "UTF8": 0x8f
HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".
[2] 「P.87 app/models/schedule.rb----unlessで始まる行は、前の行とつながっている必要があります。 」ですが、 書籍通り、また正誤表通りに記述しても「app/models/schedule.rb:5: syntax error, unexpected kEND, expecting $end」と表示されエラーになってしまいます。 3行目、「errors.add('title', '入力されていません') unless attribute_present?('title')」だけ除外すれば通るのですが・・・ 原因として考えられそうなことはありますでしょうか?
[環境] WindowsXP / Ruby 1.8.6 / PSQL 8.2.4 / Rails 1.2.3
- 文字エンコードの問題では?
- Rails は初挑戦です。(croco)
Rails 入門関係の書籍はあまた出ていますが、 とても分かりやすそうな内容だったので、 「はじめよう Ruby on Rails」を購入しました。 (ソースコードも便利に使わせて戴いています)
Cygwin にRails をインスールして、 "script/generate scaffold Schedule" までは順調だったのですが、 Webブラウザから"http://127.0.0.1:3000/schedules/list" へのアクセスのところで立ち往生してしまいました。
どうも、何も考えずにRails 2.0 をインストールしてしまったのが原因のようです。
これから先の学習のことを考えても、 1.1 にバージョン・ダウンするのが最善の方法でしょうか。 アドバイスを戴ければ幸いです。
- とりあえず、雛型アプリを2.0 で表示
% rails scheduler -d sqlite3
% cd scheduler
% ruby script/generate scaffold Schedule \
datetime:timestamp title:string content:text
% rake db:migrate
% ruby script/server
http://localhost:3000/schedules
でアクセスできました。
Keyword(s):[Grade A stuff. I'm uqnusetoniably in your debt.]
References: