Your SlideShare is downloading. ×
0
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

フレームワークを使うべき 3 つの理由

7,614

Published on

PHP カンファレンス関西 2014 の発表資料です。 …

PHP カンファレンス関西 2014 の発表資料です。

13:30-14:00 フレームワークを使うべき 3 つの理由
http://conference.kphpug.jp/2014/

Published in: Technology
0 Comments
13 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
7,614
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
24
Comments
0
Likes
13
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×