PHP フレームワーク kohana
Upcoming SlideShare
Loading in...5
×
 

PHP フレームワーク kohana

on

  • 5,042 views

PHPカンファレンス関西2012

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

Statistics

Views

Total Views
5,042
Views on SlideShare
4,980
Embed Views
62

Actions

Likes
3
Downloads
13
Comments
0

6 Embeds 62

https://twitter.com 42
https://si0.twimg.com 11
https://twimg0-a.akamaihd.net 3
http://localhost 3
http://10.211.55.6 2
http://us-w1.rockmelt.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • こんにちわ。本日はKohanaのセッションに参加していただきありがとうございます。\nではお時間となりましたので、PHPフレームKohanaについて発表させていただきます。\n
  • まずは自己紹介から、させていただきます。\n私は中右理絵と申します。関西でプログラマーをしています。\nKohana日本ユーザ会をしています。日本ユーザ会ではKohanaのドキュメントを翻訳したりしています。\n
  • こちらが本日お話させていたく内容です。\nご質問は最後に受けさせていただきたいとおもいます。\n
  • \n
  • では早速ですが、Kohanaについて、まずその概要をご説明致します。\nKohanaとはPHP向けのWebアプリケーションフレームワークです。\nオープンソースで開発されています。\nBSDライセンスですので商用にも制限無く利用できます。\n
  • 現在はVersion3.2が安定版となっています。\nサポート版として3.1系もメンテナンスされていますが、こちらはまもなくサポート終了するのではないかと思います。\nVersion3.3が開発中で現在RC2が公開されています。\n\n
  • Kohanaで作られたサイトで代表的なものがこちらです。\nPVが多いのはNationalGeographic Kidsという写真投稿サイトです。\nKohana公式のフォーラムで”Kohanaで作られたサイト” (Website built using Kohana)というトピックがあり、そちらには300以上もの投稿があります。ですので、ある程度は実際に使用され、リリースされているフレームワークであると言えると思います。\n
  • 次はKohanaの特徴ですね。\n
  • メジャーなフレームワークとの比較をしようと思ったのですが、あまり比較して差のあることはありませんでした。\nあえて特徴的なところを挙げれば、アーキテクチャがHMVCであるということです。\nまたCakeもsymfonyもコマンドラインからのソース生成ができますが、Kohanaはできません。\nプラグイン開発もできますし、ORMマッパーもあります。複数のデータベースにも対応しています。そのあたりはごく普通のフレームワークと同じと考えていただいていいかと思います。\n\n
  • Kohanaの特徴は、軽量、高速であるということ。\nHMVCアーキテクチャを採用し、オブジェクト指向での開発が進めやすいということ。\nそして独自のファイルシステム”カスケーディング・ファイルシステム”があるということ。があります。\n\n\n
  • まず、PHP5ベースですが、Kohanaの3.2系ではPHP5.3以上が必須です。\nsymfonyと同様に新しいバージョンのPHPに組み込まれた機能を利用するフレームワークです。\n飛ばす。\nKohanaはSPLやFilterなど新しいバージョンのPHPに組み込まれた機能を利用してつくられているからです。\n下位バージョン互換のための記述が無いのでコードがシンプルです。そしてPHPのインプリメントな機能を利用するので高速です。\n但し、レンタルサーバではPHP5.3が利用できないという問題もあるかもしれません。\n\n
  • KohanaのキャッチコピーはThe Swift Frameworkと言いまして、軽量、高速であることがKohanaの特徴であると開発者サイドは言っています。\nKohanaは極力、外部のライブラリを必要としないように作られています。\nKohanaを動かすのにPEARは必要ありません。必須のライブラリはUTF-8の正規表現、SPL , Iconv ,mbstringなどほとんどの環境で初めから有効になっているものです。\n\n\n
  • 続いてHMVCとカスケーディングファイルシステムですが、\nこちらは他のフレームワークにはあまり無い特徴となっていますので、少し詳しくお話したいと思います。\n
  • HMVCはヒエラルカルなMVCという意味で、MVCを階層状に組み合わせたアーキテクチャです。\n個々のMVCは独立しています。\n個々のMVCが独立していることでプログラムの依存関係を小さくできますし、モジュールの修正・拡張を容易にできます。\nつまりはオブジェクト指向のメリットを強化できるアーキテクチャです。\n「各MVCは独立して動く」ということがHMVCの重要な性質です。ここからのお話は各MVCが独立で動作するということに注意してお聞きいただければと思います。\n
  • MVCを図で示すとこのようにプログラムをModel,View,Controllerに分割するという方式ですね。\n\n
  • HMVCでは、こうなります。\nMVCが複数あり、各MVCは独立して動作します。MVC間の制御はコントローラーが行います。\n
  • KohanaはHMVCアーキテクチャですので、独立したMVCパターンを複数持っています。\nそれがsystem,modules,applicationです。\n右側が実際のファイル配置を図示したものです。application,各module,systemという大きな領域が3つあってそれぞれモデル、ビュー、コントローラーを格納する場所があります。\n
  • application,modules,systemという3つの領域を説明します。\nまず、systemはKohanaのコアでフレームワークの土台となるコアクラスとそれを透過的に拡張したクラスを持っています。\nsystemディレクトリの下はKohanaをアップグレードする時を除き、変更することはありません。\n
  • モジュールはアプリケーションで使う部品化された機能です。\nモジュールはmodulesディレクトリ以下に格納します。\nKohanaのフレームワークに初めから含まれるモジュールもあります。\n
  • アプリケーション層にはアプリケーションを実装します。\nWebサイトを作るのだったらそのサイトに特有の仕様を実装します。\n例えばURLと機能の対応付けをするスーティングですとか、ビジネスロジック、サイトのデザイン等を実装します。\n
  • Kohanaに置けるHMVCでは、application,各module,systemはそれぞれが独立したMVCに対応しています。\nつまりmoduleはapplicationが無くても、そのモジュールの処理を完遂できるということです。\nそして、この特徴は次に述べます、カスケーディングファイルシステムと組み合わせることでより便利になります。\n
  • カスケーディングファイルシステムとはフレームワーク上の擬似的なファイルシステムのことです。OSのファイルシステムとは違います。\nカスケーディングとは”滝のように流れ落ちる”と言う意味です。\n階段状のところに水が流れているような状態をイメージしてください。\nこの写真のような状態には2つの性質があります。ある地点で水を塞き止めるとそれより下に水はいきません。\nある地点で水に何か入れる、例えば赤い絵の具とかを入れると、それより下には赤い水が流れます。\n
  • カスケーディングファイルシステムはまさにこの2つの性質を持っています。\nフレームワークのファイル配置規則としてapplication/modules/systemと3つの領域があり、これらはディレクトリ構成は横並びですが、優先順位が付けられています。\n優先順位はaplicationが最も高く、次にmodule、最も優先順位が低いのがsystemです。\nmoduleはいくつでも使えますので最終的にはアプリ、モジュール1、モジュール2、システムという形になります。\n\n
  • そしてもう一つはKohanaのソース採用ルールです。\nここで云うソースにはPHPソースファイルだけでなく、画像やCSSファイルも含まれます。\n階層構造上に同じファイルが複数あった場合、上位にあるものを優先します。\nただし設定ファイルだけは例外で、同じ名前の設定ファイルがあれば、全ての設定ファイルの値をマージします。\nKohanaのファイル配置規則とソース採用ルールを合わせたものがカスケーディングファイルシステムです。\n
  • ではカスケーディングファイルシステムにおいてどのようにファイルが検索されるのか例を示します。\nこのようにapplication,module,systemという領域があり、それぞれにファイルが配置されています。\napplicationが最も高い、systemが最も低い優先順位をもっています。\n
  • この状態でviewのerror.phpを使用します。error.phpはapplicationとsystemにそれぞれあります。\n物理的には2つありますが、フレームワーク上で呼び出されるのはapplicationのerror.phpだけです。\n下位にある同名のファイルは無視されます。\n
  • クラスファイルにおいても同じです。 cookie.phpはapplicationとsystemにそれぞれあります。\nフレームワーク上で呼び出されるのはapplicationのcookie.phpです。\n\n
  • 同名のファイルに関しては通常は上位にあるファイル1つだけが採用されますが、設定ファイルだけは例外です。\n設定ファイルはconfigディレクトリの中に格納します。\napplicationとデータベースmoduleにdatabase.phpという設定ファイルがあります。\nフレームワーク上でこの設定ファイルを読みこむと設定値のオブジェクトとしてこの2つのファイルに設定された値がマージされたものが与えられます。\n
  • 上位のファイルを優先する、設定ファイルの値を横断的にマージするといった動作はフレームワークが行います。\n具体的にはKohana::find_file()メソッドとKohana_Config::load()というメソッドを使って実現します。\n\n
  • Kohana::find_file()の詳しい説明は、省略します。このあたりは後ほど資料としてご覧ください。\n
  • これも飛ばします。\n
  • 飛ばします。\n\nConfig::loadメソッドは設定ファイルを読み込むメソッドです。\nこのメソッドを経由して設定を読み込むと同一の設定グループ名が付いた、設定値がマージされたオブジェクトが返ります。\n\n
  • では続いてHMVCとカスケーディングファイルシステムを活用してどんなことが可能になるかを紹介します。\n
  • 1つ目は機能の透過的な拡張です。\nカスケーディングファイルシステムとHMVCを組み合わせることで、既存のクラスを書き換えることなく、そして既存のクラスを利用している箇所に影響を与えることなく、クラス拡張できます\n
  • 例です。\nKohanaにはCookieを扱うクラスがありますが、これをみなさんが作るアプリケーション用に拡張したい場合は\napplicationディレクトリの下にcookieクラスを作ります。\n\n
  • systemの下にあったcookieクラスはKohana_Cookieクラスを拡張するだけの空っぽのクラスです。\napplicationの下に新たに作ったcookie.phpに拡張したクラスを記述します。拡張したクラスを作ったときから、もうsystemの下の今まで使っていたCookieクラスが読み込まれることはありません。カスケーディングファイルシステムでは下位に存在する同じ名前のファイルは無視されるからです。\nこうすることで既存のCookieクラスを利用していた箇所のコードを全く変更することなく、処理を変更することが出来ます。\n\n
  • 透過的な拡張はクラスファイルだけではなく、全てのソース、画像やCSSファイルにも適用できます。\nKohanaのエラーページのビューerror.phpを変更したい場合も元々あるソースは変更しません。\nさきほどと同じようにapplicationの下に新たにビューファイルerror.phpを作成します。\n
  • 元々のエラーの表示はこうですが、\n
  • エラーページのビューを変更して、Apacheのバージョンを隠したり、デザインを入れたりできます。\nこのように元のソースを書き換えず、また元のソースを利用しているプログラムも書き換えずに動作を変更することが出来ます。\n\n\n
  • もう1つ、HMVCとカスケーディングファイルシステムを使えばモジュール開発や利用も容易になります。\nなぜならばモジュールが完全に独立しているので、アプリケーションが完成していなくてもモジュールを完成させることができますし、\nアプリ側で変更が入った場合でも、モジュールに影響を与えること無く変更を加えられるからです。\n
  • 例えば、Kohanaで通販サイトを作るとしましょう。\nこの場合、通販サイトの仕様がapplication層に実装すべきものです。\nそしてその通販サイトにお問い合わせフォームからメール送信する仕組みが必要だとしたら、メール送信フォームは今後も別のサイトで使えるかもしれないので、モジュール化すべきところです。\n
  • なので、今後も使えるように汎用的な件名と本文が指定できるメールフォームモジュールを作ったとします。\n宛先は設定ファイルから読み込むようにしました。設定はとりあえずhoge@test.comでコミットしておきましょう。\nモジュールを単独で動かすことができますから、通販サイトの製造状況に関係なく、このモジュールはテストが可能な状態になっています。\n\n\n
  • このモジュールを通販サイトで使用するときはお客さんのメールアドレスを指定しますよね。\nそれはアプリケーション層に同名の設定ファイルを置けば良いので、このときモジュールは触りません。\nあと、今回はサイトは通販サイトなので、お客様の名前と連絡先を入れる欄が欲しくなるかもしれません。\nその部分はアプリケーション層で拡張します。これもモジュールのソースは触りません。\n実際こんなふうに、アプリ開発しながら、使えそうな部品を汎用化することは多いと思いますが、Kohanaではモジュールが独立しているので、アプリの完成を待たずにモジュールが完成しますし、ひとたび完成すればアプリの都合でモジュールに変更を加える必要もありません。\n\n
  • こちらは、時間がないので飛ばしましょうか。\nまあ、このようにモジュールが独立しているのでモジュールの開発がしやすいし、公開されているモジュールを持ってきても利用がしやすいということがKohanaを使う上でのメリットです。\n
  • まとめます。Kohanaは軽量・高速なフレームワークです。\nそしてオブジェクト指向のメリットをより強化した設計になっています。\n機能の透過的な拡張が可能です。そしてアプリケーションとモジュールを完全に分離することが出来るのでモジュールの開発と利用が容易です。\n
  • Kohanaについての詳しい情報は公式サイトをご覧ください。\n
  • \nまたKohanaについて興味をもっていただけましたら、ぜひ日本ユーザ会にもご参加ください。\n
  • 以上が私からの発表となります。ご清聴ありがとうございます。\nでは、あとわずかな時間しかございませんが、ご質問などありましたら回答させたいただきたいと思います。\nよろしければ挙手でお願い致します。\n\n※質問の意味を確認する\n\n
  • 飛ばす\n
  • 飛ばす\n
  • 飛ばす\nKohanaで使用するソースは基本的にカスケーディングファイルシステム上で利用するべきですが、外部ライブラリを使用する場合はvendorディレクトリに配置します。\nvendorディレクトリに置いたソースはKohanaの命名規則に従わなくて良いです。\n但し、オートロードできないので手動でインクルードする必要があります。\n
  • カスケーディングファイルシステムでは存在していても無視されるファイルがありますので、初めのうちは戸惑うかもしれません。\nデバッグページではこのようにどのパスに存在するソースを読み込んでいるのか確認できます。\n

PHP フレームワーク kohana PHP フレームワーク kohana Presentation Transcript

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