PHP FW Kohanaを使う
'Kohana'というフレームワーク
table of contents
はじめに
さいしょCodeIgniterWikiPedia (CI)でサイトを作ろうと思った。以前触れたことがあって好感していたから。今回試してみると(やっぱりまだ)PHP version4との道行きを余儀なくされていて、あらためて使うのは辛いかもしれないと感じた。電脳網を検索していると、CIからの派生というか、CIグループから喧嘩別れ風に開発されているKohana というフレームワークを使うことにした。PHP5専属のハワイアンな常夏野郎である。
日本ではKohanaは利用者がすくなそうで(じゃあ外国では?、と言われても知らないのだけれど)、ぼくのような半可通の落書きでも少しは(混乱させることもふくめて)意味があるかもしれない。
情報源
KohanaphpWikiPedia の本家はhttp://www.kohanaphp.com/。ソース、ドキュメントもそこにある。
doxygenWikiPedia によるAPI一覧はhttp://api.kohanaphp.com/で見ることが出来る。
開発サイトはhttp://dev.kohanaphp.com/で、リポジトリもある。
本家の「Kohanaの歴史」 historyをみると、開発経緯の裏話が書いてある。
旧き良き日々
The Good Old Days September - October 2007 We get a BDFL, decision to go PHP5 only, new life, new goals. Almost total rewrite undertaken by developers. (All three of them)
この「We 」氏たちがCIからの離別宣言していたこの頃のぼくの人生といえば、連続でパソコンが壊れたり、ルーターがおなくなりになったり、水回りの故障で部屋が水浸しになったり、そのせいでゴキブリさんが発生して部屋を飛び交ったことがあったりと、身辺雑事的におもしろおかしいことがいくつかあって、パソコンやうゑぶに触れるのが極端に少なくなった時期で、あのかび臭く懐かしき日々。
インストール覚え
解凍と最初の接続
本家サイトから*zip/*tar.gzのソースをダウンロード解凍後、index.phpのあるパスをhttp(apache2)のドキュメントルートにしてブラウザで接続するだけ。
インストール直後は、index.phpからinstall.phpが読み込まれて、PHPの版(5.20以上が必要)とか稼働するための必要条件をチェックしてくれるわけで、そこで彼(彼女)が。「うん、大丈夫だよ。こわくないよ!」と言ってくれれば、その彼(彼女)を削除します。なぜなら、用済みだから(鬼畜)。
その後、接続しなおせばkohanaの初期画面(welcome画面)が出る。
ディレクトリの初期構造
解凍直後のディレクトリ・ファイル
---file--- Kohana License.html example.htaccess kohana.png index.php install.php ---dir--- application modules system
CIのディレクトリ構成と違っている点が2点。
ひとつは applicationディレクトリの扱いが違っている。CIではsystemディレクトリ直下にあるんだけど、Kohanaではsystemと同位のところにあります。
ふたつ 目は、CIには無いmodulesディレクトリがsystemと同じところに存在する。これはKohanaの肝なのだけど、その意味については後に取り上げることにする[1]
スクリプトディレクトリの移動とindex.phpの変更
いつも最初にやるのは、おまじない。安全を期して上の3ディレクトリを直接httpでアクセス出来ないところに移動しておこう。
index.phpの中の
index.phpの中のディレクトリパス設定部分
$kohana_application = 'application'; $kohana_modules = 'modules'; $kohana_system = 'system';
を書き換える。例えばindex.phpが在るディレクトリのすぐ上の位置に置き直してみる。
例:applicationディレクトリの移動・変更
kohanaの初期ディレクトリで、 mv application ../として index.php内の行を $kohana_application = '../application';
.htaccessの設定
つぎに、添付のexample.htaccessをもちいて .htaccessを設定する。httpd(例:apache2)のmod_rewrite設定が可能であることが条件。
index.phpがパスに表示される
http://examples.com/index.php/helloworld.html
を、
index.phpをパスに入れない
http://examples.com/helloworld.html
という風に書ける[2]。
.htaccessの有効化
chmod 400 example.htaccess mv example.htacccess .htaccess chown apache2のユーザ .htaccess
添付例の中身
# Turn on URL rewriting
RewriteEngine On
# Installation directory
RewriteBase /
# Protect application and system files from being viewed
RewriteRule ^(application|modules|system) - [F,L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT,L]
利用可能なURI情報について
PHPが利用できるURI情報定数・変数は各種ある。PATH_INFOとかPHP_SELFとか。$_POSTや$_GETもそうだ。
それらのうち、どの情報を優先してフレームワークのURI情報の基準にするのかについては、Kohanaでは、Routeクラス(system/libraries/Route.php)が自動判断している。
kohanaのURI情報の採用優先順序
GET($_GET['kohana_uri']名での取得) PATH_INFO ORIG_PATH_INFO PHP_SELF
これはCIとは少し違っていて、CIは自動判断以外にも、application/config/config.phpの$config['uri_protocol']の行を編集して
CodeIgniterが扱えるURI情報各種
GET PATH_INFO ORIG_PATH_INFO QUERY_STRING REQUEST_URI
という手動選択が可能だったように覚えている。
ところで、Kohanaでは、CIが対応していたREQUEST_URIへのサポートがないようだ[3]。すこし気になるところだけれど、本頁(s)のようにapache2 +php モジュールを使っている限り問題がないので、PATH_INFOで動作している、ということだけ頭に留めておくことにしたい。
国際化対応について
Kohana自身の国際化対応
システムのメッセージは、system(あるいはapplication、あるいはモジュールの)/i18n/ディレクトリのファイルで、国際化対応出来るようになっている。言語設定はconfig/locale.phpの中で
$config['language'] = array('en_US', 'English_United States');
のように指定できる。
現在の利用可能言語一覧
de_DE en_GB en_US es_AR es_ES fi_FI fr_FR it_IT nl_NL pl_PL pt_BR ru_RU
なお、この頁を記している2009/0630現在、日本語対応ファイル(多分ja_JPとなるだろう)はない。
Kohanaの利用者掲示板を眺めていたら、2008年晩秋、米国の日本語教師(米語母語)が日本語版を作ったので提供予定するという、その人の代理人が書き込んでいたのだが、立ち消えになっているようであります。
Kohanaユーザガイド国際化対応
http://docs.kohanaphp.com/userguide/translationsによれば、将来Kohana自身にユーザガイドファイルが提供され、ロケールごとに翻訳可能になるとのことである。でも開発は停まっているようで(2008年夏ごろまで活発に活動していた感じ)、いつになるかは不明。次版(2.2.4)の開発ロードマップにも入っていない。また、http://forum.kohanaphp.com/comments.php?DiscussionID=1465&page=1#Item_0などの独自?の試みも、ストップしているみたい[4]。
国際化に限らず、全般的に文書化が遅れていると言うのがKohanaの問題であるようで、本家のフォーラムや各種ブログのコメント欄に「ドキュメント化がすすめばCIから乗り換えるんだけど」的な話がいくつもころがっている。
添付のexamplesについて
初期添付のものには、コントローラーとしてwelcome画面用以外に、examplesコントローラーがついてくる。(application/controllers/examples.php)。
/examples<=これ。
なんかちょっと嬉しい[5]。