シンプル&パワフルなPHPライブラリ rhacoを使ってみよう!

第3回アプリケーションの開発をはじめる

これから数回に分けて、簡単なToDo管理アプリケーションを開発していきます。今回は、その準備となるセットアップ機能を解説します。

rhacoのダウンロードは既にされていることとして話を進めます。まだダウンロードしていない方は、第2回「ダウンロードする」の項を参考にしてください。また、rhacoのパスなどは引き続き第2回と同様であることが前提です。

セットアップフレームワーク

rhacoでは、アプリケーションを作る際に、前回説明したようにそれぞれのライブラリを単体で使うこともできますが、セットアップアプリケーションを使用するのが普通です。

セットアップアプリケーションを使ってアプリケーションを作ると、共通の設定フレームワークが使えるので、様々な環境に対応するアプリケーションを簡単に作成することができます。

rhaco では、ブラウザを利用して開発を進めることができますが、公開サーバーで開発をすることはおすすめできません。できる限りローカルに開発環境を用意して、開発を進めるべきです。

また、ブラウザからセットアップアプリケーションを動作させる際は、サーバーで動作するPHP(Apache等)に書き込み権限が必要です。XAMPPやMAMPPを利用すると、サーバーがユーザー権限で動作し、書き込み権限を気にせず開発が可能なので、おすすめです。

アプリケーションの土台を作る

それでは、アプリケーションの土台を作るための準備をしましょう。まず、アプリケーションを設置するディレクトリを作成します。

この例では、kaeruディレクトリを「/path/to/wwwに作り、その中にダウンロードしたrhacoのパッケージからsetup.phpをコピーします。

シェルの操作例
$ mkdir -p /path/to/www/kaeru
$ cp /path/to/rhaco/setup.php /path/to/www/kaeru

http://localhost/kaeru/setup.php にアクセスしてください。セットアップアプリケーションが表示されます。

画像

ダウンロードしたrhacoのパスを入力して送信します。すると、ベースとなるファイルやディレクトリが自動で生成されます。

画像

これで、アプリケーションを開発するための準備は完了です。

setup.phpは、コマンドラインからも操作することができます。どうしても権限が解決できない場合や、日頃からコマンドラインを利用して開発をしている方はこちらのほうが便利でしょう。

project.xml

テキストエディタで setup/project.xml を開いてください。これが、セットアップアプリケーションでは最も大事なファイルになります。XML形式でアプリケーションの設定やデータベース定義などを行います。

DB設計

rhacoは、テーブル設計を細かく指定することで、insert/update時などに定義に基づいたverifyを自動的におこない、フォーム入力値のverifyの記述を省略できるようになっています。

このサンプルでは、できるだけいろいろな機能を試してみるために、少し長くなりますが、次のようにproject.xmlを記述します。

それぞれの項目について、解説していきます。

<project rhacover="1.6.1" version="0.0.1" name="kaeru" xmlns="http://rhaco.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://rhaco.org http://m.rhaco.org/xsd/project_1_6_x.xsd">
    <database name="kaeru">
        <table name="category">
            <column name="id" />
            <column name="name" />
            <column name="created" type="timestamp" default="sysdate" />
            <default>
                <data><column name="name">仕事</column></data>
                <data><column name="name">連絡</column></data>
                <data><column name="name">買い物</column></data>
                <data><column name="name">恋愛</column></data>
                <data><column name="name">その他</column></data>
            </default>
        </table>
        <table name="todo">
            <column name="id" />
            <column name="category" type="int" reference="category.id" />
            <column name="subject" />
            <column name="description" type="text" />
            <column name="close" type="bool" default="false" />
            <column name="priority" type="int" default="3" size="1">
                <choices>
                    <data caption="blocker">5</data>
                    <data caption="critical">4</data>
                    <data caption="major">3</data>
                    <data caption="minor">2</data>
                    <data caption="trivial">1</data>
                </choices>
            </column>
            <column name="created" type="timestamp" default="sysdate" />
            <column name="updated" type="timestamp" default="sysdate" />
            <default>
                <data>
                    <column name="category" value="5" />
                    <column name="subject">このTODOを削除する</column>
                    <column name="description">自分のTODOを管理する前に、このタスクを削除する</column>
                </data>
            </default>
        </table>
    </database>
</project>

project.xmlは<project></project>で囲まれたXML形式で記述されます。ここでは、データベースの定義を行っています。

このほかに、環境に依存するような設定項目など(汎用的なCMSなどのサイトタイトルなど)も同様に記述することもできます。

database要素

同じデータベース内にあるテーブルのセットを記述します。この要素は複数記述することができます。要素ひとつにつき、接続先やデータベース名、ユーザーなどを、セットアップアプリケーションによって設定できます。

name属性には、そのデータベースのわかりやすい名前を設定します。これは、実際のデータベース名である必要はありません。設定画面内の表示用などに用いるためのものです。

table要素

データベースのテーブルの定義を行います。name属性には、実際のテーブルの名前を設定します。prefixなどを設定したい場合は、セットアップアプリケーションで付与できるので、ここでは不要です。

name属性に設定した名前で同名のモデルクラスが生成されます。既に存在するクラス名(例えばRhacoなど)をテーブル名に設定する場合、class要素にクラス名を設定することで任意のクラス名に変更できます。

これは例えば次のようなものです。

    <table name="rhaco" class="hoge">

column要素

テーブルに属するカラムの定義を行います。

表1 column要素に指定できる項目
要素名必須備考
nameカラム名を設定します。
var×テーブルモデルに作られるメソッド名に利用されます。省略された場合はnameが使用されます。
type×カラムの種類を設定します。設定可能な種類については、表2を参考にしてください。省略された場合はstringが使われますが、nameがidだった場合は、serialになります。
reference×リファレンス先のカラムを設定します。テーブル名とカラム名を .(ドット)で連結した文字列を指定します。
label×簡易DB管理画面で使用される表示名です。テンプレートの記述によっては、作成したアプリケーション内でも使用することができます。
primary×primaryキーを指定します。trueまたはfalseを指定します。
default×デフォルトの値を指定します。種類がtime, date, timestampのときにsysdateと指定すると、モデル生成時の時刻がセットされます。
min×最小値を指定します。
max×最大値を指定します。
size×create table時のサイズを指定します。
require×必須要素を指定します。trueまたはfalseを指定します。
requirewith×制限付きの必須要素を指定します。カラム名を指定し、指定したカラムに入力があった場合に必須要素となります。
unique×ユニーク設定。trueまたはfalseを指定します。
uniquewith×2カラムの組み合わせてユニーク設定します。カラム名を指定します。
chartype×正規表現で値を制限します。
表2 使用可能なtype
typeほかの記述方法備考
serialシリアル値。serial指定した場合自動的にprimaryが設定される。
booleanbool, flag真偽値
integerint整数値
floatdouble浮動小数値。float(10,5) などとして桁を設定できる。
stringstr文字列
texttextarea文字列。管理画面ではtextareaで表示される。
date日付
time時間。データベースではintegerで定義される。
timestampタイムスタンプ
zip郵便番号。ハイフンは含まない。
tel電話番号。ハイフンは含まない。
emailmailメールアドレス
birthdaybd誕生日型。unixtimeに制限されずに日付を保持できる。

name属性に⁠id⁠を設定した場合、自動的にserialカラムとして設定されます。

これらの表と、今回定義したproject.xmlを見比べて、どのような定義が行われているか確認してみてください。

default要素, data要素

省略可能。セットアップアプリケーションを用いてテーブルを作成したときに、あらかじめ入力しておきたい値を設定できます。

column要素で囲んだ値、またはvalue属性に値を設定します。data要素の数だけinsertが行われます。

データベースの設定と作成

project.xmlを記述し終えたら、セットアップアプリケーションにアクセスしましょう。

データベース設定

データベースの項目をフォームで設定します。項目を入力したら[setting]ボタンを押下します。

画像

テーブルの作成

セットアップアプリケーション上部タブのdatabaseの項目を開き、テーブル作成の[作成]ボタンをクリックすると、テーブルが作成されます。

デフォルトでは、簡単なSQLしか出力しません。詳しくSQLを編集したい方は[SQLダウンロード]ボタンをクリックすると、SQLを発行せずにダウンロードできます。

簡易DB管理画面

セットアップアプリケーションには、phpMyAdminほどではありませんが簡単なDB管理を行うことができる機能が付属しています。

databaseのadminから、管理したいテーブルを選択し、⁠Control]ボタンを押します。この管理画面からDBを操作すると、モデルクラスで作成した独自のメソッドなどを発行できるようになるため、より高度な管理が可能になります(insert/update時のフックなど⁠⁠。

画像

簡単なアプリケーションであれば、もう独自の管理画面を作成する必要もありません。 この画面を使って、データベースに新たなアイテムを追加したり編集したりして、作成されたテーブルを確認してみましょう。

まとめ

セットアップアプリケーションとproject.xmlについて、早足でしたが簡単に解説しました。

次回は、セットアップアプリケーションのその他の機能について解説し、実際のアプリケーション開発を進めて行きます。

おすすめ記事

記事・ニュース一覧