Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Laravel 5.1 LTSでサービスを作る

10,565 views

Published on

Laravel 5.1 LTS の機能と比較をプレゼン資料としてひとまとめにしてみました。Laravel はいいぞ。

Published in: Software

Laravel 5.1 LTSでサービスを作る

  1. 1. Laravel 5.1 LTS でサービス作る 2016 m-yamagishi Infiniteloop.
  2. 2. 近況 [IL]山岸(capiba-)です 1〜2月は某バックエンドアプリケーションの管理画面を作っていました フレームワーク指定なしだったので Laravel 5.1 LTS にしました それまでは CakePHP2 による開発だったので快適すぎる環境に。
  3. 3. 目次 1. Laravelとは a. 概要と特徴 b. 他フレームワークと比較 c. 機能一覧 2. Laravelの機能 a. 主要機能紹介 b. コンポーネント紹介
  4. 4. Laravel とは Laravel はオフィスに夜遅くまで残りた くない人のためのフレームワークです - Jeff Madsen
  5. 5. Laravel 概要 MIT ライセンス Laravel 1 は 2011/06 リリース -> Laravel 5 は 2015/02 リリース Laravel 5.1 が初の LTS(Long Term Support) Symfony フレームワークの機能を利用している メインデベロッパの Taylor Otwell 氏は元 .NET の中の人 「幸せな開発者が最高のコードを書く[1]」が基本哲学 [1]: Laravel リファレンス[Ver.5.1 LTS 対応] Web職人好みの新世代PHPフレームワーク - P 002
  6. 6. Laravel 特徴 ● 多種多様なバリデーションルールと容易な拡張性 ● 簡単に実現出来るページネーション(ページ付け) ● 柔軟なサービス(DI)コンテナ ● 使いやすく使用準備の手間が掛からない ORM ● 実行しやすいテスト Laravel リファレンス[Ver.5.1 LTS 対応] Web職人好みの新世代PHPフレームワーク - P 003
  7. 7. 他のフレームワークと比較してみる vs
  8. 8. ベンチマーク 遅い https://github.com/kenjis/php-framework-benchmark 弟分のLumenはそこそこ
  9. 9. Google トレンド 人気爆発中
  10. 10. リポジトリ Symfony に次ぐ活発さ(コントリビュータ数、先月のコミット数) そもそも Laravel は Symfony のフレームワークの上に乗っている
  11. 11. 検索 まあまああるみたい
  12. 12. フルスタックフレームワーク ● Homestead ● ルーティング ● ミドルウェア ● コントローラ ● リクエスト/レスポンス ● ビュー ● テンプレートエンジン ● サービスコンテナ ● コントラクト ● ファサード ● 認可と認証 ● コンソールコマンド ● 購入手続き ● キャッシュ ● コレクション ● ビルド自動化 ● 暗号化 ● エラー&ロギング ● イベント ● ファイルシステム ● ハッシュ ● ヘルパー ● 国際化 ● メール ● ページネーション ● キュー ● セッション ● テスト ● バリデーション ● クエリビルダ ● マイグレーション ● シーディング ● ORM とにかく全方面をカバー!
  13. 13. [結論] 今人気な 重量級(なんでもできちゃう&遅い) フレームワーク
  14. 14. Laravel の機能 豪華で 簡素で 読みやすい フルスタックはいいぞ。 - Laravelおじさん
  15. 15. Routing 1ファイル見ればそのサービスが見える
  16. 16. リダイレクト Routing クライアント リクエスト ミドルウェア コントローラ 処理の依頼 モデル DB 結果 結果 レスポンス リダイレクト クエリ
  17. 17. Routing app/Http/routes.php にクロージャで記述(Sinatra風) ←[ミドルウェア] コントローラ処理前後でやりたいことを記述 ←[プレフィックス]URLのプレフィックス ← /admin_users/edit/1 などでアクセスする
  18. 18. クロージャって 遅くない? でも大丈夫。Laravelならね。 - ???
  19. 19. artisan route:cache コマンド1個でルート設定クラスを文字列キャッシュするので高速
  20. 20. Controller / Request / Response この辺は普通すぎる処理しかないので割愛 よくあるMVCフレームワークのコントローラ ● ヘッダ指定 ● クッキー ● リダイレクト ● セッション ● フラッシュメッセージ ● JSON ● ファイル
  21. 21. Middleware 任意のコントローラの処理前・処理後に何かを行える ● 認証 - 未ログインならログイン画面にリダイレクトする ● 共有ビュー値 - 複数のページで共通のビュー値の設定 ● ロギング - リクエストが来たらログに書き込む ● レスポンス変換 - レスポンスの値を変換する(処理後) ● etc...
  22. 22. Service Container 欲しい時に欲しいもの(インスタンス)を用意してくれる頼もしい奴
  23. 23. Service Container とは ● インスタンスの生成と保持 ● 抽象化された要求の解決 ● コンストラクタ/メソッドインジェクション
  24. 24. ...
  25. 25. わからん 1つ1つ見てみる
  26. 26. インスタンスの生成と保持 よくやる
  27. 27. インスタンスの生成と保持 依存インスタンスを作るの面倒
  28. 28. インスタンスの生成と保持 一回バインドすれば、クラス名を指定するだけでインスタンスを作って返してくれる!
  29. 29. 抽象化された要求の解決 欲しいものを抽象化しておけば、状況に応じて 渡すインスタンスを変えることが可能になる
  30. 30. コンストラクタ/メソッドインジェクション フレームワーク側でインスタンス化・呼びだされるメソッドの引数にクラスをタイプヒンティン グすると、コンテナが自動的にインスタンスを用意してくれる
  31. 31. コンストラクタ/メソッドインジェクション 自分でインスタンスを用意する必要がない 全てはサービスコンテナが提供してくれる
  32. 32. Façade デザインパターンの奴ではない
  33. 33. Façade - ファサード 行いたい処理をどこからでも static メソッドとして呼べるクラス
  34. 34. え? static はテストしづらいし直しづら いし良いことないじゃん
  35. 35. え? static はテストしづらいし直しづら いし良いことないじゃん 心配ご無用!
  36. 36. Façade は Mockery を持つ Mockery というテスト用のモックオブジェクトを生成するライブラリを内包 テスト時に Mockery を事前定義しておけば、利用時に勝手にモックに置き換えてくれる “静的プロキシ” として利用可能な状態である
  37. 37. Query Builder メソッドチェーンでクエリを生成
  38. 38. Query Builder - クエリビルダ 最近の流行っぽい
  39. 39. Eloquent エ↑レクヮント : 雄弁な、能弁な
  40. 40. Eloquent - エレクヮント テーブルのリレーションや、カラムの型定義・変換などを担当 一般的な Active Record 形式の Model クラスと言える Query Builder を内包しているので、モデルに対してクエリを投げられる
  41. 41. Soft Deleting `IlluminateDatabaseEloquentSoftDeletes` トレイトを利用することで、 ソフトデリート(レコードに削除済み日時を乗せる)が利用可能になる `deleted_at` カラムの追加を必要とする
  42. 42. Query Scopes よく使われるWHERE条件などを事前に定義・命名出来る これが重要!!
  43. 43. Relations 1対1、1対多、多対多などのリレーションを実現する 定義 ←リレーション→
  44. 44. Relations 利用 プロパティとして取ればインスタンスが、メソッドとして取れば条件がついたクエリビルダが 取得出来る
  45. 45. Eager Loading - 熱心な読み込み Eloquent は JOIN ではなく別クエリを投げてリレーションを取得するので、 こういう書き方をすると つらい(N+1個の)SQLになる
  46. 46. Eager Loading - 熱心な読み込み 取得前に「このリレーションを利用する」と宣言しておけば、 オッケー
  47. 47. Eager Loading - 熱心な読み込み ネストしたリレーション読み込みも可能
  48. 48. Collection つまるところ便利な配列
  49. 49. Collection 通常配列やモデル配列に対して様々な処理を行えるクラス 便利メソッドがいっぱいなので、配列への複雑な処理をする場合は使いたい所
  50. 50. Blade 超☆シンプルテンプレートエンジン
  51. 51. Blade - テンプレートエンジン 超シンプルで、PHPコードの直埋め込みも許可している @if, @foreach, @extend, @include のような単純な制御文 {{ $name }} で変数自動エスケープ&表示 任意クラスのインジェクションも可能
  52. 52. Testing Laravel はテストが重要視されています
  53. 53. Testing Symfony の DomCrawler を内包し、擬似ブラウザテストが可能
  54. 54. Validation ちょっと配列を用意したら勝手に確認してくれます
  55. 55. Validation - バリデーション 所定の形式の配列を渡すと勝手にバリデートしてくれる
  56. 56. 他コンポーネント 紹介 たくさんあるので大雑把に ● Homestead : 全部入り開発用vagrant ● Artisan : アーティサンじゃなくてアルティザン ● Authentication : ログインは最初から実装済み ● Authorization : これは良い、これはダメ ● Cache : シンプル ● Elixir : フロントエンド開発も安心 ● Encryption : メソッドは2個だけ ● Events : プッシュ通知もできちゃう ● Filesystem : PHP関数はコワイから使わない で ● Hashing : 安全な暗号化 ● Helpers : どこでも便利に ● Localization : 外国でもOK ● Mail : テストもしやすい ● Migration : シンプルなマイグレータ ● Pagination : 全自動 ● Queue : 後から処理出来るものは後から ● Redis : 使いこなそう ● Session : セッション ● SSH Tasks : (これはまあなくても...) ● Task Scheduling : cronjob 直書きはNG
  57. 57. Homestead 開発用VM 必要なもの全部入りなvagrant ● Ubuntu 14.04 ● Git ● PHP 7.0 ● Xdebug ● HHVM ● Nginx ● MySQL / Mariadb ● Sqlite3 ● Postgres ● Composer ● Node (With PM2, Bower, Grunt, and Gulp) ● Redis ● Memcached (PHP 5.x Only) ● Beanstalkd
  58. 58. Artisan - アルティザン 単純なコンソールコマンド 既存コマンドも豊富で拡張も容易
  59. 59. Authentication - 認証 ● ユーザー登録 ● ログイン ● メールでパスワード再発行 ● BASIC認証 ● ソーシャル認証(Facebook, Twitter, LinkedIn, Google, Github, Bitbucker) が少しの実装で実現可能!
  60. 60. Authorization - 認可 この人はこのモデルを編集しても良い、追加は出来ない、などを表現可能 該当の記事を編集出来るか、このページを見れるか、様々な「○○出来るか」を単体で定 義出来る Policyクラスを定義して色々な場所で再利用 @can 記法でView中で利用することも簡単
  61. 61. Cache - キャッシュ 普通のキャッシュ file, database, memcached, redis から選べる デフォルトクロージャも出来る
  62. 62. Elixir - エリクサー gulp ラッパー SCSS/LESS/coffeescript/javascript などのリソースファイルを手軽にコンパイルし配置 出来る watch, バージョニング, ブラウザ同期等も備わっている
  63. 63. Encryption - 暗号化 複合可能な暗号化を行える
  64. 64. Events - イベント イベントドリブンな機能が実装出来る Pusherを使ってjsクライアントにブロードキャストしたりも可能
  65. 65. Filesystem / Cloud Storage /storages/app 内のファイル操作をうまいこと出来る s3も同じ記法で扱える
  66. 66. Hashing - ハッシュ化 復号化不要なユーザのパスワードなどを bcrypt 関数でハッシュ化出来る
  67. 67. ちょっと休憩 なんでも出来杉君だ これまでに見たコンポーネントおさらい ● Homestead : 全部入り開発用vagrant ● Artisan : アーティサンじゃなくてアルティザン ● Authentication : ログインは最初から実装済み ● Authorization : これは良い、これはダメ ● Cache : シンプル ● Elixir : フロントエンド開発も安心 ● Encryption : メソッドは2個だけ ● Events : プッシュ通知もできちゃう ● Filesystem : PHP関数はコワイから使わないで ● Hashing : 安全な暗号化
  68. 68. Helpers - ヘルパー 便利グローバル関数 array の拡張、 パスの取得、文字列の拡張、URL、その他ファサードでアクセス出来るよ うなコア機能
  69. 69. Localization - 多言語対応 php配列で言語ファイルを生成 trans ヘルパー関数で呼び出せる
  70. 70. Mail - メール SwiftMailer をラップしている 開発中はログに出力するドライバにしたり、Mailtrapを使うのが推奨されている
  71. 71. Migration - マイグレーション up/downをメソッドチェーン形式で書くだけの簡単なマイグレータ
  72. 72. Pagination - ページネイト クエリビルダやモデルでのレコード取得時に `paginate` メソッドを呼ぶと、勝手にページ ングしてくれる {!! $models->render() !!} とビューで呼ぶだけで、Bootstrap互換のページングリンクを貼ってくれる
  73. 73. Queue - キュー ジョブクラスを作成して、コントローラなどからキューを生成し、逐次実行していく コンソールコマンドをキュー化することも可能
  74. 74. Redis Redis に特化して実行出来るメソッドが提供されている
  75. 75. Session - セッション セッション変数を管理できる flash(一回表示したら消すメッセージ)なども対応している
  76. 76. SSH Tasks - SSHタスク Envoy を利用してSSH先でコマンド実行が出来る (機能が少なすぎて使いづらいから結局ansibleとか叩いた方が良い)
  77. 77. Task Scheduling つまり cronjob 。 定期実行するコマンドをPHPコード内に記述出来る スケジューリングの親プロセス自体はやっぱり cronjob に書く 出力をメールすることも出来る
  78. 78. まとめ ね?簡単でしょ?
  79. 79. Laravel は 富豪 のフレームワーク ● 実装の楽さを重視している ○ =実行速度は遅い ● 必要そうなものは最初からほぼ揃っている ○ キュー、メール、ファイル、暗号、テスト、バリデーション ... ● 速度をあまり求められない場所で、素早くリリースしたい場合に最適! ○ 逆に言うと、APIのようなアクセス頻度の高いものには使うべきではない ● 学習コストは低めだが、プロジェクト内での規約設定が重要 ○ Facade を使うのか、 helpers を使うのか、 Injection を使うのか、などの選択肢を決めておくこと
  80. 80. 実行速度が重要だけど、 Laravelの○○を使いたい! という、欲張りなあなたに朗報
  81. 81. Lumen とは 拡張性や柔軟性を捨てた代わりに速度を重視した版Laravel 大体の主要機能はそのまま使える コードベースの少ないページや、RESTful APIといった速度を求められるものの開発に 有効 Laravel で速度が欲しい一部機能を Lumen に切り出す、とかも効果的
  82. 82. 参考資料 ● Phalcon ● Slim ● CodeIgniter ● Lumen ● Yii ● Silex ● FuelPHP ● CakePHP ● Symfony ● Laravel ● Zend Framework ● PHP Laravelの勉強中で出て来た新しい用語のまとめ | urashita.com ● LumenとLaravelの違い - ララ帳 ● Laravel 5.1 Official Docs aa
  83. 83. fin.

×