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