Upload
kenichi-mukai
View
7.572
Download
3
Embed Size (px)
DESCRIPTION
PHP カンファレンス関西 2014 の発表資料です。 13:30-14:00 フレームワークを使うべき 3 つの理由 http://conference.kphpug.jp/2014/
Citation preview
フレームワークを使うべき 3 つの理由
PHP カンファレンス関西 2014 2014/6/28 向井賢一
ご来場 ありがとうございます
自宅 (横浜)の
近所の居酒屋の看板
漫☆画太郎?
会場のスタッフの皆様 マジでリスペクト!
自己紹介
• 向井賢一 • 職業 : 雑用係
• https://twitter.com/mukaken
• https://www.facebook.com/mukaken
運営しているサイト・イベント• FuelPHP 日本語ニュース (facebook)
• Laravel 日本語ニュース (facebook)
• FuelPHP 英語コミュニティ (facebook)
• FuelPHP 日本語コミュニティ (facebook)
• Laravel jp 日本語コミュニティ (facebook)
• Laravel Meetup Tokyo (次回 7/4(金) 19:00- 東京都渋谷区)
好きな曲
PHP The Anthem
http://www.youtube.com/watch?v=S8zhmiS-1kw
注意!
PHP Web フレームワークは PHP が分からないと
使えません
$factorial = function($n) use (&$factorial) {! if ($n <= 1)! return 1;! else! return $n * $factorial($n - 1);!};!!var_dump($factorial(6));
Web アプリケーションフレームワーク
の事を
フレームワーク
と略しています
セッションの内容• PHP の文法は一通り理解したが、 Web アプリケーションフレームワーク を使った事がない方を対象にべた書き(モノリシック)な PHP プログラムを、Web アプリケーションフレームワーク を使い修正し、何が違うのかを比較をします。
• PHP の Web アプリケーションフレームワークで代表的なものを紹介し、それぞれを比較します。
今朝の基調講演で郡山さんが話されていた「フレームワークとは?」
• アプリケーションの制約
• 原則に従う
• 長期的な変更
当セッションで 言いたい事は同じ!
セッションの目次• フレームワークの説明でよく使われる用語の解説
• なぜフレームワークを使うのか ?
• 実際に PHP を使って説明
• PHP フレームワークの種類
• 参考サイト 参考文献
• まとめ
フレームワークの説明で よく使われる用語の解説
MVC モデル• 現在の フレームワーク で主流のアーキテクチャ
• モデル、ビュー、コントローラの3つに分けて実装する
• Web で使われているフレームワークは、正確には元祖 MVC ではなく MVC 2
DRY 原則
• DRY は Don’t Repeat Yourself (繰り返しをさけること)の略
• プログラムを作る際にコピー&ペーストをすると、修正するときに大変な事になりますよ、との教訓
『達人プログラマー』の P.27 より
リファクタリング
• コードの記述のやり直し、再作業、再設計
• リファクタリングを行う場面は、二重化、直交してない設計、時代遅れの知識、パフォーマンスに問題がある場合
『達人プログラマー』の P.188 より
コーディング規約• PHP はいろいろな記述ができるが、記述の統一性をもたせること
• 主には、命名規則、コーディングスタイル、禁止事項の事
• 例 : インデントをハードタブかソフトタブかのどちらかに統一する
• 一定のルールに従ってファイルやクラスの名前を決めていれば設定不要で動作する機構
• Ruby on Rails が取り入れた設計思想で話題になった
• 逆の設計思想で「規約より設定」を採用したフレームワークも多数ある
設定より規約 (CoC)
フレームワークの イメージ
ベテランのエンジニアに聞くと!
本棚に例えると
• 何も考えずに本を本棚にしまうと、どこに何の本があるか分からない
• フレームワークを使うと図書館のように整理整頓された本棚になり、どこに何があるかは一目瞭然
なぜフレームワークを使うのか ?
現代のソフトウェア開発の問題・要求
いままでの開発で、 こんな事に困った事ありませんか?• チームで開発するさいに、それぞれの開発スタイルがバラバラで、コミュニケーションに時間がかかる
• チームで開発するさいに、新たにチームに加わってもらう開発者に説明するのに時間がかかりすぎる
• 過去に自分で開発したソースを読み返すと、どこに何の記述がしてあるか分からなくて、解読するのに時間がかかる
近年のビジネス速度• 1990年代までのソフトウェアは業務の効率化を目的として作られ、一度作ったら長期間変更しないまま使い続ける
• 現在のソフトウェアはビジネスの変化に合わせて、その都度変更していく
• 現在ではソフトウェアのリリースサイクルが劇的に短くなってきている
現在のソフトウェアは 常に作り替えなければならない
Amazon
は1時間に1,00
0回以上
デプロイしているそうです
実際に PHP を使って 説明
http://www.slideshare.net/brtriver/php-14295877『フラットなPHPからフレームワークへ』から抜粋
前田さんの発表資料から引用・抜粋させて いただきました。
モノリシックなPHPを
フレームワークに 書き換える
リファクタリングよって
モノリシックなPHPView部分の分離
アプリケーション(ドメイン)部分の分離
フレームワーク
DBからデータ取得し 取得したデータを
HTMLで表示する
<?php $pdo = new PDO( 'mysql:host=localhost;dbname=blog_db;charset=utf8', 'myuser', 'mypassword', array(PDO::ATTR_EMULATE_PREPARES => false) ); $stmt = $pdo->query('SELECT id, title FROM post'); ?> !<html> <head> <title>投稿の一覧</title> </head> <body> <h1>投稿の一覧</h1> <ul> <?php while ($row = $stmt->fetch(PDO::FETCH_ASSOC)): ?> <li> <a href="show.php?id=<?php echo htmlspecialchars($row['id'], ENT_QUOTES, 'utf-8') ?>"> <?php echo htmlspecialchars($row['title'], ENT_QUOTES, 'utf-8') ?> </a> </li> <?php endwhile; ?> </ul> </body> </html>
DBからデータ取得
取得したデータを表示
list.php
Browser PHP + HTML
list.php
クライアント サーバー
リクエスト
レスポンス
悪い点
アプリケーションの拡張性が無い 体系化されていない 再利用性がない
View部分の分離
<?php $pdo = new PDO( 'mysql:host=localhost;dbname=blog_db;charset=utf8', 'myuser', 'mypassword', array(PDO::ATTR_EMULATE_PREPARES => false) ); $stmt = $pdo->query('SELECT id, title FROM post'); ?> !<html> <head> <title>投稿の一覧</title> </head> <body> <h1>投稿の一覧</h1> <ul> <?php while ($row = $stmt->fetch(PDO::FETCH_ASSOC)): ?> <li> <a href="show.php?id=<?php echo htmlspecialchars($row['id'], ENT_QUOTES, 'utf-8') ?>"> <?php echo htmlspecialchars($row['title'], ENT_QUOTES, 'utf-8') ?> </a> </li> <?php endwhile; ?> </ul> </body> </html>
show.php
ロジック部分
View(HTML)部分
show.php<?php $pdo = new PDO( 'mysql:host=localhost;dbname=blog_db:charset=utf8', 'myuser', 'mypassword', array(PDO::ATTR_EMULATE_PREPARES => false) ); $stmt = $pdo->query('SELECT id, title FROM post'); !// HTML部分のコードを読み込む require 'templates/list.php';
別ファイルに分離
ロジック部分
Browser PHP
list.php
クライアント サーバー
リクエスト
レスポンス
HTMLtemplate/list.php
view
controller
Browser PHP
list.php
クライアント サーバー
リクエスト
jsontemplate/list-json.php
view
controller
レスポンス
テンプレートの変更に強い
View部分の分離
良い点
アプリケーション(ドメイン) 部分の分離
<?php $pdo = new PDO( 'mysql:host=localhost;dbname=blog_db:charset=utf8', 'myuser', 'mypassword', array(PDO::ATTR_EMULATE_PREPARES => false) ); $stmt = $pdo->query('SELECT id, title FROM post');
データベースへ接続する
index.php
全てのポストを取得する
データベースへ接続する 全てのポストを取得する
ドメイン
model.php に分離
<?php !// model.php !function get_database_connection() { $pdo = new PDO( 'mysql:host=localhost;dbname=blog_db;charset=utf8', 'myuser', 'mypassword', array(PDO::ATTR_EMULATE_PREPARES => false) ); return $pdo; } !function get_all_posts() { $pdo = get_database_connection(); ! $stmt = $pdo->query('SELECT id, title FROM post'); $posts = array(); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $posts[] = $row; } return $posts; }
model.php
get_database_connection
get_all_posts
リファクタリング後のlist.php
<?php require 'model.php'; !
$posts = get_all_posts(); !
require 'templates/list.php';
コントローラーは制御するだけ
ロジック読込
全ポストを取得
ビュー読込
コントローラが本来のコントローラーに
良い点
アプリケーション(ドメイン)部分の分離
シンプルなMVC
Browser PHPlist.php
クライアント サーバー
リクエスト
レスポンス
HTMLtemplate/list.php
view
controller
Logicmodel.php
model
get_all_posts
$POSTS
フレームワークを使って 書き直したら
PHP でメジャーなフレームワークを 使って構築してみます
• Codeigniter を使用
• 覚える事が少ないので初心者向き
• バージョン 2系 を使います
デモ
フレームワークを 使っても失敗する例
フレームワークを使っても
意味がない例
よくある失敗例• フレームワークの約束(設計思想)に沿って作ってない (例 : フレームワークが用意した設定ファイルがあるのに、違う箇所に設定を書いてしまう)
• 通称ファット・コントローラとよばれている、動くからといって何の処理も1カ所に記述してしまう
PHP フレームワークの種類
PHP の フレームワークといえば?
•Laravel - 10,516 • Symfony - 8,536 • CodeIgniter - 7,760 • Zend Framework 2 - 4,763
Github ★の数
2014/6/27現在
Google トレンド (世界)
http://www.google.com/trends/explore#q=Laravel%2C%20symfony%2BSymfony2%2C%20Codeigniter%2C%20Yii%2C%20CakePHP&cmpt=q
PHPは歯ブラシである
PHPは歯ブラシくらい興奮に値する。シンプルで、毎日使う便利な道具。
http://j.ktamura.com/archives/1390
PHPの発案者 : Rasmus Lerdorf
プログラミング言語の分類
高級品 Haskell OCaml F# Scala
Ruby Python C Java
C#
日用品 PHP
小規模 大規模
※高級品は使うのに覚悟がいる、日用品は手軽に使える、という意味です
PHP フレームワークの分類
高級品 BEAR.Sunday Symfony
CakePHP Zend Framework 2
日用品 Laravel CodeIgniter
Yii
小規模 大規模
他言語でイメージ言語 大規模重量 高速軽量
PHP Symfony Laravel CodeIgniter
Ruby Ruby on Rails Sinatra
Python Django Flask
Haskell Yesod Snap
世界での転職市場の求人数•CodeIgniter 54件 •Symfony 50件 •CakePHP 48件 •Laravel 37件 •FuelPHP 2件
http://www.monster.com/
MONSTER 2014/6/27 調査
各フレームワークの 比較
Laravel
• URL : http://laravel.com/ • ライセンス : MIT • 対応する PHP : 5.4 以上 • 安定版最新バージョン : 4.2 • 開発元 : taylor otwell • 日本語のドキュメント : あり
Laravel の特徴• 近年、爆発的に人気急上昇
• PHP ではないようなキレイなソースが書ける
• 日本語の書籍が充実
• Laravel の書籍 まとめ http://qiita.com/mukaken/items/
2058a193ee0ce6fbfd30
• 信頼性の高い Symfony エコスステムの上に構築
Symfony
• URL : http://symfony.com • ライセンス : MIT • 対応する PHP : 5.3.3 以上 • 安定版最新バージョン : 2.5 • 開発元 : フランスのSensio社
Symfony の特徴• 大規模重厚 • 多機能な分、インストールや習得に多くの時間がかかる
• 重いといわれていたが、2で改良され、シンプル・高速
• メンテナンスのロードマップが明確に提示 • 「PHP界のインフラ」と言われている
Laravel と Symfony の違い
http://www.reddit.com/r/PHP/comments/1bdln1/symfony2_vs_laravel/c96ohf1
Laravel の作者 Taylor Otwell 曰く「Symfony 2 と Laravel 4 は Debian と Ubuntu の関係に近い」だそうです。
!Taylor Otwell が Symfony のカンファレンスに参加したり、 逆に Symfony プロジェクト の Fabien が Laravel のカンファレンスに参加したりと、お互いを意識しながらプロジェクトを進めている。
CodeIgniter• URL : http://codeigniter.com • ライセンス : CodeIgniter License • 対応する PHP : 5.2.4 以上 • 安定版最新バージョン : 2.2.0 • 開発元 : アメリカのEllisLab • 日本語のドキュメント : あり
CodeIgniterの特徴• 軽量高速 • 小規模開発向け • 日本国内ではライセンス問題で話題になったが、国外ではそれほどでもない感じがする
• 世界では根強い人気 • 現在、開発元が売りに出している • 国内での採用実績 : MTV Japan
FuelPHP
• URL : http://fuelphp.com • ライセンス : MIT • 対応する PHP : 5.3 以上 • 安定版最新バージョン : 1.7.1 • 開発元 : コミュニティ • 日本語のドキュメント : あり
FuelPHPの特徴•軽量高速 •小規模開発に向いている •規約より設定 (覚える事が少ない) • イースター・エッグが満載(喋るなど) •作る事に主眼を置いている • CodeIgniter に使い方が似ている
Codeigniter vs FuelPHPhttp://ilikekillnerds.com/2012/10/codeigniter-vs-fuelphp-revisited/
DocumentationORM/ Database Abstraction
PHPの互換性 The Community
Codeigniter 選ぶポイントになるほどすばらしい
本格的なORMほどではないがdatabase query builder がある
変化しているが、レガシーPHPサポートによる肥大化
かなり巨大
FuelPHP新しいデザイン CIほど堅牢ではな
い強力な ORM PHPの新機能
をサポートより活発になってきている
10/25
CakePHP
• URL : http://cakephp.org • ライセンス : MIT • 対応する PHP : 5.2.8 以上 • 安定版最新バージョン : 2.5.2 • 開発元 : アメリカのCakeソフトウェア財団
CakePHPの特徴
• 小・中規模向け • 設定よりも規約(多くのルールがある) • CakePHP2は、内部の構造や基本的なルールが見直された
• 用語がケーキ関連
参考サイト・文献
参考サイト
• フラットなPHPからフレームワークへ
• http://www.slideshare.net/brtriver/php-14295877
PHP でアーキテクチャを 学ぶならこの本
効率的なWebアプリケーションの作り方 ~PHPによるモダン開発入門
パーフェクトPHP
アーキテクチャー集で 有名な本
ソフトウェアアーキテクチャ ソフトウェア開発のためのパターン体系
http://www.kindaikagaku.co.jp/information/kd0283.htm
2000.12.04発売 未だに、いろいろな文献から よく引用されている
プログラマーの心得的な本
達人プログラマー システム開発の職人から名匠への道
その他1
Chef実践入門 ~コードによるインフラ構成の自動化
CakePHP2 実践入門
その他2
Webアプリケーション設計・実装のための フレームワーク活用の技術
Software Design (ソフトウェアデザイン) 2014年4月号 なぜMVCモデルは誤解されるのか?
ウンチクを語りたい人に おすすめの本
SMALLTALKで学ぶ オブジェクト指向プログラミングの本質
Smalltalk という言語で MVC について語られています
まとめ フレームワークを使う3つの理由
• チーム開発のさいの共通認識になる
• 整理整頓された見渡しの良いプログラムになり変更が容易になる
• 近年のビジネス速度の変化に柔軟に対応できるアーキテクチャの構築ができる
ご清聴 ありがとうございました