52
PHPフレームワーク Kohana 中右 理絵 2012.05.12 PHPカンファレンス関西2012

PHP フレームワーク kohana

Embed Size (px)

DESCRIPTION

PHPカンファレンス関西2012 PHPフレームワークKohana 2012.05.12

Citation preview

Page 1: PHP フレームワーク kohana

PHPフレームワーク

Kohana

中右 理絵

2012.05.12 PHPカンファレンス関西2012

Page 2: PHP フレームワーク kohana

自己紹介

• 名前: 中右理絵

• Twitter: @Nakau

• 職業: プログラマー

• 活動: Kohana日本ユーザ会、他

Page 3: PHP フレームワーク kohana

コンテンツ• Kohanaとは

• Kohanaの特徴

• HMVCとカスケーディングファイルシステム

• Kohanaの仕組みを利用して出来ること

• 質疑応答

Page 4: PHP フレームワーク kohana

Kohanaとは

Page 5: PHP フレームワーク kohana

Kohana

• PHP

• Webアプリケーションフレームワーク

• オープンソース

• BSDライセンス

Page 6: PHP フレームワーク kohana

現在のKohana

• 安定版 3.2.0

• サポート版 3.1.2

• 開発中 3.3.0-RC2

Page 7: PHP フレームワーク kohana

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から

Page 8: PHP フレームワーク kohana

Kohanaの特徴

Page 9: PHP フレームワーク kohana

比較CakePHP symfony2 Kohana

PHP ver 4.3.2 5.3.2 5.3.0

ライセンス MIT MIT BSD

アーキテクチャ MVC MVC HMVC

プラグイン 可 可 可/独立コード生成 ○ ○ −

Page 10: PHP フレームワーク kohana

Kohanaの特徴

• 軽量、高速

• HMVC、オブジェクト指向設計

• カスケーディングファイルシステム

Page 11: PHP フレームワーク kohana

PHP5ベース• Kohana 3.2.xでは PHP 5.3 以上が必須

• メリット

• コードがシンプル、高速

• デメリット

• サーバ環境を選ぶ

Page 12: PHP フレームワーク kohana

軽量、高速

• The Swift Framework

• ライブラリフリー

• PEAR不要

• PCRE UTF-8 / SPL / Reflection / Filters / Iconv / mbstring が必須

Page 13: PHP フレームワーク kohana

HMVCとカスケーディングファイルシステム

Page 14: PHP フレームワーク kohana

HMVC

• 複数のMVCパターンを階層状に組み合わせる

• 個々のMVCは独立して動作

• プログラム間の依存関係を小さくする

• モジュールの修正、拡張を容易にする

• オブジェクト指向のメリットを強化

Page 15: PHP フレームワーク kohana

MVC

Controller

Model View

Page 16: PHP フレームワーク kohana

HMVCController

Model View

Controller

Model View

Controller

Model View

親 / 子

親 / 子

Layer: 1

Layer: 2

Layer: 3

Page 17: PHP フレームワーク kohana

KohanaのMVC

• 独立したMVC

• system

• modules ※複数

• application

Page 18: PHP フレームワーク kohana

system層

• Kohanaのコア

• コアクラスとそれを透過的に拡張したクラスを備える

• Kohanaをアップグレードするときを除き、変更することは無い

Page 19: PHP フレームワーク kohana

modules層• アプリケーションで使う部品化された機能

• メールフォーム、ORM、キャッシュ ...etc

• modulesディレクトリ以下に格納

• Kohanaに含まれるモジュール

• auth / cache / codebench / database / image / orm / unittest

Page 20: PHP フレームワーク kohana

apllication層• アプリケーションを実装する

• 部品化しない、そのアプリ特有の機能

• ルーティング(URLと機能の対応)

• ビジネスロジック

• サイトのデザイン

Page 21: PHP フレームワーク kohana

KohanaのHMVC

• application , 各module , system それぞれが独立したMVC

• moduleはapplicationが無くても動く

• カスケーディングファイルシステムでより便利に

Page 22: PHP フレームワーク kohana

• フレームワーク上の擬似的なファイルシステム

• カスケーディング=滝のように流れ落ちる

• ある地点で水を塞き止めると、それより下段に水はいかない

• ある地点で水に何か入れると、それより下段には水と混ざった何かが流れる

カスケーディング    ファイルシステム

http://www.flickr.com/photos/f1rstborn/1895693283/

Page 23: PHP フレームワーク kohana

カスケーディング    ファイルシステム

• 階段状の構造 = Kohanaのファイル配置規則

• application , modules , system ディレクトリ

• 優先順位 application > modules > system

• moduleはいくつでも増やせる

• application > module1 > module2 > system

Page 24: PHP フレームワーク kohana

カスケーディング    ファイルシステム

• 滝のような性質 = Kohanaのソース採用ルール

• ソース = PHPソース、画像、CSS ...etc

• 同名ファイルは上位を優先 (塞き止め)

• 同名設定ファイルは設定値をマージ (何か入れる)

Page 25: PHP フレームワーク kohana

• applicationが最上位、systemが最下位

ファイル検索の例

Page 26: PHP フレームワーク kohana

• Kohana::find_file(‘views’,‘kohana/error’);

例1

Page 27: PHP フレームワーク kohana

• Kohana::find_file(‘classes’,‘cookie’);

例2

Page 28: PHP フレームワーク kohana

• Kohana::config->load(‘database’);

例3

Config/ database.php

Page 29: PHP フレームワーク kohana

Kohana::find_file

• Kohanaのファイル検索関数

• Kohana::auto_load()や各種Factoryメソッド内で使用

• マッチするファイルパスを返す

public static find_file( string $dir , string $file [, string $ext = NULL , boolean $array = bool FALSE ] )

Page 30: PHP フレームワーク kohana

Kohana::find_file

• 引数

• $dir - - - ディレクトリ名

• $file - - - ファイル名

• $ext - - - 拡張子(phpは省略可能)

• $array - - - 複数のファイルを配列形式で返すか

public static find_file( string $dir , string $file [, string $ext = NULL , boolean $array = bool FALSE ] )

Page 31: PHP フレームワーク kohana

Kohana::find_file

• フレームワーク内での動作

• 設定ファイルを検索するときは$array = true

• 同一ファイル名の設定をマージして使用する

• 設定ファイル以外の検索は$array = false

• 階層構造の上位に配置されたファイルを優先

public static find_file( string $dir , string $file [, string $ext = NULL , boolean $array = bool FALSE ] )

Page 32: PHP フレームワーク kohana

Config::load()

• Kohanaの設定読み込みメソッド

• 設定グループ名を指定する

• Kohana_Config_Groupオブジェクトを返す

• 同一設定グループ名のファイルが複数あれば、設定値をマージする

public load( string $group )

Page 33: PHP フレームワーク kohana

Kohanaの仕組みを利用して出来ること

Page 34: PHP フレームワーク kohana

透過的な機能拡張

• カスケーディングファイルシステムを利用

• 既存のクラスファイルを書き換えない

• 既存のクラスを利用している箇所に影響を与えない

Page 35: PHP フレームワーク kohana

• applicationの下にcookieクラスをつくる

例)cookieクラス

Page 36: PHP フレームワーク kohana

例: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処理を変更 }}

Page 37: PHP フレームワーク kohana

• Kohana::find_file(‘views’,‘kohana/error’);

例:Viewファイル

Page 38: PHP フレームワーク kohana

例:Viewファイルsystem/view/kohana/error.php

Page 39: PHP フレームワーク kohana

例:Viewファイルapplication/view/kohana/error.php

http://www.flickr.com/photos/fweno/5536913695/

Page 40: PHP フレームワーク kohana

モジュールの開発と利用• モジュールが独立している

• アプリが完成しなくてもモジュールを完成させられる

• アプリに変更が合ってもモジュールに影響が無い

• モジュール開発がしやすい

• 公開モジュールの利用がしやすい

Page 41: PHP フレームワーク kohana

例• 新規案件”○○社通販サイト”をつくろう!

• 通販サイト=アップリケーション

• 通販サイトには”お問い合わせフォーム”からメール送信する仕組みが必要!

• お問い合わせフォーム=メールフォームモジュール

Page 42: PHP フレームワーク kohana

例• 汎用的なメールフォームモジュールを作ろう!

• 件名と本文が指定できるモジュールを作った

• 宛先は設定ファイルから読み込む

• 宛先の設定値はとりあえず仮のメールアドレス([email protected])でコミット

• この時点でテスト可能

Page 43: PHP フレームワーク kohana

例• ”○○社通販サイト”のお問い合わせ先は”support@○○.co.jp”にしたい。

• application層に同名の設定ファイルを置く

• ”○○社通販サイト”に問い合わせる時は、お客様の名前と連絡先を入力してほしい!

• application層でモジュールを拡張

Page 44: PHP フレームワーク kohana

git submodule

• git submoduleはモジュールのバージョン管理に最適

• サブモジュールのコミットはマスタープロジェクトに影響を与えない

• マスタープロジェクトでコミットすることでサブモジュールのある状態を履歴管理できる

Page 45: PHP フレームワーク kohana

まとめ• Kohanaは軽量・高速なフレームワーク

• Kohanaはオブジェクト指向設計のメリットを強化した設計

• 機能の透過的な拡張が可能

• アプリケーションとモジュールを完全に分離

• モジュールの開発が容易/提供を受けやすい

Page 46: PHP フレームワーク kohana

Kohana公式サイト• http://kohanaframework.org

Page 47: PHP フレームワーク kohana

日本ユーザ会• 目的

• 日本語ドキュメントの提供

• 日本語によるディスカッション

• http://kohana-users.jp/

• googleグループ kohana-users.jp

Page 48: PHP フレームワーク kohana

質疑応答

Page 49: PHP フレームワーク kohana

おまけ

Page 50: PHP フレームワーク kohana

公開モジュール

• 以下のサイトで公開されています

• kohana-universe

• kohana.mongeslani.com

• kohana-modules.com

Page 51: PHP フレームワーク kohana

vendor

• 外部ライブラリを設置する場所

• カスケーディングファイルシステムの命名規則に従わなくてよい

• 手動でインクルードする必要あり

• Zendライブラリ等も使用可能

Page 52: PHP フレームワーク kohana

デバッグページ