Previous Next
ダウンロード

ようこそSabaphyへ

Webアプリケーション学習用ライブラリ

PHP5版 佐藤 英人(東京国際大学)

はじめに

Sabaphyは、PHP5で書かれたWebアプリケーション学習用のフレームワークとO/Rマッピングツールです。このホームページでは、Sabaphyに関する情報を提供します。

新着情報

2006.9.9 ダウンロードファイルの差し替え
ダウンロードファイル(20060709日付のもの)の構成に誤りがあり、使用された方にご迷惑をかけてしまいました。申し訳ありません。修正したものをアップしました。
2006.6.27 Sabaphy 0.5.8 をアップしました。
非オブジェクト指向にも対応できるように、Dispatcherを修正。EntityManagerも一部改良しました。
2006.6.27 本格的なオブジェクト指向を使わない解説も用意しました。
利用者プログラム自体はオブジェクト指向でなくても、Sabaphyの機能を利用して、Webアプリケーションを開発できます。Study Materialsのところの「同上の非オブジェクト指向版」をご覧下さい。
2006.5.25 Sabaphy 0.5.5 をアップしました。
利用者にあまり影響のないバグ修正です。ついでにEntityManagerにload()を追加し、query()で全件検索もできるようにしました。
2006.4.15 Sabaphy 0.5.3 をアップしました。
0.4と大きな違いはありませんが、クラスファイルの拡張子などが変わっています。詳しくは「0.4から0.5への変更点」を参照してください。
2006.1.21 Sabaphy 0.4.4 をアップしました。
通常の利用者には影響がないannexのバグ修正です。
2006.1.12 Sabaphy 0.4.3 をアップしました。
PHP5.1に対応できるように修正しました。(5.1.2まで確認済み)
2006.1.3 Sabaphy 0.4.2 をアップしました。
ExceptionHandlerにカスタムエラービューやエラー回復コマンドを登録する機能を付けました。

そのねらい

Webプログラミング分野では、Javaの世界でもPHPの世界でもフレームワークや軽量コンテナ等が多数登場してきて、どんどん便利になってきてい ます。しかし、「軽量」とはいってもEJB 2 に比べての話で、かなり大がかりなものがほとんどです。業務用を目的としているから止む得ないのかもしれませんが、初心者には使いこなせないものが多いの が実情です。その結果初心者は、相変わらず低水準のAPI(注1)を使って、ファイル操作、DBアクセス、セッション管理のプログラムを書いています。

  (注1) 低水準API: レベルが低いということではなく、人間の発想より機械の動作に近く、初心者には難しいプログラムのことです。

何か間違っていると思いませんか?

私は大学で情報システム教育を担当しています。プログラミングそのものは専門ではなく、上流の分析設計を教えたいのですが、設計結果を簡単に実装できる環 境がなく頭を悩ましてきました。私のところの学生のように、プログラミングそのものを専門とするわけではなく、実現されるアプリケーションに関心がある人 が、簡単に使いこなせるツール(注2)を目標に開発したものが Sabaphy です。

  (注2) O/Rマッピングツールとフレームワーク

Sabaphyでは、簡単なものは簡単に実現できます。その一方で、多少手の込んだものも、それなりに実現できるように配慮しました。当面、J2EEや EJBの前準備としての学習用に使うことを想定していますが、ある程度のものであれば、実用目的でも使えるのではないかと思っています。

ただし私自身は、本格的な業務システムの開発経験はありませんし、PHPも使い始めて日が浅いです。PHP利用者や業務システム経験者の方々から、ご批 判・ご助言をいただけるとありがたいです。

機能の概要

Sabaphyを構成する主要なクラスは以下の3つです。

  1. EntityManager: O/Rマッピングツール。SQLiteとMySQLに対応
  2. Dispatcher: フレームワークを実装するコントローラ
  3. ExceptionHandler: 標準エラーハンドラの置き換えとエラー画面表示
(1) O/Rマッピング機能
 ・Javaの世界のHibernateと同様に、普通のオブジェクトを永続化
 ・検索条件を除き、SQLの記述は不要

(2) フレームワーク機能
 ・コマンドに応じた処理の振り分け
 ・セッション作業オブジェクトの生成・再現
 ・アクションの実行依頼
 ・ビューへのHTML生成依頼
 ・アクションの戻り値によるビュー、フォワード先、リダイレクト先の選択
 ・トランザクション管理 (正常終了時のコミット)
 ・利用者が属するクラス毎のコマンドへのアクセス制限
 ・例外の捕捉
 ・例外クラスに応じたカスタムエラー画面表示、エラー回復コマンドの登録

(3) 例外処理機能
 ・エラー画面の自動生成

詳しくは、「Sabaphyユーザマニュアル」を参照してください。

その特徴

学習用に使いやすさ、分かりやすさを優先させています。

(1) 特別なインストールや配備は不要
 ライブラリファイルをコピーするだけで使えます。

(2) それぞれのクラスが単独で使用可能
 分かりやすさを優先させて、敢えて細かくコンポーネントに分けていません。 ただし、DI的な手法で連携させることができるものもあります。

(3) ライブラリ自身も単純な構成
 利用者が解読できるように、ライブラリ自身も単純で分かりやすい構成にしました。

(4) PHP5の標準機能で間に合うものはそれを使用
 セッションデータやリクエストデータに$_SESSION, $_REQUESTを直接使用しています。 新規に覚えることを最小限で済ませるためで、拡張性は犠牲にしています。

制限事項

  1. DBテーブルの主キーは単純キーのみ (複合キーは認めない)
  2. 永続化できる属性はpublic宣言したプロパティのみ
  3. 属性値はDBが扱える単純型のみ
  4. 入力値のバリデーション機能はない

v0.4からv0.5への変更点

学習面での分かりやすさを考慮して、一部変更しました。Lect4(O/Rマッピング)以降の学習に若干影響があります。主な変更点は以下の通りです。

(1) ライブラリクラスファイルの拡張子の変更
 従来の「.php」を「.class.php」に変更しました。教材の中でクラスファイルの拡張子を「.class.php」にすることを薦めているので、そのことと整合性をとるためです。例えば、EntityManager.phpは、EntityManager.class.phpに変わりました。プログラムの先頭のrequire_onceでの指定で使っています。これらを変更してください。

(2) DBテーブルの自動生成機能を追加(EntityManager)
 EntityManagerにDBテーブルの自動生成機能を追加しました。これにより、DBの初期設定プログラム(initialize.php: SQLのcreate table文の発行)は不要になりました。

(3) DB検索メソッドの追加・変更(EntityManager)
 検索条件を書くだけで検索できるメソッドquery(), prepareFetch()を追加しました。これと上のテーブル自動生成機能により、SQLをまったく知らなくても、Sabaphyを使って、一通りのアプリケーションが構築できるようになりました。これに伴い、従来のfindByQuery(), prepareFetchByQuery()は、findInSQL(), prepareFetchInSQL()にメソッド名を変更しました。また、getNextByFetch()はgetNextFetch()にメソッド名を変更しています。

(4) 例外送出をコマンド発行と同一視(Dispatcher、ExceptionHandler)
 例外が送出されたとき、その例外が属するクラス名と同名のコマンドが登録されていれば、そのコマンドを実行するように変更しました。これにより自由度の高いエラー回復処理やカスタムエラー画面登録ができるようになりました。これに伴い、ExceptionHandler側のカスタムエラービュー、エラー回復コマンドの登録機能は削除しました。

(5) コマンド情報のオブジェクト化($commandInfo)
 ワークユニットのアクションメソッドの引数やビューで参照できる変数である$commandInfoを従来の連想配列からオブジェクトに変更しました。CommandInfoというクラスがライブラリに追加になっています。これはワークユニット内でその内容変更が容易になることと、ビューとしてSmartyを使うとき、データの受け渡しを容易にするためです。

(6) クラスオートローダの追加(AutoLoader)
 クラスオートローダ AutoLoader をライブラリに追加しました。これを利用することで、require_once文を個々のクラス毎に書かずにすませることができるようになりました。

特記事項

Sabaphyはフレームワークベースのアプリケーション開発の学習を主目的としてお り、オープンソースとしてソースを含めて公開します。Sabaphyライブラリのライセンスは、GNU GENERAL PUBLIC LICENSE に準拠するものとします。ご利用に当たっては利用者の責任でご利用下さい。

連絡先

東京国際大学商学部情報システム学科 佐藤英人
e-mail: sato@tiu.ac.jp

Previous Next
ダウンロード