Successfully reported this slideshow.
Your SlideShare is downloading. ×

第21回Creators MeetUp

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Pyramid入門
Pyramid入門
Loading in …3
×

Check these out next

1 of 59 Ad

第21回Creators MeetUp

Download to read offline

Session04「なぜフレームワークを使うのか」
プログラミング言語 (PHPなど) の文法は理解したが、Web アプリケーションフレームワークを使った事がない方を対象に、べた書き(モノリシック)なプログラムを、Web アプリケーションフレームワーク を使い修正し、何が違うのかを比較します。

Session04「なぜフレームワークを使うのか」
プログラミング言語 (PHPなど) の文法は理解したが、Web アプリケーションフレームワークを使った事がない方を対象に、べた書き(モノリシック)なプログラムを、Web アプリケーションフレームワーク を使い修正し、何が違うのかを比較します。

Advertisement
Advertisement

More Related Content

Slideshows for you (20)

Similar to 第21回Creators MeetUp (20)

Advertisement

Recently uploaded (20)

Advertisement

第21回Creators MeetUp

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

×