« RailsでWikiクローンを作る | メイン | Wiki新設 »
2005年08月25日
RailsでWikiクローンを作る 2: 準備段階
- モデル(model)
- アプリケーションの状態を司る。単なるデータではなく、そのデータを扱うロジックも含む。
- ビュー(view)
- 表示・出力を司る。
- コントローラ(controller)
- 入力を受け取って、model, viewを制御する。
Railsの場合、コントローラが扱う入力は、ブラウザを経由してやってくるユーザからのリクエストです。 その URL によって、コントローラの中のメソッドが(場合によってIDやパラメータつきで)呼び出されます。そのメソッドをアクションといいます。
例えば Minkiでは、Wikiページの表示を行うときは以下の URL にアクセスします。
http://railshost/wiki/show/FrontPage上記の URL 中で、wiki の部分がコントローラ名、showがアクション名で、最後の FrontPageがアプリケーション内部で使用するIDです。 細かいことは後程説明しますが、このURLにアクセスすると、Railsアプリの WikiControllerというクラスの show というメソッドが FrontPageというパラメータ(ID)をつけて呼び出されます。
(注: 多くの Rails 関連のサンプルでは、上記の ID の部分はほとんどの場合数字になっています。その数字はDBテーブルのidカラムに直接対応しています。しかしWikiアプリケーションでは数字よりもページ名で扱うのが都合が良いため、ページ名をIDとしています)
コントローラは、必要に応じてモデルとやりとりします。 モデルはデータを保持しアプリケーションの状態を司る部分ですが、そのデータは一般的にリレーショナルデータベース(DB)に保持します。 Railsには、ActiveRecordというO/Rマッパがあり、ActiveRecordを通じてDBにアクセスすることになります。 ActiveRecordがDBへのアクセスを抽象化してくれるので、Rubyからは(あまり)DBを意識せずに扱えます。 さきほどの例で言うと、wikiコントローラのshowメソッドは、モデルに FrontPageという名前のデータレコードを要求します。 そして、そのページ内容やページタイトルを受取り、次のビューへと渡します。
ビューは表示を司る部分です。Railsの場合は、Rubyに標準添付のERBというテンプレートエンジンを使用します。 アクションとビューは対応しており、例えば show アクションに対応するビューのテンプレートは show.rhtml になります。 そしてテンプレートエンジンによって、コントローラから来るデータとテンプレートに基づいて最終的な HTML が生成され、ユーザのブラウザに出力されます。 ここではERBそのものについては説明しませんので、別途rubyのリファレンスマニュアル等を参照してください。
% rails minkiすると、ずらずらとメッセージが表示されて、minkiの下にいくつかのディレクトリやファイルが生成されます。 ここで生成されるディレクトリの意味は以下の通りです。
- app
- このディレクトリのサブディレクトリに、モデル、ビュー、コントローラのプログラムが置かれる。 初期状態ではほとんど空っぽに近い。 開発時に新規作成/編集するファイルの大半はここに置かれることになる。
- components
- 再利用可能なコンポーネントを置く。minkiでは使用しない。
- config
- 設定ファイル置き場。データベースへの接続情報など。
- db
- データベースのスキーマ情報や、SQLiteの場合はデータベースファイルそのものを置く。初期状態では空っぽ。
- doc
- アプリケーションのドキュメントを置く。
- lib
- ライブラリ置き場。minkiでは使用しない。初期状態では空っぽ。
- log
- ログが書き出される場所。
- public
- webでアクセスされるディレクトリ。アプリケーションのDocumentRootとなる。
- script
- ユーティリティスクリプト群。
- test
- テスト時に使うディレクトリ。
- vendor
- サードパーティ製ライブラリ置き場。初期状態では空っぽ。minkiでは使用しない。
% cd minki % ruby script/serverこれで、そのマシンのポート3000番でwebサーバが立ち上がります。同一ホストのブラウザで確認するなら
http://localhost:3000/、別マシンのブラウザで確認するなら、開発マシンの名前をrailshostとすると、http://railshost:3000/でアクセスします。
うまくいっていれば、つぎのようになるでしょう。

さて、Wikiを実装するにあたり、まずはページ情報を保持するデータベーススキーマを決めます(後程、Minkiの設定情報やユーザ情報を管理するテーブルを追加しますが、今はページのテーブルだけ作ります)。
-- page create table pages ( id integer primary key, name varchar(255) not null, title varchar(255), freezeflag boolean, updated_at datetime, content text ); create index pagename on pages(name);それぞれのカラムの意味は以下の通りです。
- id
- プライマリキー。連番の数字。SQLiteでは integer primary key と書くと auto increment される。
- name
- ページの名前。
- title
- ページのタイトル。名前とは別にタイトルをつけたい場合に使う。
- freezeflag
- freezeフラグ。Wikiのページは通常誰でも編集可能だが、freezeすると凍結され解除するまで編集不可となる。
- updated_at
- ページが更新された時刻を保持する。 Railsマジックによって、updated_atという名前でdatetime型のフィールドには、明示しなくてもレコードを更新したとき自動的にその時刻が入るようになる。
- content
- ページ内容。Wikiソースそのものが入る。
SQLiteのデータベースファイルは、アプリケーションディレクトリのdbというディレクトリに保存します。 ここではminki.dbという名前にします。まず、先ほどのスキーマを db/schema-sqlite.sqlというファイルに保存します。そして、コマンドラインから
% cd db % sqlite3 minki.db < schema-sqlite.sqlのようにすると、minki.db というファイルが作成されます。
developmentは開発環境で、script/server を使って動かしている状態はこの環境です。 productionは本番稼働の環境で、test はテスト用の環境です。それぞれは、環境変数 RAILS_ENV で指定します。デフォルトは 'development' です。
ここでは、当分 development 環境なので、development環境のデータベースのみ設定します。 データベースの設定は config/database.yml で行います。 Railsにおいて設定ファイルらしい設定ファイルはこれだけです。
development: adapter: sqlite3 dbfile: db/minki.db #development: # adapter: mysql # database: rails_development # host: localhost # username: root # password: (以下略)デフォルトでは MySQL が指定されているので sqlite3 用に変更します。データベースファイルのパスは dbfile: で指定します。
なお、もしも開発途中にdatabase.yml を書き換えるようなことがあったら、必ず script/server を再起動するしましょう。
config/environment.rb app/controller/application.rbconfig/environment.rbはアプリケーション起動時に実行されるファイルです。app/controller/application.rb は、すべてのコントローラの上位クラスになる ApplicationController を定義しています。
3 generateによる生成 >
投稿者 tam : 2005年08月25日 15:03
トラックバック
このエントリーのトラックバックURL:
http://tam.qmix.org/mt3/mt-tb.cgi/9
このリストは、次のエントリーを参照しています: RailsでWikiクローンを作る 2: 準備段階:
» used car carrier from used car carrier
[続きを読む]
トラックバック時刻: 2006年12月05日 17:11
» aspire nec phone system from aspire nec phone system
[続きを読む]
トラックバック時刻: 2006年12月07日 15:25
» aid ny pharmacy rite from aid ny pharmacy rite
[続きを読む]
トラックバック時刻: 2006年12月18日 08:34
» aura soma lava from aura soma lava
[続きを読む]
トラックバック時刻: 2006年12月18日 11:10
» cvs mail order pharmacy from cvs mail order pharmacy
[続きを読む]
トラックバック時刻: 2006年12月27日 07:34
» online pharmacy tech from online pharmacy tech
[続きを読む]
トラックバック時刻: 2006年12月27日 12:02
» compare life insurance from compare life insurance
[続きを読む]
トラックバック時刻: 2007年01月21日 14:17
» adipex cheapest pill from adipex cheapest pill
[続きを読む]
トラックバック時刻: 2007年01月21日 23:45
» free poker gambling from free poker gambling
[続きを読む]
トラックバック時刻: 2007年01月22日 14:27
» chicago estate law real from chicago estate law real
[続きを読む]
トラックバック時刻: 2007年01月25日 05:02
» book harrahs sports from book harrahs sports
[続きを読む]
トラックバック時刻: 2007年01月28日 06:57
» free bunny poker strip from free bunny poker strip
[続きを読む]
トラックバック時刻: 2007年01月28日 09:08
» russian fashion model from russian fashion model
[続きを読む]
トラックバック時刻: 2007年02月16日 13:54
» hollander home fashions from hollander home fashions
[続きを読む]
トラックバック時刻: 2007年03月02日 10:14
» Lipitor zocor equivalent dosage. from Lipitor zocor equivalent dosage.
Zocor dosage. Lipitor zocor equivalent dosage. [続きを読む]
トラックバック時刻: 2007年03月16日 04:50
» is-found-here.info from is-found-here.info
a_Ya__a_ォ訐・a__a_Ta_ra_ァa,^a,_a_-a__a_S鬘~a_,a_-a__a_Ta_, [続きを読む]
トラックバック時刻: 2007年03月25日 03:01
» Ambien. from Ambien.
Ambien. [続きを読む]
トラックバック時刻: 2007年03月26日 16:09
» asian blowjob 09 from asian blowjob 09
[続きを読む]
トラックバック時刻: 2007年04月22日 10:52
» free amateur bondage movies from free amateur bondage movies
[続きを読む]
トラックバック時刻: 2007年04月23日 03:58
» huge milky tit sucking from huge milky tit sucking
[続きを読む]
トラックバック時刻: 2007年04月23日 21:26
» thailand gay chat from thailand gay chat
[続きを読む]
トラックバック時刻: 2007年04月24日 23:48