32
CodeIgniter Users Group in Japan CodeIgniter and its logo are property of EllisLab Inc CodeIgniter 2008年大躍進のPHPフレームワーク 日本CodeIgniterユーザ会 Kenji Suzuki 2008/08/09

CodeIgniter 〜 2008年大躍進のPHPフレームワーク

  • Upload
    kenjis

  • View
    34.190

  • Download
    0

Embed Size (px)

DESCRIPTION

OSC2008 Nagoya で行われたCodeIgniterユーザ会のセミナー資料。

Citation preview

Page 1: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

CodeIgniter 2008年大躍進のPHPフレームワーク

日本CodeIgniterユーザ会Kenji Suzuki

2008/08/09

Page 2: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

CodeIgniterとは?

アメリカEllisLab社が開発配布しているオープンソースのPHPフレームワーク

2006年2月リリース

http://codeigniter.com/

Page 3: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

CodeIgniterとは?

世界第4位のPHPフレームワーク

Google Trendsによる検索数

Page 4: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

CodeIgniterの利用例

http://www.opensourcefood.com/

Page 5: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

CodeIgniterの利用例

http://www.2kurabe.com/

Page 6: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

フレームワークとは?

Webアプリケーションフレームワークとは?

➔Webアプリケーションの「枠組み」

➔機能としては

•過去のプログラミングの経験則の規約化

•頻繁に使う機能を抽象化(モジュール化、ライブラリ化)

➔Webアプリケーション全体を見通しよく開発できるようにするもの

Page 7: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

CodeIgniterに向いている人

パフォーマンス命

自由に書かせろ!

➔規約や制限が比較的少ない、拡張が容易

ドキュメントのないソフトは使えません

レンサバ大好き

➔PHP4/5対応、PEAR不要、コマンドライン不要

他のフレームワークに挫折しました...orz

フレームワーク使ったことありません

Page 8: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

CodeIgniterを使うメリット

はやい

➔軽量で動作が高速

やすい

➔習得し易い(低い学習コスト)

うまい

➔過去の習慣(コンベンション)、優れた実践(グッドプラクティス)、およびノウハウなどが、ぐっと濃縮されてつまったもの

Page 9: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

MVCモデルとは?

Controller(コントローラ)は、入力データに従って適切なデータを呼び出し、ModelやViewの連携など、アプリケーション全体の制御を行う

Model(モデル)は、データベースへのアクセスやデータの修正/加工などの処理を行う

View(ビュー)は、処理結果の表示など、画面表示を担当する

Page 10: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

MVCモデル

Controller流れの制御など

View見栄え、デザインなど

Modelデータの修正/加工など

・リクエスト・データ入力

結果

結果

結果

呼び出し

呼び出し

Page 11: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

CodeIgniterの構造

index.php

➔フロントコントローラ

application

➔アプリケーション固有

system

➔システム全体

Page 12: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

CodeIgniterの全体像

index.php

ルーティング

キャッシュ

セキュリティ

コントローラ

モデル

ビュー

データベース

ライブラリ

ヘルパー

プラグイン

Page 13: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

URLの構造

URIセグメントベース・アプローチhttp://example.jp/controller_class/method/arg

class Shop extends Controller {

...

function search($id){

$this­>load­>database();...

}}

http://example.jp/shop/search/123

Page 14: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

Controller

class Time_message extends Controller {function index(){

// タイトル$data['title'] = '時刻メッセージ';// 現在の時刻$data['now_time'] = date("H時i分s秒");

// テンプレートに変数を代入$this­>load­>view('time_message_view', $data);

}}

system/application/controllers/time_message.php

Controllerクラスを継承

index()メソッドはデフォルトメソッド

➔http://example.jp/time_message/

Page 15: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

View

<html><head><title><?php echo $title; ?></title></head><body><?php echo $now_time; ?></body></html>

system/application/views/time_message_view.php

標準のビューファイルは、単なるPHPファイル

Page 16: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

View

<html><head><title>{title}</title></head><body>{now_time}</body></html>

system/application/views/time_message_view.php

(オプション)Smartyライクなテンプレートパーサクラス

※Controllerの記述が標準のビューファイル の場合とは、多少変わります

Page 17: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

Model

オプション(使わないことも可能)

データベース・アクセスの方法

➔標準的な問い合わせ

➔Active Record

Page 18: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

標準的な問い合わせ

// SQLクエリの実行$query = $this­>db­>query('SELECT id, name, email FROM bbs');

// 表示処理foreach ($query­>result() as $row){

echo $row­>id    . ' ';echo $row­>name  . ' ';echo $row­>email . '<br />';

}

echo 'レコード数: ' . $query­>num_rows();

Page 19: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

Active Record

$this­>db­>select('id, name, email');$query = $this­>db­>get('bbs');

foreach ($query­>result() as $row){

echo $row­>id    . ' ';echo $row­>name  . ' ';echo $row­>email . '<br />';

}

echo 'レコード数: ' . $query­>num_rows();

Page 20: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

Model

class Shop_model extends Model {

function Shop_model(){

parent::Model();$this­>load­>database();

}

function get_category_list(){

$this­>db­>order_by('id');$query = $this­>db­>get('category');return $query­>result();

}

}

Modelクラスを継承

system/application/models/shop_model.php

Page 21: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

Modelの使い方

ロードする

➔ $this­>load­>model('Shop_model');

メソッドを呼び出す

➔ $this­>Shop_model­>get_category_list();

Page 22: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

ヘルパー

主にビューで使う役に立つ関数群

オブジェクト指向でなく手続き型

どんなものがあるか?

➔日付ヘルパー(日付の生成や変換)

➔Formヘルパー(Form部品の生成)

➔セキュリティヘルパー(セキュリティ処理)

➔URLヘルパー(URLに関するもの)

➔その他もろもろ

Page 23: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

ヘルパーの使い方

ロードする

➔$this­>load­>helper('url');

使用する

➔anchor('search', '検索');

<a href=”.../search”>検索</a>

Page 24: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

ライブラリ(クラス)

オブジェクト指向

どんなものがあるか?

➔コアシステムクラス

•システムで自動的にロード

•例、ベンチマーク、入力、出力

➔データベース関連のクラス

➔その他のクラス

•例、セッション、Email、ページネーション(ページャ)

Page 25: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

ライブラリ(クラス)の使い方

ロードする

➔$this­>load­>library('table');

メソッドを呼び出す

$tmpl = array ('table_open' => '<table border="1" cellpadding="4" cellspacing="0">');

$this­>table­>set_template($tmpl);

$data = array(array('名前', '色', 'Size'),array('フレッド', 'ブルー', 'Small'),array('マリー', '赤', 'Large'),array('ジョン', '緑', 'Medium')

);echo $this­>table­>generate($data);

Page 26: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

CodeIgniterのセキュリティ

フールプルーフではない!

➔フールプルーフとは?「よくわかっていない人が扱っても安全」 -- http://e-words.jp/

➔○○を使っていれば安全

ただし、CodeIgniterには、

➔自動的に働く内部セキュリティ機能

➔手動で利用するセキュリティ支援機能

•フレームワークを使わない場合より、ずっと安全

Page 27: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

CodeIgniterのセキュリティ

内部セキュリティ機能

➔URIセキュリティ

•URIで使用できる文字を厳しく制限

➔GET、POST、クッキーデータ

•GETデータはクリア

➔register_globals

•強制的にoffに

Page 28: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

CodeIgniterのセキュリティ

セキュリティ支援機能

➔XSSフィルタリング

•セキュリティヘルパーと入力クラス

➔バリデーション(検証)クラス

•POSTされたデータの検証・整形

➔クエリのエスケープ処理

•$this->db->escape()メソッド

•バインディング(例、WHERE id=?)

•Active Recordでは自動的にエスケープ処理

Page 29: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

CodeIgniterの高い拡張性

標準ヘルパーやライブラリ

➔置き換え・継承可能

➔コアシステムクラスの置き換えや継承も可能

•標準のセッションクラスをPHP標準セッションに置き換える

•標準のActive RecordをやめてPropelを使う

フックによる拡張

➔フックポイントにコードを追加

Page 30: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

日本CodeIgniterユーザ会

http://codeigniter.jp/

CodeIgniter日本語言語パック/日本語ユーザガイド作成中

メンバー募集中

Page 31: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

新刊のお知らせ

日本初のCodeIgniter解説本『CodeIgniter徹底入門』

2008年6月9日、翔泳社より発売されました

http://codeigniter.jp/tettei/

Amazon.co.jpより

Page 32: CodeIgniter 〜 2008年大躍進のPHPフレームワーク

CodeIgniter Users Group in JapanCodeIgniter and its logo are property of EllisLab Inc

終わり

ご静聴ありがとうございました