狠狠撸

狠狠撸Share a Scribd company logo
なぜフレームワークを 
使うのか 
第21回Creators MeetUp 
2014/10/18 向井賢一
会場のスタッフの皆様 
株式会社LIG 様 
ありがとうございます!
自己紹介 
? 向井賢一 
? PHPカンファレンスのスタッフ 
? https://twitter.com/mukaken 
? https://www.facebook.com/mukaken
先日(10/11)開催されたPHPカンファレンス2014の 
4F置いていたドリンクマシーンは 
本日の主催者の小島さんにセットしてもらいました。 
ありがとうございました!!
運営しているサイト 
? laravel.jp 
? FuelPHP 日本語ニュース (facebook) 
? Laravel 日本語ニュース (facebook) 
? FuelPHP 英語コミュニティ (facebook) 
? FuelPHP 日本語コミュニティ (facebook) 
? Laravel jp 日本語コミュニティ (facebook)
注意!
Web フレームワークは 
プログラム が分からないと 
使えません! 
$factorial = function($n) use (&$factorial) { 
if ($n <= 1) 
return 1; 
else 
return $n * $factorial($n - 1); 
}; 
var_dump($factorial(6));
Web アプリケーションフレームワーク 
の事を 
フレームワーク 
と略しています
セッションの内容 
? 何かしらのプログラミング言語 は一通り理解し 
たが、 Web アプリケーションフレームワーク 
を使った事がない方を対象にべた書き(モノリシッ 
ク)な プログラムを、Web アプリケーション 
フレームワーク を使い修正し、何が違うのかを 
比較をします
セッションの目次 
? フレームワークの説明でよく使われる用語の解説 
? なぜフレームワークを使うのか ? 
? 実際に PHP を使って説明 
? 参考サイト と 参考文献 
? まとめ
フレームワークの説明で 
よく使われる用語の解説
MVC モデル 
? 現在の フレームワーク で主流のアーキテクチャ 
? MVCはモデル、ビュー、コントローラの略で、 
この3つの部品に分けて実装する 
? Web で使われているフレームワークは、正確に 
は元祖 MVC ではなく MVC 2
DRY 原則 
? DRY は Don’t Repeat Yourself (繰り返しをさ 
けること)の略 
? プログラムを作る際にコピー&ペーストをする 
と、修正するときに大変な事になりますよ、と 
の教訓 
『達人プログラマー』の P.27 より
リファクタリング 
? コードの記述のやり直し、再作業、再設計 
? リファクタリングを行う場面は、二重化、直交 
してない設計、時代遅れの知識、パフォーマン 
スに問題がある場合 
『達人プログラマー』の P.188 より
コーディング規約 
? プログラミング言語 はいろいろな記述ができる 
が、記述の統一性をもたせること 
? 主には、命名規則、コーディングスタイル、禁 
止事項の事 
? 例 : インデントをハードタブかソフトタブかの 
どちらかに統一する
設定より規約 (CoC) 
? 一定のルールに従ってファイルやクラスの名前を 
決めていれば設定不要で動作する機構 
? Ruby on Rails が取り入れた設計思想で話題に 
なった 
? 逆の設計思想で「規約より設定」を採用したフ 
レームワークも多数ある
フレームワークの 
イメージ 
ベテランのエンジニアに聞くと!
本棚に例えると 
? 何も考えずに本を本棚にしまうと、どこに何の 
本があるか分からない 
? フレームワークを使うと図書館のように整理整 
頓された本棚になり、どこに何があるかは一目 
瞭然
なぜフレームワークを 
使うのか ? 
现代のソフトウェア开発の问题?要求
いままでの開発で、 
こんな事に困った事ありませんか? 
? チームで開発するさいに、それぞれの開発スタイル 
がバラバラで、コミュニケーションに時間がかかる 
? チームで開発するさいに、新たにチームに加わって 
もらう開発者に説明するのに時間がかかりすぎる 
? 過去に自分で開発したソースを読み返すと、どこに 
何の記述がしてあるか分からなくて、解読するのに 
時間がかかる
近年のビジネス速度 
? 1990年代までのソフトウェアは業務の効率化を 
目的として作られ、一度作ったら長期間変更し 
ないまま使い続ける 
? 現在のソフトウェアはビジネスの変化に合わせ 
て、その都度変更していく 
? 現在ではソフトウェアのリリースサイクルが劇的 
に短くなってきている
現在のビジネスでは 
ソフトウェアは 
常に作り替えなければならない 
Amazon は1時間に1,000回以上 
デプロイしているそうです
実際に PHP を使って 
説明 
前田さんの発表資料から引用?抜粋させて 
いただきました。 
『フラットなPHPからフレームワークへ』から抜粋 
http://www.slideshare.net/brtriver/php-14295877
モノリシックなPHPを 
リファクタリングによって 
フレームワークに 
书き换える
モノリシックなPHP 
痴颈别飞部分の分离 
アプリケーション(ドメイン)部分の分離 
フレームワーク
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> 
DBからデータ取得 
<title>投稿の一覧</title> 
</head> 
<body> 
<h1>投稿の一覧</h1> 
<ul> 
list.php 
<?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>
クライアントサーバー 
Browser PHP + HTML 
list.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> 
<head> 
<title>投稿の一覧</title> 
</head> 
<body> 
<h1>投稿の一覧</h1> 
<ul> 
show.php 
ロジック部分 
View(HTML)部分 
<?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 
<?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'; 
別ファイルに分離
クライアントサーバー 
controller 
Browser PHP 
list.php 
リクエスト 
レスポンス 
view 
HTML 
template/list.php
クライアントサーバー 
controller 
Browser PHP 
list.php 
リクエスト 
view 
json 
template/list-json.php 
レスポンス
良い点 
痴颈别飞部分の分离 
テンプレートの変更に強い
アプリケーション(ドメイン) 
部分の分離
index.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'); 
全てのポストを取得する
ドメイン 
データベースへ接続する 
全てのポストを取得する 
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)) { 
get_database_connection 
$posts[] = $row; 
} 
get_all_posts 
return $posts; 
} model.php
リファクタリング後のlist.php 
<?php 
require 'model.php'; 
$posts = get_all_posts(); 
require 'templates/list.php'; 
ロジック読込 
全ポストを取得 
ビュー読込 
コントローラーは制御するだけ
良い点 
アプリケーション(ドメイン)部分の分離 
コントローラが本来のコントローラーに 
シンプルな惭痴颁
controller 
Browser PHP 
list.php 
クライアントサーバー 
リクエスト 
レスポンス 
HTML 
view 
model 
template/list.php 
Logic 
model.php 
get_all_posts 
$POSTS
フレームワークを 
使っても失敗する例フレームワークを使っても 
意味がない例
よくある失敗例 
? フレームワークの約束(設計思想)に沿って作って 
ない (例 : フレームワークが用意した設定ファイ 
ルがあるのに、違う箇所に設定を書いてしまう) 
? 通称ファット?コントローラとよばれている、 
動くからといって何の処理も1カ所に記述してし 
まう
フレームワークの種類 
プログラミング言語は、いろいろな用途のものがあるが、 
フレームワークにも用途別に別れている。
PHPは歯ブラシである 
PHPは歯ブラシくらい興奮に値する。 
シンプルで、毎日使う便利な道具。 
PHPの発案者 : Rasmus Lerdorf 
http://j.ktamura.com/archives/1390
プログラミング言語の分類 
高級品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
参考サイト?文献
参考サイト 
? フラットなPHPからフレームワークへ 
? http://www.slideshare.net/brtriver/php-14295877
PHP でアーキテクチャを 
学ぶならこの本 
効率的なWebアプリケーションの作り方 
~PHPによるモダン開発入門 
パーフェクトPHP
アーキテクチャー集で 
有名な本 
2000.12.04発売 
未だに、いろいろな文献から 
よく引用されている 
ソフトウェアアーキテクチャ 
ソフトウェア開発のためのパターン体系 
http://www.kindaikagaku.co.jp/information/kd0283.htm
プログラマーの心得的な本 
達人プログラマー 
システム開発の職人から名匠への道
その他1 
Chef実践入門 
CakePHP2 実践入門 
~コードによるインフラ構成の自動化
その他2 
Webアプリケーション設計?実装のための 
フレームワーク活用の技術 
Software Design (ソフトウェアデザイン) 2014年4月号 
なぜMVCモデルは誤解されるのか?
ウンチクを語りたい人に 
おすすめの本 
Smalltalk という言語で 
MVC について語られています 
SMALLTALKで学ぶ オブジェクト指向プログラミングの本質
まとめ 
フレームワークを使う理由 
? チーム開発のさいの共通認識になる 
? 整理整頓された見渡しの良いプログラムになり 
変更が容易になる 
? 近年のビジネス速度の変化に柔軟に対応できる 
アーキテクチャの構築ができる
ご清聴 
ありがとうございました

More Related Content

What's hot (20)

PDF
FuelPHP Osu Nagoya vol.1
Fumito Mizuno
?
PDF
はじめての FuelPHP
Sho A
?
PDF
実"戦"CakePHP Plugin
Kenichirou Oyama
?
PPT
今、最もイケてる笔贬笔フレームワーク尝补谤补惫别濒4
leverages_event
?
PDF
omoon.org の裏側 ?FuelPHP の task 活用例?
Sotaro Omura
?
PPTX
今、最も勢いのあるWebフレームワーク「fuel php」
Soudai Sone
?
PDF
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
kenjis
?
PPTX
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
Mika Kane
?
PDF
颁辞诲别滨驳苍颈迟别谤入门
Sho A
?
PDF
最新PHP事情 (2000年7月22日,PHPカンファレンス)
Rui Hirokawa
?
PDF
Osc2014
Soudai Sone
?
PPT
Puppet Best Practices? at COOKPAD
Gosuke Miyashita
?
PDF
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
Rui Hirokawa
?
PPTX
Open Source System Administration Framework - Func
Gosuke Miyashita
?
PDF
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
kenjis
?
PDF
NetBeansではじめる FuelPHP
Junichi Yamamoto
?
PPTX
贵耻别濒辫丑辫1.8を始めたい
運営 sollastudio
?
PDF
顿箩补苍驳辞によるスマホアプリバックエンドの実装
Nakazawa Yuichi
?
PDF
Fuel php osc tokyo2012
Fumito Mizuno
?
PDF
笔贬笔の今とこれから2021
Rui Hirokawa
?
FuelPHP Osu Nagoya vol.1
Fumito Mizuno
?
はじめての FuelPHP
Sho A
?
実"戦"CakePHP Plugin
Kenichirou Oyama
?
今、最もイケてる笔贬笔フレームワーク尝补谤补惫别濒4
leverages_event
?
omoon.org の裏側 ?FuelPHP の task 活用例?
Sotaro Omura
?
今、最も勢いのあるWebフレームワーク「fuel php」
Soudai Sone
?
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
kenjis
?
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
Mika Kane
?
颁辞诲别滨驳苍颈迟别谤入门
Sho A
?
最新PHP事情 (2000年7月22日,PHPカンファレンス)
Rui Hirokawa
?
Osc2014
Soudai Sone
?
Puppet Best Practices? at COOKPAD
Gosuke Miyashita
?
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
Rui Hirokawa
?
Open Source System Administration Framework - Func
Gosuke Miyashita
?
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
kenjis
?
NetBeansではじめる FuelPHP
Junichi Yamamoto
?
贵耻别濒辫丑辫1.8を始めたい
運営 sollastudio
?
顿箩补苍驳辞によるスマホアプリバックエンドの実装
Nakazawa Yuichi
?
Fuel php osc tokyo2012
Fumito Mizuno
?
笔贬笔の今とこれから2021
Rui Hirokawa
?

Similar to 第21回Creators MeetUp (20)

PDF
フレームワークを使うべき 3 つの理由
Kenichi Mukai
?
PDF
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
?
PPT
Albatross
Hiroaki Kubota
?
PPT
Cockatoo
Hiroaki Kubota
?
PPT
2009年の笔贬笔フレームワーク
Takuya Sato
?
PDF
フレームワーク使おうぜ!
Takuya Sato
?
PDF
20120623エンジニア濒迟
BiMihoujyun
?
PDF
笔贬笔フレームワーク入门
Sho A
?
PDF
スクリプト言语笔贬笔攻略法
Rui Hirokawa
?
PDF
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Junichi Ishida
?
PPTX
<第1回>尝补谤补惫别濒ハンズオンセミナー
Tatsuyoshi Mashiko
?
PPTX
[超初心者向け無料セミナー] 1時間でまるわかり!CakePHP概説&WordPress応用事例
TechGardenSchool
?
PDF
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
?
PPTX
笔贬笔基础勉强会
Yuji Otani
?
PDF
Hakodate - simple framework
Hiroaki Murayama
?
PDF
「新しい」を生み出すための奥别产アプリ开発とその周辺
Yusuke Wada
?
PDF
Laravel4 Happy Hacking
Takashi Ohida
?
PDF
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
Kazuhiro Hara
?
PDF
Cakephp
Yusuke Ando
?
PDF
Modern PHP Programming @ PFI Seminar
Sotaro Karasawa
?
フレームワークを使うべき 3 つの理由
Kenichi Mukai
?
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
?
Albatross
Hiroaki Kubota
?
2009年の笔贬笔フレームワーク
Takuya Sato
?
フレームワーク使おうぜ!
Takuya Sato
?
20120623エンジニア濒迟
BiMihoujyun
?
笔贬笔フレームワーク入门
Sho A
?
スクリプト言语笔贬笔攻略法
Rui Hirokawa
?
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Junichi Ishida
?
<第1回>尝补谤补惫别濒ハンズオンセミナー
Tatsuyoshi Mashiko
?
[超初心者向け無料セミナー] 1時間でまるわかり!CakePHP概説&WordPress応用事例
TechGardenSchool
?
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
?
笔贬笔基础勉强会
Yuji Otani
?
Hakodate - simple framework
Hiroaki Murayama
?
「新しい」を生み出すための奥别产アプリ开発とその周辺
Yusuke Wada
?
Laravel4 Happy Hacking
Takashi Ohida
?
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
Kazuhiro Hara
?
Cakephp
Yusuke Ando
?
Modern PHP Programming @ PFI Seminar
Sotaro Karasawa
?
Ad

More from Kenichi Mukai (10)

PDF
ライブラリ?ファースト 第91回 PHP勉強会@東京 #phpstudy
Kenichi Mukai
?
PDF
第80回 PHP勉強会 / laravel.jp & Laravel Meetup Tokyo Vol.5
Kenichi Mukai
?
PDF
Laravel Meetup Tokyo Vol.3 告知 LT
Kenichi Mukai
?
PDF
魔法少女 Laravel 2014
Kenichi Mukai
?
PDF
Creators meetup5
Kenichi Mukai
?
PDF
php-study69
Kenichi Mukai
?
PDF
魔法少女 Laravel
Kenichi Mukai
?
KEY
PHPカンファレンス 2012 フレームワークアップデート FuelPHP
Kenichi Mukai
?
PDF
Osc2012 fall fuel_php
Kenichi Mukai
?
PDF
Ospn fuel php
Kenichi Mukai
?
ライブラリ?ファースト 第91回 PHP勉強会@東京 #phpstudy
Kenichi Mukai
?
第80回 PHP勉強会 / laravel.jp & Laravel Meetup Tokyo Vol.5
Kenichi Mukai
?
Laravel Meetup Tokyo Vol.3 告知 LT
Kenichi Mukai
?
魔法少女 Laravel 2014
Kenichi Mukai
?
Creators meetup5
Kenichi Mukai
?
php-study69
Kenichi Mukai
?
魔法少女 Laravel
Kenichi Mukai
?
PHPカンファレンス 2012 フレームワークアップデート FuelPHP
Kenichi Mukai
?
Osc2012 fall fuel_php
Kenichi Mukai
?
Ospn fuel php
Kenichi Mukai
?
Ad

第21回Creators MeetUp