すがブロ

sugamasaoのhatenablogだよ

はじめての rhaco3

Advent Calendar[23日]

先日rhaco3がリリースされたので、なんとかかんとか使えるようになってみたいと思います。
ちなみに、自分のPHPスキルを書いておくと

  • PHP 触ったこと無い
  • rhaco も触ったこと無い

知識としてはパーフェクトPHPをぱらぱら見たりはしているけれど、実際手を動かしたことはないというレベル。

パーフェクトPHP (PERFECT SERIES 3)

パーフェクトPHP (PERFECT SERIES 3)

なお、以下の環境で動作確認をしています。最初、PHPをMAMPで入れたものを使っていたのだけど、途中でエラーになったのでデフォルトで入っている方に切り替えた(詳しくは後述)。

rhaco3 を手に入れる

Page not found · GitHub Pages のダウンロードから取得するか、curl などで直接ファイルを取得しましょう。
なお、rhaco3 は PHP 5.3 からでないと使えません。

sugamasao@GRAM% curl -O http://rhaco.org/download/core/rhaco3.php
(省略)
sugamasao@GRAM% ll
total 32
-rw-r--r--  1 sugamasao  staff  12576 12 24 00:20 rhaco3.php

これでセットアップは完了です。

rhaco3 を動かしてみる

そもそも rhaco シリーズも触ったことが無いので、知らないことばかり。今日はとりあえずチュートリアルを動かしてみて、詳しくは明日に続こうと思う。

パッケージのインポート

sugamasao@GRAM% php -d phar.readonly=0 rhaco3.php -import  org.rhaco.Conf org.rhaco.Request org.rhaco.Paginator org.rhaco.Template org.rhaco.store.db.Dbc org.rhaco.store.db.Dao  org.rhaco.store.db.Q org.rhaco.flow.module.HtmlFilter  org.rhaco.flow.module.Paginator org.rhaco.store.db.module.Sqlite

上記のコマンドを一行で実行すると、各パッケージを取得してくるようだ。
実行すると、vendors ディレクトリが作られる。どうやら、importしたファイルはここに入るようだ。

sugamasao@GRAM% ll vendors/
total 232
drwxr-xr-x  3 sugamasao  staff    102 12 24 00:35 _source
-rw-r--r--  1 sugamasao  staff    446 12 24 00:36 org.rhaco.Conf.phar
-rw-r--r--  1 sugamasao  staff    957 12 24 00:36 org.rhaco.Exceptions.phar
-rw-r--r--  1 sugamasao  staff   2207 12 24 00:36 org.rhaco.Log.phar
-rw-r--r--  1 sugamasao  staff   5834 12 24 00:36 org.rhaco.Object.phar
-rw-r--r--  1 sugamasao  staff   3329 12 24 00:36 org.rhaco.Paginator.phar
-rw-r--r--  1 sugamasao  staff   3457 12 24 00:36 org.rhaco.Request.phar
-rw-r--r--  1 sugamasao  staff  11996 12 24 00:36 org.rhaco.Template.phar
-rw-r--r--  1 sugamasao  staff   3949 12 24 00:36 org.rhaco.Xml.phar
-rw-r--r--  1 sugamasao  staff    587 12 24 00:36 org.rhaco.flow.module.HtmlFilter.phar
-rw-r--r--  1 sugamasao  staff   1156 12 24 00:36 org.rhaco.flow.module.Paginator.phar
-rw-r--r--  1 sugamasao  staff   1132 12 24 00:36 org.rhaco.net.Query.phar
-rw-r--r--  1 sugamasao  staff    538 12 24 00:36 org.rhaco.store.db.Column.phar
-rw-r--r--  1 sugamasao  staff  12442 12 24 00:36 org.rhaco.store.db.Dao.phar
-rw-r--r--  1 sugamasao  staff    740 12 24 00:36 org.rhaco.store.db.Daq.phar
-rw-r--r--  1 sugamasao  staff   1727 12 24 00:36 org.rhaco.store.db.Dbc.phar
-rw-r--r--  1 sugamasao  staff   2295 12 24 00:36 org.rhaco.store.db.Q.phar
-rw-r--r--  1 sugamasao  staff    267 12 24 00:36 org.rhaco.store.db.exception.DaoException.phar
-rw-r--r--  1 sugamasao  staff    359 12 24 00:36 org.rhaco.store.db.exception.LengthException.phar
-rw-r--r--  1 sugamasao  staff    364 12 24 00:36 org.rhaco.store.db.exception.NotfoundException.phar
-rw-r--r--  1 sugamasao  staff    365 12 24 00:36 org.rhaco.store.db.exception.RequiredException.phar
-rw-r--r--  1 sugamasao  staff    359 12 24 00:36 org.rhaco.store.db.exception.UniqueException.phar
-rw-r--r--  1 sugamasao  staff   3766 12 24 00:36 org.rhaco.store.db.module.Base.phar
-rw-r--r--  1 sugamasao  staff    855 12 24 00:36 org.rhaco.store.db.module.Sqlite.phar

ここを見る限り、パッケージは phar 形式*2で提供されており、_source ディレクトリ内には展開された php ファイルなどが入っているようだ*3

Sqlite3 でテーブルを作るスクリプト

vim create.php

内容はチュートリアルの「データベースの作成」をそのままコピペ。
そして、実行してみる。

sugamasao@GRAM% php create.php 
sugamasao@GRAM% ll 
total 48
-rw-r--r--   1 sugamasao  staff   3072 12 24 01:41 board
-rw-r--r--   1 sugamasao  staff    259 12 24 01:06 create.php
-rw-r--r--   1 sugamasao  staff  12576 12 24 01:41 rhaco3.php
drwxr-xr-x  26 sugamasao  staff    884 12 24 01:41 vendors

SQLiteのファイルが作成された。

なお、このエントリの最初で少し書いたけれど、MAMPのPHPを使っていたところ、以下のようなエラーが発生してうまく動かせなかった。最初はモジュールが足りないのかと思って Sqlite のモジュールを import してみたのだけど、それでも問題は解決せず、PHP自体を変えることで動作するようになった*4

Fatal error: Uncaught exception 'ReflectionException' with message 'Class \org\rhaco\store\db\module\Sqlite does not exist' in phar:///Users/sugamasao/var/htdocs/rhaco_ac_23/vendors/org.rhaco.store.db.Dbc.phar/Dbc.php:50
Stack trace:
#0 phar:///Users/sugamasao/var/htdocs/rhaco_ac_23/vendors/org.rhaco.store.db.Dbc.phar/Dbc.php(50): ReflectionClass->__construct('\org\rhaco\stor...')
#1 phar:///Users/sugamasao/var/htdocs/rhaco_ac_23/vendors/org.rhaco.store.db.Dbc.phar/Dbc.php(40): org\rhaco\store\db\Dbc->connect()
#2 [internal function]: org\rhaco\store\db\Dbc->__new__('{"type":"org.rh...')
#3 phar:///Users/sugamasao/var/htdocs/rhaco_ac_23/vendors/org.rhaco.Object.phar/Object.php(66): call_user_func_array(Array, Array)
#4 /Users/sugamasao/var/htdocs/rhaco_ac_23/create.php(5): org\rhaco\Object->__construct('{"type":"org.rh...')
#5 {main}
  thrown in phar:///Users/sugamasao/var/htdocs/rhaco_ac_23/vendors/org.rhaco.store.db.Dbc.phar/Dbc.php on line 50

次回へ続く

MAMPの罠にはまって時間を食い過ぎたので、実際に Web で動かす、というのは次回やろうと思います。

追記

MAMPのPHPでも動くようになりました!

ありがとうございます!><

*1:OSXのデフォルトで入ってるヤツ

*2:pharも 5.3 から標準添付されるようになったんだっけ?

*3:_sourceは eclipse 等でソースを表示するためのもので、rhacoから使ったりはしていないみたいです

*4:@tokushimaさんに色々助けていただきました!