チュートリアルを動かしてみる

[Ruby]チュートリアルを動かしてみる

進まないなあ・・・

平日睡眠時間4時間の生活をバシバシ続けているなかで、土日は子供の相手をしつつ、Ruby/Railsの本を読んでやってみる、っつうのは、なかなかに時間の制約があるねえ、といった感じの今日この頃である。とはいえ、実は楽しいので、ゆっくりながら進むのである。
今回は、InstantRailsを使って、Rails本のチュートリアルを動かしてみるのである。

なにはともあれ、Install

InstantRailsのインストールは簡単で、ファイルを展開するだけ。あとは、エディタがいるので、TeraPadを使うのである。
両方とも、レジストリに登録しなくていいので、私は、USBメモリの中に両方とも入れて持ち歩き、ちょっと時間があったら手近のパソコンでやってみる、という使い方をしている。うーむ、便利便利。
両方ともメジャーなものなので、必要ないかなあ、と思うものの、一応ダウンロード先を。
InstantRails
http://instantrails.rubyforge.org/wiki/wiki.pl?Instant_Rails
TeraPad
http://www.vector.co.jp/soft/win95/writing/se104390.html

Mysqlの日本語対応

さて次に、Mysqlに日本語のデータが入るようにしなければならないのである。デフォルトのキャラクターセットをutf-8にするのである。
InstantRailsのConfigメニューに、MysqlのConfigファイルへのショートカットがあるので、それを選択。Mysql日本ユーザ会ホームページにあるFAQを参考に、以下の設定を入れる。

http://www.mysql.gr.jp/
FAQの真ん中くらいにある。

[mysqld]
・・・(初めから入ってる部分)
default-character-set = utf8

# 5.0.13-rc 以上
skip-character-set-client-handshake

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8

よっし、始めよう

チュートリアルでは、depotというショッピングカートアプリケーションを作ることになっているらしい。ということで、まずはdepotの骨格を作るのである。
チュートリアルでは、Railsのアプリケーションを作るフォルダに移動して、Railsというコマンドをうつことになっている。InstantRailsでは、
InstantRails RailsApplication ->Manege Rails application
というメニューパスを通って、出てくる画面で、
Create New Rails Application
を選ぶと、rails_appsのフォルダに移動した状態で、コマンドプロンプト*1が立ち上がる。その状態で、おもむろに、

Rails depot

と入力し、骨格を作るのである。
しばし待つと、ぞろぞろぞろ、とメッセージが出てきて、なんか出来上がった模様である。

データベースを作る

データベースは、Mysqlを起動して、Createするらしい。
ということで、「Mysql」としてみると、なんかエラーが出る。なにやら、'ODBC'@'localhost'なるユーザで起動をかけようとして、エラーになっているようだ。
ならば、ユーザとパスワードを指定して起動するのである。

mysql -u root -p

パスワードは、ブランクでEnterを押せばOK。セキュリティもへったくれもないが、インストールしたばかりだから、当たり前といえば当たり前ですな。
で、Databaseを作る。

mysql>create database depot_debelopment;

テーブルを作って、足場作り

InstantRailsには、MysqladminというPHPベースのユーティリティがついているので、これを使ってテーブルの定義をやるのも一手なのだが、Rails本にある、.ymlのファイルで履歴管理をする、という話に惹かれて、初心者にも関わらず、コマンドラインでのテーブル作成を決意するのである。
ついでといってはなんだが、チュートリアルの前提が、WEBricsになっているので、Apachを起動させておく必要はなくなったため、おもむろにサービスを停止するのであった。
で、depot\db以下のフォルダに、チュートリアル通りのテーブル作成SQLを書いて保存。

>mysql depot_development

日本語対応ってめんどくさい

おっかしいなあ、Mysqlのデフォルト言語はutf-8にしたはずなのに・・・と、Rails本を読み返すと、あれ、欄外に日本語の注意書きがしてある。いわく、Railsのデフォルト言語(utf-8)を記述すべし、DBとの接続パラメータも同様にutf-8を指定すべし、と、書いてある。あー、これですね〜
\rails_apps\depot\app\controllers以下のapplication.rbに、

class ApplicationController < ActionController::Base
  before_filter :set_charset

  private

  def set_charset
    headers["Content-Type"] = "text/html; charset=UTF-8"
  end
end

を、追加。んでもって、database.ymlにもキャラセットを入れる

development:
  adapter: mysql
  database: depot_development
  username: root
  password:
  host: localhost
  encoding: utf8

これで、文字化けはなくなった。
あとはチュートリアル通りに進む。列の追加もうまくいって、標準のエラーメッセージ出力もOK。そして、エラーメッセージを日本語で出すようにProduct.rbにコードを追加すると・・・またしても文字化け。
うーん、今度はなんだろう。もう一度Rails本を見直してみるが、とんと検討がつかない。まいったなあ・・・
で、ここでハッと気がつく。Product.rbを保存したとき、sjisで保存されてるのかも??って、特に指定していないから、きっとsjisだ!!ということで、TeraPad文字コード指定保存のオプションで、UTF-8Nを指定してみると、めでたく解消。
うーん、けどこれ、メモ帳を使ってコーディングしていたら、一生気がつかないなあ・・・Webの世界の人にとっては常識なんだろうか。
とういことで、次回も(多分)お勉強を続けるのであった。

*1:前はDOS窓って言い方をしたもんだが、昨今そう言っている人を見かけなくなった。死語なんだろうか・・・