Anúncio
Anúncio

Mais conteúdo relacionado

Apresentações para você(20)

Anúncio

Último(20)

Anúncio

第21回Creators MeetUp

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