Top / Programming / Ruby / CGIKit 1.x / シンプルな掲示板 / CGIKit 1.xによるシンプルな掲示板

CGIKitによるシンプルな掲示板

1時間で作成したシンプルな掲示板です。作成過程を説明します。完成したものは、こちらです。

サンプルページの作成

一番最初に、サンプルページを作ります。今回作成したものは、これ

テンプレート(.html)作成

サンプルページを元に、テンプレートファイルを作成します。

コンポーネントを保存するMainPageディレクトリを作成し、MainPage.htmlとMainPage.ckdを作成します。

samplebbs/
└MainPage/
  MainPage.html
  MainPage.ckd

サンプルページのHTMLをMainPage.htmlにコピーした後、MainPage.htmlを編集します。

最初にフォーム関連のタグをCGIKitのタグに置き換えます。

変更前 <form name="Form" id="Form" method="post" action="">
変更後 <cgikit name="Form">

変更前 <input name="Name" type="text" id="Name" />
変更後 <cgikit name="Name" />

変更前 <input name="Subject" type="text" id="Subject" />
変更後 <cgikit name="Subject" />

変更前 <textarea name="Body" id="Body"></textarea>
変更後 <cgikit name="Body" />

変更前 <input type="submit" name="Submit" value="送信" />
変更後 <cgikit name="Submit" />

メッセージの表示部分をCGIKitのタグに置き換えます。

変更前 題名
変更後 <cgikit name="MesSubject" />

変更前 名前
変更後 <cgikit name="MesName" />

変更前 日時
変更後 <cgikit name="MesDate" />

変更前 本文
変更後 <cgikit name="MesBody" />

メッセージの繰り返しになる部分をCGIKitのタグで指定します。

<cgikit name="Messages">〜</cgikit>

ついでに、エラーメッセージを表示するためのタグを作成します。

<cgikit name="Error" />

以上で、テンプレートファイルが完成しました。完成したテンプレートファイルはこれ

バインディング(.ckd)の作成

サンプルページとテンプレートファイルを元にバインディングを作成します。

メッセージの本文の表示は複数行の文字を表示するので、標準のエレメントではなく拙作のCKGParagraphを使用します。

完成したバインディングはこれ

コード(.rb)の作成

ようやくRubyで実装します。

メッセージの保存と読み込み

最初にメッセージの保存と読み込みの機能を作成します。これらの機能はMessageクラス(message.rb)に任せます。

メッセージは、PStoreを使用して、配列で保存することにします。

メッセージを表示するときに、新しいものから順番に表示したいので、新しいメッセージは配列の先頭に保存するようにしました。

保存件数は、最大10件とし、10件を超えたときは古いものから削除します。最大保存件数は、定数MAX_COUNTで指定することにしました。

完成したMessageクラスはこれです。もちろん、テストも行います。

samplebbs/
│cgikit_ext.rb
│message.rb (Messageクラス)
├MainPage/
│ MainPage.html
│ MainPage.ckd
└db/ (メッセージを保存するディレクトリ)

MainPage.rbの実装

MainPage.rbを作成し、実装します。

表示するメッセージの一覧を取得(listメソッド)で は、Message.load の返値を返します。

メッセージの書き込み(submitメソッド)は、入力内容をチェックしてから、登録します。

例外が発生したときは、@errorに例外の内容を代入し、画面上にエラーメッセージを表示するようにしました。

完成したMainPage.rbはこれです。

samplebbs/
│cgikit_ext.rb
│message.rb (Messageクラス)
├MainPage/
│ MainPage.html
│ MainPage.ckd
│ MainPage.rb]
└db/ (メッセージを保存するディレクトリ)

bbs.cgiの実装

最後にbbs.cgiを実装します。次のようになります。

#!/usr/bin/ruby -Ke

require 'cgikit'
require 'cgikit_ext'
require 'message'

app = CKApplication.new
app.run

ファイル構成

samplebbs/
│bbs.cgi
│cgikit_ext.rb
│message.rb (Messageクラス)
├MainPage/
│ MainPage.html
│ MainPage.ckd
│ MainPage.rb
└db/ (メッセージを保存するディレクトリ)

アクセス権の設定

アクセス権を設定します。

以上で完成しました。実際に動いている様子はこちらでご覧になれます。