2006.02.07

Ruby Rails

まじで連載!?: Ruby on Rails on MacOSXでWebアプリ開発〜第二回 DB設計 & アプリケーション自動生成〜

さて、まずは連載第一回のエントリーにコメント頂きありがとうございます。連載第一回ではeclipseにRailsプロジェクトを作成し、Locomotiveにプロジェクトを登録しました。連載第二回では、SNSのデータベースを設計・作成し、第一回で作成したRailsプロジェクト(以下simpleSNSプロジェクトと呼びます)に、MVCモデルに基づいたModel、View、Controllerを作成していきます。(参考:MVC - Wikipedia

MySQLのインストール

もしまだデータベースを入れてない人がおられましたら、まずはMySQLのインストールを行いましょう。
GrooveCafe : MacでApache2.0..。MySQLをインストールだ! その1
に超簡単なインストール方法が書かれています。MySQLクイック・リファレンスも参考にしてください。MySQLのインストールが終ったら、

mysql -u username -p

※usernameはMySQLのユーザです。これはあなたの環境によって異なります。


として、パスワードを入力し、MySQLに入れることを確認してください。

ここまででエラーが起こった人もあきらめないでくださいね♪Googleで「MacOSX MySQL」で検索すれば、もっと詳細な情報も手に入ります。どうしても問題が解決できない場合は、このBlogにコメントしていただいても構いません。僕が力になれるかもしれませんし、誰かが返信コメントをくれるかもしれません。頑張ってMySQLをあなたのMacに入れてやって下さい。Webアプリケーションになじみのない方は、MySQLのインストールが第一関門だと思います。実際僕もMySQLやPostgreSQLには悩まされました。。。

データベース設計

それではデータベースの設計です。本連載ではデータベースとしてMySQLを使います。もちろんPostgreSQLでもOKです。(その他のデータベースについては分かりかねます。あしからず。)データベース名はsimpleSNSとし、simpleSNSの中にusers、friends、invitationsを作成します。usersはユーザ情報を保持するテーブル、friendsはユーザ間の関係を保持するテーブル、invitationsは招待状情報を保持するテーブルです。以下にMySQL用のSQLを示します。

CREATE DATABASE simpleSNS; use simpleSNS;

CREATE TABLE users (
`id` int NOT NULL auto_increment,
`login` char(40) NOT NULL UNIQUE,
`password` varchar(40) default NULL,
`photo` char(100) DEFAULT NULL,
`name` char(100),
`mail` char(128) NOT NULL,
`createtime` datetime NOT NULL,
`lastlogin` timestamp(14) NOT NULL,
PRIMARY KEY (`id`)
);

CREATE TABLE friends (
`id` int NOT NULL auto_increment,
`createtime` timestamp(14),
`owner` char(40) NOT NULL,
`withfriend` char(40) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE UNIQUE INDEX friend_ukey ON friends (`owner`(40),`withfriend`(40));

CREATE TABLE invitations (
`id` int NOT NULL auto_increment,
`createtime` timestamp(14),
`sender` char(40) NOT NULL,
`receiver` char(40) NOT NULL,
PRIMARY KEY (`id`)
);

※Railsの便利な機能を使うため、各テーブルのidカラムとusersテーブルのloginカラムは必須です。また各テーブル名は複数形にしてください。Railsではデータベースの構造にいくらか制約を受けます。(頑張ればこの制約から逃れることも可能ですが、ここではそんなことはしません。)

このSQLをコピーして、プロジェクト内のdb/以下にsimpleSNS.sqlというファイルを作成してください。Terminalで

cd PROJECT_ROOT

※PROJECT_ROOTはあなたの環境によって異なります。ecliseがデフォルト設定であれば、PROJECT_ROOTは~/Documents/workspace/simpleSNS/になっていると思います。


としてプロジェクトのルートディレクトリ(eclipseのデフォルトの設定では、あなたのユーザホームの中のworkspaceの中にあるsimpleSNSというディレクトリになります)に移動してください。そこで
mysql -u username -p < db/simpleSNS.sql

※usernameはあなたの環境によって異なります。


というコマンドを打つと、MySQL内にデータベースが作成されます。
mysql -u username -p simpleSNS

としてMySQLに入れれば、データベース作成成功です。

くどいようですが、ここでうまく行かないからってへこたれないでください!!自力での解決が不可能でも、とりあえずこのエントリーに質問コメントしてみてください。

アプリケーションの自動生成

ここからRailsの便利な機能の一つであるアプリケーションの自動生成に入ります。まずは先程作ったデータベースを、simpleSNSプロジェクトと関連づけましょう。プロジェクトルート内のconfig/database.ymlを開いて下さい。

development:
adapter: mysql
database: simple_SNS_development
username: root
password:
socket: /tmp/mysql.sock

となっているところを、
development:
adapter: mysql
database: simpleSNS
username: username
password: password
socket: /tmp/mysql.sock

※username、passwordはあなたの環境によって異なります。


これで関連付けは完了。あとはTerminalでプロジェクトルートまで移動して、魔法の呪文を。
./script/generate scaffold user

実行結果はこんな感じ↓
exists app/controllers/
exists app/helpers/
create app/views/users
exists test/functional/
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/user.rb
create test/unit/user_test.rb
create test/fixtures/users.yml
create app/views/users/_form.rhtml
create app/views/users/list.rhtml
create app/views/users/show.rhtml
create app/views/users/new.rhtml
create app/views/users/edit.rhtml
create app/controllers/users_controller.rb
create test/functional/users_controller_test.rb
create app/helpers/users_helper.rb
create app/views/layouts/users.rhtml
create public/stylesheets/scaffold.css

あとは
http://localhost:3000/users/
にアクセスしてみましょう。どうですか?なにか動いてますか?以下のような画面が現れたら成功です。
※3000というのはポート番号と言われるものです。デフォルトの設定では3000のところが8000になっているかと思います。Locomotiveの”info”でポート番号を確認して下さい。

simpleSNS_001.gif

ここまで順調にいきましたか?稚拙な文章で、たくさんエラーが出た方がおられましたら申し訳ありません。ご指摘、訂正、ダメだしなど大歓迎です。さて、次からは自動生成されたプログラムを元に、SNSをガシガシ(?)実装していきましょう。

連載一覧