いまさらだけどrhaco2の紹介と、自分用のセットアップのメモ
rhaco2は内容が変わりやすいフレームワークです。 この記事の公開日が過去な程、参考にはなるかもしれませんが、正確じゃなくなっている可能性が高くなります。 また、手探りで調べているところも多いので、元々正確じゃないかもしれません。
rhaco2の特徴
rhaco2本体*1はたったの30ファイル程度と、とてもコンパクトなフレームワークです。
マジックメソッドをふんだんに使ったObjectというクラスがあり、これを基底クラスとしておよそphpとは思えない独特な機能を提供します。
コンパクトなcoreをベースに、vendorsと呼ばれるライブラリを使って拡張していくスタイルのようで、データベースと接続する機能も、ライブラリとして提供されます。
rhaco2ライブラリ用のリポジトリサーバーを作る機能が、coreに組み込まれている程です。
基本的に分かりやすいドキュメントというのは整備されにくく、ソースコードそのものか、rhaco2が独自に備えるDocBlockからのAPIリファレンス生成機能が頼りです。
バージョンという概念がほぼ無く、基本的に最新のものを使うしかありません。*2
rhaco1の頃の「No trunk. No rhaco」というフレーズが、rhacoを良く表してます。
そのtrunkも、ほぼ毎日コミットされていて、1日に数リビジョンは上がっていくので、色々と大変な気はします。
ただ、根幹の部分はほぼ完成されているので、そんなすごい変更はそうそう無いらしいです。
rhaco2のセットアップ
> mkdir hoge
> cd hoge
> curl -LO http://rhaco.googlecode.com/files/setup.php# インストール
> php setup.php
set or install[/hoge/core/]: ../core[ENTER]
install application: org.rhaco.sample.hello_xml[ENTER]
application url: http://localhost/hoge[ENTER]
working directory [/hoge/work/]: [ENTER]
application mode: dev[ENTER]# .htaccessの作成
> php setup.php -htaccess# http://localhost/hoge/hello にアクセスして確認
http://rhaco.org/rhaco2
公式サイトにこれだけしか書かれてないのもすごいですが、大体これでセットアップできます。
rhaco2はコマンドラインでsetup.phpを実行すると、対話型でセットアップが出来ます。
core自体は、セットアップの最中にsetup.phpが最新をダウンロードしてくるので、最初に必要なのはsetup.phpだけです。
setup.phpの機能
$ php setup.php application name, summary. ================================================== description ================================================== try 'php setup.php -h *****' for more information app : アプリケーションXMLのひな形の作成 app_config : アプリケーションの設定を変更する def : 定義名のリスト display_errors : phpのエラー出力を制御する eclipse : eclipse用のツール export_core : coreをエクスポートする export_libs : repositoryのtgzをexportする gettext : po,moファイルを生成する htaccess : .htaccess (RewriteBase)を生成する import : Repositoryからライブラリパッケージをimportする import_repositorys : 定義されたrepositoryからxmlを取得し、全てのパッケージを取得する install : Repositoryからアプリケーションをインストールする log : デバッグアウトを制御する man : ソースドキュメントを表示する repository : Repositoryが提供するアプリケーションとライブラリの一覧を表示する repository_server : Repository serverになる test : testを実行する up : vendorsをすべて更新する
最初のセットアップが完了すると、coreがダウンロードされて、setup.phpと同じ場所に__settings__.phpが生成されます。
2回目以降setup.phpを実行すると、こんな機能が使えるコマンドとして使えます。
自分用のセットアップのメモ
php setup.php
$ pwd /Users/myuser/Dev/pdt2.1/tryrhaco2/ $ mkdir temp $ cd temp $ curl -LO http://rhaco.googlecode.com/files/setup.php $ php setup.php core path[/Users/myuser/Dev/pdt2.1/tryrhaco2/temp/core/]: ../../core.latest install application: application url [http://localhost/temp]: http://pdt21.localhost/tryrhacco2/temp working directory [/Users/myuser/Dev/pdt2.1/tryrhaco2/temp/work/]: application mode: dev
- apacheのhtdocs
- /Users/myuser/Dev/pdt2.1/
- 上記に対応するURL
- http://pdt21.localhost/
- rhaco2をセットアップしたい場所
- http://pdt21.localhost/tryrhacco2/temp
- coreの置き場所
- /Users/myuser/Dev/pdt2.1/core.latest
いちいちVirtualhostの設定をしたり、Virtualhostがネームベースだからhostsに追記したりするのが面倒なので、1個だけVirtualhostを設定してます。
なので通常だと殆どデフォルト値でいけるセットアップが、ちょっと入力が必要になってます。
- core path
- install application
- rhaco2を使って作られたアプリケーションのインストール。開発のためにセットアップするなら、基本的に入力しない。
- application url
- working directory
- アプリケーションが生成するキャッシュファイルなどの置き場所。特に理由が無ければデフォルト値でOK。
- application mode
- モードを切り替える機能があるみたいですが詳細は不明。
- とりあえず入力しなくても良いし、好きに入力しても動きます。
- release と stage は、rhaco2側で意味がある値のようです。
アプリケーションXMLと.htaccessの生成
$ php setup.php -h app Usage: string value アプリケーションxmlの名前 Option: htaccess : (mixed) アプリケーションXMLのひな形の作成 $ php setup.php -app -htaccess /tryrhaco2/temp write /Users/myuser/Dev/pdt2.1/tryrhaco2/temp/index.php write .htaccess
アプリケーションXMLの雛形と、ついでに.htaccessを生成。
$ cat index.php <?php require dirname(__FILE__)."/__settings__.php"; app(); ?> <app> <handler> <map url="" template="index.html" /> </handler> </app>
フレームワークによってdispatchとかroutingとか言うURLマッピングを、rhaco2ではこんなアプリケーションXMLで書きます。
アプリケーションXMLの書き方は、色々あるみたいですが、とりあえず雛形としてはこれが生成されます。
あと、アプリケーションXMLを使わなくてもURLマッピングは出来るはずですが、まぁこれが定石です。
$ cat .htaccess RewriteEngine On RewriteBase /tryrhaco2/temp RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)$ index.php/$1?%{QUERY_STRING} [L]
mod_rewriteが使える場合に限るけど、mod_rewite用の.htaccessを生成されます。
前述の通りドメインルートにディレクトリを作ってるので、RewriteBaseを引数として書いてあげないと動きません。
$ php setup.php -htaccess /tryrhaco2/temp
__settings__.phpにエラー出力とデバッグ出力について定義する。
$ cat __settings__.php <?php require_once("/Users/myuser/Dev/pdt2.1/core.latest/jump.php"); App::config_path(__FILE__,"http://pdt21.localhost/tryrhacco2/temp/","/Users/myuser/Dev/pdt2.1/tryrhaco2/temp/work/","dev");
__settings__.php は環境に依存する定義を書く所です。
最初のインストール直後は、こんな内容になってます。
基本的に環境に依存する事は __settings__.php 以外には書いちゃだめです。
$ vi __settings__.php <?php require_once("/Users/myuser/Dev/pdt2.1/core.latest/jump.php"); App::config_path(__FILE__,"http://pdt21.localhost/tryrhacco2/temp/","/Users/myuser/Dev/pdt2.1/tryrhaco2/temp/work/","dev"); display_errors(false,true); Log::config_level("info",false); C(Log)->add_module(R("org.rhaco.io.log.LogFile")); C(Log)->add_module(R("org.rhaco.io.log.LogFirebug")); C(Log)->add_module(R("com.tokushimakazutaka.io.log.LogGrowl"));
$ php setup.php -display_errors on update __settings__.php
display_errors(false,true) はエラー出力についての設定で、エラーが発生したらブラウザにエラーメッセージが出る定義です。
このコマンドで display_errors(false,true) が追記されるけど、自分で書いてもいい。
$ php setup.php -display_errors off update __settings__.php
ちなみに、こうすると __settings__.php から display_errors(false,true) が消えてしまい、php.iniの設定に依存する状態になりました。
php.ini がエラーを出力する設定になってると、どっちにしてもエラーは出ちゃいます。
リリース時はエラーを出さない方が良いので、直接 display_errors(false,false) と書くと出なくなります。
Log::config_level("info",false); は、デバッグレベルをinfoに設定した上で、第2引数がfalseなのでデバッグ出力をブラウザでは表示しない設定です。
その代わり、Logクラスにモジュールを追加し、デバッグ出力をファイルに保存*4したり、Firebugのコンソールに表示*5したりしてます。
C(Log)->add_module(R("com.tokushimakazutaka.io.log.LogGrowl")); は、読んだとおりMacでよく使われるGrowlに表示するモジュールだけど、自分の環境では動きません。*6
ちなみにR()はオブジェクトのリファレンスを返す関数ですが、引数にライブラリを指定すると、まだ導入してなければリポジトリからダウンロードしてくれます。
rhaco2のvendorsは、使いたくなったらそのまま書いて、実行すれば良いんです。
他にもちゃんとimport()関数があったり、php setup.php -importてのもあります。
長くなりすぎたので、この辺にしときます。