3歩あるけば全てを忘れる。
そんな鶏頭で豚肉な人がプログラムとかいろいろやってみるブログのつもり。
運営してるサイト:新刊情報お知らせサイト

2007年6月21日木曜日

チュートリアルの続きと、いろいろいじってわかったこと、わからなかったこと。

■チュートリアルの続き

今までやりながら書いていたので無駄に長かったので、終わってから書こうと思ったけどやっぱり長かった。
くそう。
とりあえず今さっきオートで作った蔵書管理アプリに、検索ページと、新規データ入力時に重複や間違いデータをはじくプログラム、あとは日付の表示を変えるのを追加してみた。

●検索ページを追加

まずは
app/views/books/list.rhtml
をコピーして名前を
app/views/books/search.rhtml
に変更。

中に

<%= form_tag %>
keyword:<%= text_field_tag 'keyword', params[:keyword] %>
<%=submit_tag 'search'%>
<%=end_form_tag%>

と追加。

次に
app/controllers/books_controller.rb
をあけて、

def search
if request.post?
@books = Book.find(:all,:conditions=>['name like ?','%'+params[:keyword]+'%'])
else
@books =[]
end
end

を追加したら完成。
だったと思う。

http://localhost:3000/books/search

から入ると検索用のFORMが出てくるので、なんか入れてsubmitしたら検索結果が出てきた。
すごいなぁ。


●新規データ入力時に重複や間違いデータをはじくプログラム

app/models/book.rbでそういうのできるみたい。
「class Book ~」の行から「end」の行の間に以下のプログラムをねじ込め、とさ。

・isbnの欄には数字の1~9と、Xしか入力できないようにする

protected
 def validate
 errors.add('isbn','has invalid format') unless isbn=~/\A[0-9X]+\z/
 end

・isbnを重複しないようにする

validates_uniqueness_of :isbn

・nameが空だったら登録できないようにする

validates_presence_of :name

ふむ、これ系統はいろいろあっておもしろそうだなぁ。


●日付の表示を変える

デフォルトだと、本の発行年月日を選択するときの表記が「jun」とか「mai」とか、なんかもう自分で書いていてスペル絶対間違っている気がするがとにかく英語で出てくる。
これは事件だ。
なので直すとさ。

app/views/books/_form.rhtmlのなかに

<%= date_select 'book', 'release_on' %></p>

とあったのを

<%= date_select 'book', 'release_on',
 :use_month_numbers => true
%></p>

とすればいいそうだ。
ついでに

 :start_year => 1950,
 :end_year => Time.now.year,

を追加すれば、年のプルダウンが1950年から今年までのものになるそうです。


しかし、このフレームワークってのは便利なのかどうなのかだんだんわからなくなってきたなぁ。
まぁ、覚えちゃえば楽になるのかな。
ぶっちゃけ、そういうのあんま好きくないw


■いろいろいじってわかったこと

●別ページにFORMの内容をPOSTする方法

<% form_tag :action => 'search' do %>
keyword:<%= text_field_tag 'keyword', params[:keyword] %>
<%=submit_tag 'search'%>
<%end%>

searchページを作ったのはいいんだけど、listの一覧ページに検索文字を入力する欄がなきゃだめっしょ。
という事でいじってみた。
最初はsearch.rhtmlにのっけたプログラムをそのまま書いてみて挫折。
どうしようと思っていろいろ見ていたら、そういやnew.rhtmlでformを別ページにPOSTしてんじゃんと気づいて引っ張りだしていじくりまわすこと10分。
動きました。
10分かかった最大の敗因は、多分自分に投げる場合は<%= form_tag %>で%の後にイコールが入ってるけど、別ページに投げる場合は<% form_tag :action => 'search' do %>と、%の後にイコールがない。
これでひっかかったのでした。
情けない。

●リンクの張り方

<%= link_to 'リンクの名前', :action => '飛ぶ先' %>
とすれば、
<a href=飛ぶ先>リンクの名前</a>

searchページからリストに戻るページを作りたくて探して見たら他のrhtmlファイルに「<%= link_to 'Back', :action => 'list' %>」とあったのでコピペしたら動いたのでうれしい。


●全部のページにつくヘッダとフッタのあるとこ
app/views/layouts/books.rhtml

これがそうらしい。
app/views/の中のbooksフォルダ覗くとき、ちょいと気になったので「このドイツおらんだ」と書いたら全てのページに出てくるのを確認。
スタイリッシュなページが瞬時にまぬけ時空に。


●スタイルシートのあるとこ
public/stylesheets/scaffold.css

デザイン変えたいと思って探して見たら、前述のapp/views/layouts/books.rhtmlの中にヒントがあったのでscaffold.cssを探し出して背景を緑に、文字色を緑にしてリロード。
よし、目が痛い。
これでスタイルシートのある場所を把握した。
しかし目が痛い。
この苦しみを知らない人は人生損していると思うので是非やってみるべきだ。
と、すぐに元に戻した初夏のヘタレでした。


■いろいろいじってわからなかったこと

●存在しない日付のはじきかた

「ライド・オン・Rails」のチュートリアルでは本の発行日情報を「年月」しか登録しないようになっていたので、自分はもう一歩先を行ってやると思って「年月日」の登録ができるように改造。
いざ登録しようとした時、遊び心で「2007/02/31」を選択。
エラーが出た。
2007/02/13とかならとおるんだけどなー。
なんかはじく方法ないかなぁと思って目をつけたのが「app/models/book.rb」。
この中でFORMの中身があってるかどうか判別するために使っていた「validates_なんとかかんとか」でどうにかならんもんかと「ライド・オン・Rails」「Ruby on Rails入門」の索引からいろいろ探して読んでみたけど、結局わからずじまい。
はまり中なので放置だけど、いつか直してあげたいね。


●searchページで1件も検索に引っかからなかった場合「ネーヨ」と言いたいが言えない

これは多分、Ruby知らないのがいけないんじゃないかな?
と思ったがカンタンにWebアプリって言ってんだから、どこかに設定潜んでんじゃないかと邪推中。
でもチュートリアルの中で取っ掛かりになるようなヒントを見つけられてないので放置。
ていうか、0件の検索結果をただ表示するだなんて恥ずかしいじゃんねー。
これもいつかリベンジ。


●PHPにも普通にフレームワークあった。

自分、ヘタレながらもPHPが一番つかえるんですよねー。
あー。
なんでPHPにもフレームワークあんじゃねーかと疑わなかったのか。
久しぶりに開いた「百式」の中の人のブログ「idea*idea」で知ったんですけど。
CakePHPって言うらしいんです。
しかもタイミングがいいんだか悪いんだか、ちょーど挑戦記がはじまってるんですけど。。。

あー、どうしよー、RubyonRails投げてCakePHPに移行しちゃおうかなぁ……。
でもなんか悔しいなぁ。

あーーーーーーなーーーやーーーむーーーー。

とりあえずチュートリアルプログラムを動かしてみる

とりあえずインスコ終わったので本に載ってるチュートリアルプログラムを作って動かしてみようと思う。


そういやまだ疑問なのだが、Railsでなんか作って公開するとき、Webサーバのソフトってなんか入れる必要あるんかな。
ざっと見た感じこのままでもlocalhost:3000でローカルで見れるのはわかったんだけど、そのまま公開できるん?
まぁそれはおいおい、かね。


「Ruby on Rails入門」になんかカンタンなチュートリアルないかぱらぱらっとめくって見た。
あー、えーと。
この本はあれだね、あるていどRailsわかってからじゃないと使えんかもしれん。
入門って言うより、リファレンスに近いんでないかな。
まぁ、いろんなプログラムやってる頭いい人なら最初からこの本で覚えられるんだろうけど、自分には無理そう。
ちょっと封印して、ある程度慣れてから見るようにしよっと。


「ライド・オン・Rails」では、チュートリアルで蔵書管理のアプリ作って、本の後ろに行けば行くほどそいつを改造していくって流れで書かれているみたいだ。
まぁ、インスコ終えてもフレームワークがどうのRailsがどうのってはまったくもって意味がわからんので、チュートリアルを流して感じをつかんで行こうと思う。


「ライド・オン・Rails」のチュートリアルではなんかストーリーが書かれているんだけど、あんま血沸き肉躍る感じじゃないので割愛。
どうせなら蔵書管理アプリで世界を救うレベルのストーリーを入れて欲しかった。


さて、チュートリアル。

コマンドプロンプトでc:\開いて、チュートリアル用のフォルダを作ってそこに移動。
んでそこで


rails recipe


って打ってエンターしたらなんかcreateなんたらってのがいっぱいでてくる。
これが雛形だって。
recipeってのが蔵書管理アプリが入るとこになるんかな。


チュートリアル用のフォルダの中にrecipeフォルダができてるんで、そこに移動。
おー、このフォルダんなかにいっぱいフォルダがある。
こいつらが楽をさせてくれる人たちなのだろうか。


その中のconfigフォルダの中にいるdatabase.ymlさんがデータベースをつかさどっているらしい。
あけていじる。
developmentと、testと、productionの3箇所それぞれにデータベース名やユーザー名やパスいれて、encodingは自分で書き足す、と。


あーそっか、そういやデーターベース用意しなきゃ。
早速MySQLのAdmin君にがんばって頂こう。
使い方良くわからんので、昨日見た「10分で作るRailsアプリ アプリケーション編(http://masuidrive.jp/rails/rails_app.html)」の冒頭のとこをもう一度見てやってみる。

テーブルの作成はまたもやコマンドプロンプト叩けばRails君がやってくれるらしい。
すげえなぁ、一晩でやってくれそうだ。
recipeフォルダのなかで

ruby script/generate model Book

と、打ってえんた。
にょろりと画面が動いたかと思うと、recipeフォルダの中のdbの中にmigrateってフォルダができて、そこに001_create_books.rbってのが出現するらしい。
そいつの中にテーブルの設定書いて

rake migrate

でテーブルが生成されるらしい。
早速やってみる。

あんれー?
エラーが出るー、と思ったら設定したユーザーに権限渡すの忘れてたよ。
渡したらちゃんと動いたー。
のかな?
MySQLのAdmin君でチェックしたらdevelopment用のDBと、test用のDBにちゃんとテーブルできてる!
なぜかproduction用のDBにはできてないけど。
いいのかな?
まぁいいや、本にはなんもかいてないし。

さてさてお次は、登録画面を簡単に作ってくれるらしいscaffold。
コマンドプロンプトで

ruby script/generate scaffold Book

と打てば、もう蔵書管理アプリの登録部分ができるんだってさ。
まじかね。
やってみる。
お?
なんかいっぱい生成されたぞ。
何故かBookと打ったのにできたファイルではBooksになってるとこが不思議。
でもそれでいいと本は言っているので信じよう。

どうやらもうチェックできるらしい。
Rubyにはなんか組み込みのWebサーバーがついているらしい。
その名も「WEBrick」?
こいつつかえばアパッチ野球軍とか使わないでも公開できるんかな?
よくわからんのだけど、とりあえずこいつを起動させる。
コマンドプロンプトで

ruby script\server

で起動。
ブラウザでlocalhost:3000のbooksを開いたら、なんかキター!

うへぇ、動いてるよ、なんだこれ。
すげーな、キモい。
とりあえず動いたなぁ、あぁ動いた。

Railsってすごいんだなーと思いつつ、とりあえず休憩。

もうちょっとだけインスコ

いろいろググって見ていたら、「10分で作るRailsアプリ for Windows」というのを発見。

http://masuidrive.jp/rails/

10分でインスコしてアプリ作っている動画を公開している。
すんげー。
ちょっと古いのでMySQLのページなんか変わってるけど、十分役立ち。

本を見るとMySQLをコマンドプロンプトからいじってデータベース作ってたりするんだけど、自分はコマンドプロンプトからいじるのめんどうなので、この動画の中で使っていたMySQLAdministratorってのが欲しくなった。
なので、早速インスコ!

MySQLのページに飛んで、えーと。
あれ?
ない。
なんでだ?

それらしいのを探してみるか。
えーと、動画では「Tool」のとこから落としていた……って、ダウンロードページにある「MySQL GUI Tools」これか?
とりあえず落としてみよう。
ファイル名は「mysql-gui-tools-5.0-r12-win32.msi」。
ダブルクリックでインスコ。
完了して「スタート」→「プログラム」→「MySQL」のなかに「MySQLAdministrator」を発見!

早速動かしてみる。
サーバーをLocalhost、ユーザーをroot、パスワードを入力しておー、はいれた。
左の柱の「カタログ」でデータベーステーブル作ったりできるみたいなのを確認。
なんか「phpmyadmin」みたいなもんなのかな。
使い方は、まぁ、適当で何とかなるだろう。

とりあえずこれでコマンドプロンプトから開放されるかな?

2007年6月20日水曜日

Ruby on Railsをインスコしてみる。

「ライド・オン・Rails」にはWinXPでのRubyのインスコは「One-Click Ruby Installer」ってのがあるからそれ使えと書いてある。
URLは、

http://rubyforge.org/projects/rubyinstaller

今日見た限り、最新版はどうやら「ruby1.8.6-25」ってやつらしい。
exeとmd5の2種類のファイルがおいてあったけどexeの方を落としてみる。
落ちたexeをダブルクリックした後は「Next」を連打連打連打。

さて、ほんじゃRubyGemsのインスコ。
って、これさっきのでもう入ってるのかー。
1つ作業が浮いた。
もうけもうけ。
4が5になったら怒るけど、4が3になるのは大歓迎なり。

RailsはRubyGemsのパッケージマネージャーからインスコするそうで。
「スタート」→「プログラム」→「Ruby-186-25」→「RubyGems」→「RubyGems Package Manager」
で、ぱっけマネージャーを開く、と。
コマンドプロンプト見たいのが開いたー。
そこで

gem install rails -y

って打ってえんたー。
コマンド入力に戻ったら終了、って長え!
多分ほっといたら終わるだろうから最後のステップ、MySQLを入れてしまおう。
以下のURLからGETできるらしい。

http://www.mysql.com/
http://div.mysql.com/downloads/

って……どれおとせばいいんだ?
悩んでいるうちにRailsのインスコが終了してしまったではないか。

「MySQL 5.0 Community Server」ってのがあるけど、これか?
もうひとつの「MySQL Enterprise」ってのにはお金のマークがあるのでなんか嫌だからせっかくだから「MySQL 5.0 Community Server」を選んでみるか。
選んで、Windows用のダウンロードページ行って「Windows Essentials (x86)」ってのを選んで見る。

って、MySQL落とすのに登録必要なのか!

仕方ないので「NewUsers」から登録。
って、「ZIP/Postal Code」って何?
あ、郵便番号?
なんかそんな気がしたので入れてみたら通った!
勝利!
そんなこんなでようやっとダウンロードおしまい。
疲れる。

落としたファイルの名前は「mysql-essential-5.0.41-win32.msi」。
もうバージョン5なんだねー。
昔さわった時は3だったっけ。

とりあえずダブルクリックでインスコ開始。
「ライド・オン・Rails」には気をつける点は3つだけと書いてあったので、その点だけ気をつけて「Next」連打!
ちなみにその3点は、

・吹き出しに「日本語」と書いてあるアイコンが出たら、そのアイコンにチェックを入れる
 (チェックのトコに「Best Support For Multilingualism」って書いてある)
・コマンドプロンプトっぽいアイコンが出てきたら、そのアイコンにチェックを入れる
 (チェックのトコに「Include Bin Directory in Windows PATH」って書いてある) 
・パスワード入力画面が出たらパスワードを入れる

ってかんじ。
意味は知らん。

さーて、これでインスコ終わりだー。
と、思ったら。

なんか一番最後に「MySQL/Rubyアダプタのインストール」って項目が!
なんだよ、せっかく1つ手間が省けたと思ったのに!
増えちゃったよー。
まぁ、これはやんなくてもいいらしいんだけど、やったほうが性能が上がるって書いてあるしやっときますか。

「ライド・オン・Rails」にはコマンドプロンプトから実行して入れろって書いてあるけど、これってRubyGemsのパッケージマネージャーから、って意味でいいのかな?
とりあえずさっきみたいにぱっけマネージャーひらいて

gem install mysql

と入力。
したらなんか選択肢が出てきたので「1」を押してエンター、ちまちまっと画面が動いてインスコ終了。

よーし、終わった!
後でテストをしてみよー!

皮をはがしたら皆赤くなっちゃったのだがこれってRubyだから?

自分は本のカバーが嫌いです。
なんかペリーってなって、カリリってしたかと思うとバリってなるし、邪魔。

なので買ってきた本はまずカバーをはがします。
もちろん買ってきたRailsの本もはがして見たんですが、そろいもそろって見事に赤い。
やっぱりRubyだから赤なんでしょうか?
それとも共産主義?

まぁ、それはともかく早速インスコしてみる。
Railsの本を2冊手にしてインスコの項を目次から探す。
フレームワークがどうのこうのってのはどうせ読んでも覚えられないので後で読む。
とりあえず動かして見たいし。
Rubyの本はわかんなくなったら読めばいいよね?

入れるパソはメインのWinMX機。
「ライド・オン・Rails」にはインスコの方法が16ページにわたって書いてあったけど、「Ruby on Rails入門」には巻末に「instantrailsとかいうのがあるから以下のURLに行ってインスコ方法を見ろ」の一言だけが乗ってた。
とり、16ページ分も作業すんのはめんどいのでそのURLを打ち込んで見ることにする。

http://rails.netlab.jp/rails/published/rails_on_WinXP_instantrails

ん、なんか長いのでやめ。
いろいろ説明してくれてるからビギナー向けにいいんだろうけど自分はビギナー以前なのであきらめは早い。
本読んでからやればいいんだろうけどねー。

と思って「ライド・オン・Rails」にもどったけど、こっちもこっちでやっぱめんどくさい。
ざっと見た感じで

・Ruby入れる
・RubyGems入れる
・Rails入れる
・MySQL入れる

と4つもなんかいじんなきゃいけないみたい。
でもまぁ、最初は1個づつ入れてった方が理解できると思われるのでこっちの方式でやってみようかな。

将来Railsをちょくちょく使うようになったらinstantrailsを試してみよう。
自分的には「カンタンにWebサービスが作れる」ってのは、インスコも含めなのでねー。

フレームワークに手を出して見ようと思ってRuby on Railsの本買ってきたけどRuby使えない件。

フレームワーク使うとカンタンにWebアプリが作れるそうなのでググって見たら「Ruby on Rails」ってのが流行らしいので本を買ってきた。

・ソフトバンククリエイティブ「ライド・オン・Rails」
・秀和システム「Ruby on Rails入門 やさしいRailsの育て方」
・ソフトバンククリエイティブ「たのしいRuby 第2版」

いつもどおりめんどくさいのでネットで下調べもほとんどせずに直接本屋に行って、棚の配置的に売れてそうなのと売れてなさそうなの一冊づつと、あとだいたいRubyしらんので初心者向けっぽい一番目立つやつを一冊。
いつも本買うときはこんな感じ。
どれが売れてそう、もしくは売れてなさそうな配置になってたやつだかは内緒。

フレームワークってなんだかよくわからんのでこれで少しは勉強せにゃかもだ。
自分はPHPとASP(VB)くらいしか使ってないのでRuby覚えるのもいいかもねー。

とりあえず、LinuxなんてよくわからんからWinでアパッチまわせばいいや、でPHPやVBだって動けばいい、の超適当な自分でも便利に使えるかどうかの調査用のブログってとこでひとつよろしくです。

自己紹介

三十路に突入したNiceな男。 鶏頭で豚肉ながらも2007年5月に臀部の腫瘍により1月入院し、5kgの減量に成功した。 「せっかく減った体重です。空いたところに美味いものでも詰め込んでみせましょう」めあど:kjm3.desu@gmail.com