home>>PHP FW Kohanaを使う

PHP FW Kohanaを使う

'Kohana'というフレームワーク  アプリケーションを作る  Kohanaの基本動作覚書

'Kohana'というフレームワーク

はじめに



さいしょ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]














annex
CodeIgniter徹底入門 4798116769

CodeIgniter徹底入門 河合 勝彦 鈴木 憲治 翔泳社 2008-06-10












note
[2] なお、これを完璧にするためには、 application/config/config.phpの中の $config['index_page'] の部分をコメントアウトしておくのがよろしいです。
[3] PATH_INFOなどは、CGIモードのPHPではまともに取得できるかどうかという問題があるので、 実はREQUEST_URIが、一番単純で、触りやすいはずなんですが( Zend FrameWorkgoogle とか Ruby on RailsWikiPedia もそうしているはず)。 (2年ほどまえの記憶の限り)対応していない(いなかった?)IISのことを考えて候補から外したのかしら。
[4] 付記:日本で独自に翻訳を一部試みているサイトに http://afrofair.wiki.fc2.com/ があるようだ。ただサイトも昨年晩秋以降、更新が停まっているみたい (20090710現在の状態)。
[5] 本家のドキュメントによれば、examples.phpファイルは削除することが推奨されている。をいをい。