« RailsでWikiクローンを作る | メイン | Wiki新設 »

2005年08月25日

RailsでWikiクローンを作る 2: 準備段階

Wikiクローン Minki
まずはアプリケーションの名前を決めます。ここではMinkiとしてみました。Minimal Wikiの略という程度の意味です。 Minkiは、Hikiを手本にして、ごく基本的なWikiの機能をもたせることにします。 ページの表示、新規作成、編集などはもちろんできるものとしますが、プラグインなどの機能は省略します。tDiaryのテーマには対応させたいと思います。

MVCとRailsアプリケーション
Railsは、MVCという設計モデルに基づいてアプリケーションを作成します。 MVCとは、Model、View、Controllerの三要素でソフトウェアを実装する方式で、最近のWebアプリケーションフレームワークの多くがこの方式を採用しています。MVCの各要素の役割は以下のとおりです。
モデル(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のインストール
簡単なので詳細は省略。 Rails公式サイトのダウンロードページあたりを参照。
アプリケーション初期状態の作成
では、早速 Minki アプリケーションをつくり始めることにします。 まずはアプリケーションを作成するディレクトリを決め、そこで以下のコマンドを実行します。
% rails minki
すると、ずらずらとメッセージが表示されて、minkiの下にいくつかのディレクトリやファイルが生成されます。 ここで生成されるディレクトリの意味は以下の通りです。
app
このディレクトリのサブディレクトリに、モデル、ビュー、コントローラのプログラムが置かれる。 初期状態ではほとんど空っぽに近い。 開発時に新規作成/編集するファイルの大半はここに置かれることになる。
components
再利用可能なコンポーネントを置く。minkiでは使用しない。
config
設定ファイル置き場。データベースへの接続情報など。
db
データベースのスキーマ情報や、SQLiteの場合はデータベースファイルそのものを置く。初期状態では空っぽ。
doc
アプリケーションのドキュメントを置く。
lib
ライブラリ置き場。minkiでは使用しない。初期状態では空っぽ。
log
ログが書き出される場所。
public
webでアクセスされるディレクトリ。アプリケーションのDocumentRootとなる。
script
ユーティリティスクリプト群。
test
テスト時に使うディレクトリ。
vendor
サードパーティ製ライブラリ置き場。初期状態では空っぽ。minkiでは使用しない。
Rails アプリは、最終的には Apache や lighttpd などの webサーバで動作させることになるでしょうが、 開発時は WEBrickをベースにしたRails付属のwebサーバを使うのが手っ取り早いです。以下のようにして、webサーバを起動します。
% cd minki
% ruby script/server
これで、そのマシンのポート3000番でwebサーバが立ち上がります。同一ホストのブラウザで確認するならhttp://localhost:3000/、別マシンのブラウザで確認するなら、開発マシンの名前をrailshostとすると、http://railshost:3000/でアクセスします。 うまくいっていれば、つぎのようになるでしょう。

conguratulation

これは、何が起こっているかというと、minkiのpublicディレクトリにあるindex.htmlが表示されているだけです。つまり、publicディレクトリがdocument root になります。

データベースの準備
アプリケーションのディレクトリができたら、次はデータベースの準備をします。 ここではDBとして、RailsがサポートしているDBエンジンのひとつであるSQLite(Ver.3系)を使用します。 RailsでSQLiteを使うには、Howto use SQLiteを見てください。
さて、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ソースそのものが入る。
Railsにおいて、データベースのスキーマの設計にはいくつかの取り決めがあります。 まずテーブル名は名詞の複数形にします。そして、テーブルのprimary key に id という名前のフィールドが必要です。 これらの規則は変更することも可能ですが、素直に従っておいたほうが無難です。
SQLiteのデータベースファイルは、アプリケーションディレクトリのdbというディレクトリに保存します。 ここではminki.dbという名前にします。まず、先ほどのスキーマを db/schema-sqlite.sqlというファイルに保存します。そして、コマンドラインから
% cd db
% sqlite3 minki.db < schema-sqlite.sql
のようにすると、minki.db というファイルが作成されます。
development, production, test 環境
Railsには、アプリケーション実行時の環境として、development, production, test 環境の三つが想定されています。それぞれの環境で接続するデータベースを変えたり、その他の設定を変えたりすることができます。
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 を再起動するしましょう。
UTF-8 で運用する
Minki では日本語を扱いたいので、Rails を UTF-8 で運用することにします。 やり方については、utf-8で運用するを参照してください。以下の二つのファイルをいじります。
config/environment.rb
app/controller/application.rb
config/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

コメント

コメントしてください




保存しますか?