Upload
rie-nakau
View
4.961
Download
7
Embed Size (px)
DESCRIPTION
PHPカンファレンス関西2012 PHPフレームワークKohana 2012.05.12
Citation preview
PHPフレームワーク
Kohana
中右 理絵
2012.05.12 PHPカンファレンス関西2012
自己紹介
• 名前: 中右理絵
• Twitter: @Nakau
• 職業: プログラマー
• 活動: Kohana日本ユーザ会、他
コンテンツ• Kohanaとは
• Kohanaの特徴
• HMVCとカスケーディングファイルシステム
• Kohanaの仕組みを利用して出来ること
• 質疑応答
Kohanaとは
Kohana
• PHP
• Webアプリケーションフレームワーク
• オープンソース
• BSDライセンス
現在のKohana
• 安定版 3.2.0
• サポート版 3.1.2
• 開発中 3.3.0-RC2
Kohanaで作られたサイト
site PV/DAY
NationalGeoGraphic Kids http://kids.nationalgeographic.com/kids/
990万
Couch Surfinghttp://couchsurfing.org 310万
WE PAYhttps://wepay.com/
200万
※PVはGoole adplannerから
Kohanaの特徴
比較CakePHP symfony2 Kohana
PHP ver 4.3.2 5.3.2 5.3.0
ライセンス MIT MIT BSD
アーキテクチャ MVC MVC HMVC
プラグイン 可 可 可/独立コード生成 ○ ○ −
Kohanaの特徴
• 軽量、高速
• HMVC、オブジェクト指向設計
• カスケーディングファイルシステム
PHP5ベース• Kohana 3.2.xでは PHP 5.3 以上が必須
• メリット
• コードがシンプル、高速
• デメリット
• サーバ環境を選ぶ
軽量、高速
• The Swift Framework
• ライブラリフリー
• PEAR不要
• PCRE UTF-8 / SPL / Reflection / Filters / Iconv / mbstring が必須
HMVCとカスケーディングファイルシステム
HMVC
• 複数のMVCパターンを階層状に組み合わせる
• 個々のMVCは独立して動作
• プログラム間の依存関係を小さくする
• モジュールの修正、拡張を容易にする
• オブジェクト指向のメリットを強化
MVC
Controller
Model View
HMVCController
Model View
Controller
Model View
Controller
Model View
親 / 子
親 / 子
Layer: 1
Layer: 2
Layer: 3
KohanaのMVC
• 独立したMVC
• system
• modules ※複数
• application
system層
• Kohanaのコア
• コアクラスとそれを透過的に拡張したクラスを備える
• Kohanaをアップグレードするときを除き、変更することは無い
modules層• アプリケーションで使う部品化された機能
• メールフォーム、ORM、キャッシュ ...etc
• modulesディレクトリ以下に格納
• Kohanaに含まれるモジュール
• auth / cache / codebench / database / image / orm / unittest
apllication層• アプリケーションを実装する
• 部品化しない、そのアプリ特有の機能
• ルーティング(URLと機能の対応)
• ビジネスロジック
• サイトのデザイン
KohanaのHMVC
• application , 各module , system それぞれが独立したMVC
• moduleはapplicationが無くても動く
• カスケーディングファイルシステムでより便利に
• フレームワーク上の擬似的なファイルシステム
• カスケーディング=滝のように流れ落ちる
• ある地点で水を塞き止めると、それより下段に水はいかない
• ある地点で水に何か入れると、それより下段には水と混ざった何かが流れる
カスケーディング ファイルシステム
http://www.flickr.com/photos/f1rstborn/1895693283/
カスケーディング ファイルシステム
• 階段状の構造 = Kohanaのファイル配置規則
• application , modules , system ディレクトリ
• 優先順位 application > modules > system
• moduleはいくつでも増やせる
• application > module1 > module2 > system
カスケーディング ファイルシステム
• 滝のような性質 = Kohanaのソース採用ルール
• ソース = PHPソース、画像、CSS ...etc
• 同名ファイルは上位を優先 (塞き止め)
• 同名設定ファイルは設定値をマージ (何か入れる)
• applicationが最上位、systemが最下位
ファイル検索の例
• Kohana::find_file(‘views’,‘kohana/error’);
例1
• Kohana::find_file(‘classes’,‘cookie’);
例2
• Kohana::config->load(‘database’);
例3
Config/ database.php
Kohana::find_file
• Kohanaのファイル検索関数
• Kohana::auto_load()や各種Factoryメソッド内で使用
• マッチするファイルパスを返す
public static find_file( string $dir , string $file [, string $ext = NULL , boolean $array = bool FALSE ] )
Kohana::find_file
• 引数
• $dir - - - ディレクトリ名
• $file - - - ファイル名
• $ext - - - 拡張子(phpは省略可能)
• $array - - - 複数のファイルを配列形式で返すか
public static find_file( string $dir , string $file [, string $ext = NULL , boolean $array = bool FALSE ] )
Kohana::find_file
• フレームワーク内での動作
• 設定ファイルを検索するときは$array = true
• 同一ファイル名の設定をマージして使用する
• 設定ファイル以外の検索は$array = false
• 階層構造の上位に配置されたファイルを優先
public static find_file( string $dir , string $file [, string $ext = NULL , boolean $array = bool FALSE ] )
Config::load()
• Kohanaの設定読み込みメソッド
• 設定グループ名を指定する
• Kohana_Config_Groupオブジェクトを返す
• 同一設定グループ名のファイルが複数あれば、設定値をマージする
public load( string $group )
Kohanaの仕組みを利用して出来ること
透過的な機能拡張
• カスケーディングファイルシステムを利用
• 既存のクラスファイルを書き換えない
• 既存のクラスを利用している箇所に影響を与えない
• applicationの下にcookieクラスをつくる
例)cookieクラス
例:Cookieクラスclass Cookie extends Kohana_Cookie{}system/classes/cookie.php
application/classes/cookie.php
class Cookie extends Kohana_Cookie{ public function get($name){ // get処理を変更 } public function set($name,$val){ // set処理を変更 }}
• Kohana::find_file(‘views’,‘kohana/error’);
例:Viewファイル
例:Viewファイルsystem/view/kohana/error.php
例:Viewファイルapplication/view/kohana/error.php
http://www.flickr.com/photos/fweno/5536913695/
モジュールの開発と利用• モジュールが独立している
• アプリが完成しなくてもモジュールを完成させられる
• アプリに変更が合ってもモジュールに影響が無い
• モジュール開発がしやすい
• 公開モジュールの利用がしやすい
例• 新規案件”○○社通販サイト”をつくろう!
• 通販サイト=アップリケーション
• 通販サイトには”お問い合わせフォーム”からメール送信する仕組みが必要!
• お問い合わせフォーム=メールフォームモジュール
例• 汎用的なメールフォームモジュールを作ろう!
• 件名と本文が指定できるモジュールを作った
• 宛先は設定ファイルから読み込む
• 宛先の設定値はとりあえず仮のメールアドレス([email protected])でコミット
• この時点でテスト可能
例• ”○○社通販サイト”のお問い合わせ先は”support@○○.co.jp”にしたい。
• application層に同名の設定ファイルを置く
• ”○○社通販サイト”に問い合わせる時は、お客様の名前と連絡先を入力してほしい!
• application層でモジュールを拡張
git submodule
• git submoduleはモジュールのバージョン管理に最適
• サブモジュールのコミットはマスタープロジェクトに影響を与えない
• マスタープロジェクトでコミットすることでサブモジュールのある状態を履歴管理できる
まとめ• Kohanaは軽量・高速なフレームワーク
• Kohanaはオブジェクト指向設計のメリットを強化した設計
• 機能の透過的な拡張が可能
• アプリケーションとモジュールを完全に分離
• モジュールの開発が容易/提供を受けやすい
日本ユーザ会• 目的
• 日本語ドキュメントの提供
• 日本語によるディスカッション
• http://kohana-users.jp/
• googleグループ kohana-users.jp
質疑応答
おまけ
公開モジュール
• 以下のサイトで公開されています
• kohana-universe
• kohana.mongeslani.com
• kohana-modules.com
vendor
• 外部ライブラリを設置する場所
• カスケーディングファイルシステムの命名規則に従わなくてよい
• 手動でインクルードする必要あり
• Zendライブラリ等も使用可能
デバッグページ