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

More Related Content

PPTX
今日から始めるLaravel
PPTX
活動報告9 laravel5入門-
PDF
Laravel5.1 Release
PDF
フレームワークを使うべき 3 つの理由
PDF
LaravelとMVCの先へ
PDF
php開発で使うタスクランナー gulp
PPTX
〜laravel で学ぶ MVC
PPTX
Phpフレームワーク 「laravel」でブログを作ろう
今日から始めるLaravel
活動報告9 laravel5入門-
Laravel5.1 Release
フレームワークを使うべき 3 つの理由
LaravelとMVCの先へ
php開発で使うタスクランナー gulp
〜laravel で学ぶ MVC
Phpフレームワーク 「laravel」でブログを作ろう

What's hot (20)

PDF
PHPデプロイツールの世界
PDF
Laravel / Lumen 次の一歩
PDF
Laravel_オープンソースカンファレンスhokkaido_JP_2014
PDF
Laravel5.1をつかったWebアプリケーション開発
PDF
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
PDF
PHPとJavaScriptの噺
PDF
Laravelのパッケージのテストに便利なパッケージ
PPTX
Laravelを使ってみた
PDF
はじめてLaravelさわった 第86回php勉強会
PPTX
PHPで並列処理する ライブラリを作った
PDF
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
PPTX
PHP x AWS でスケーラブルなシステムをつくろう
PDF
PHPの今とこれから2015
PPTX
Behat Driven Development
PDF
恋に落ちるデプロイツール
PDF
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
PDF
いまどきのPHP開発現場 -2015年秋-
PDF
phpspecで始めるBDD
PDF
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
PDF
Javaで1から10まで書いた話(sanitized)
PHPデプロイツールの世界
Laravel / Lumen 次の一歩
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel5.1をつかったWebアプリケーション開発
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
PHPとJavaScriptの噺
Laravelのパッケージのテストに便利なパッケージ
Laravelを使ってみた
はじめてLaravelさわった 第86回php勉強会
PHPで並列処理する ライブラリを作った
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
PHP x AWS でスケーラブルなシステムをつくろう
PHPの今とこれから2015
Behat Driven Development
恋に落ちるデプロイツール
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
いまどきのPHP開発現場 -2015年秋-
phpspecで始めるBDD
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Javaで1から10まで書いた話(sanitized)
Ad

Viewers also liked (8)

PDF
Laravelとテストについて
PPT
今、最もイケてるPHPフレームワークLaravel4
PDF
Laravel Mix とは何なのか? - Laravel/Vue 勉強会 #1
PDF
Lord of Knights の裏側見せます!PHP+MySQLで作るスマートフォンゲーム開発
PDF
いろいろ見せますLord of Knightsのクライアント開発事例紹介
PDF
Laravelの認証について
PDF
プロダクトに 1 から Vue.js を導入した話
PDF
認証機能で学ぶ Laravel 5 アプリケーション
Laravelとテストについて
今、最もイケてるPHPフレームワークLaravel4
Laravel Mix とは何なのか? - Laravel/Vue 勉強会 #1
Lord of Knights の裏側見せます!PHP+MySQLで作るスマートフォンゲーム開発
いろいろ見せますLord of Knightsのクライアント開発事例紹介
Laravelの認証について
プロダクトに 1 から Vue.js を導入した話
認証機能で学ぶ Laravel 5 アプリケーション
Ad

Similar to Laravel 5.1 LTSでサービスを作る (20)

PPTX
Fluentd1.2 & Fluent Bit
PDF
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
PDF
Gruntの罪と罰
PDF
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
PDF
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
PDF
Laravelから学びレガシーと闘いはじめた
PPTX
Windows HPC Server 講習会 第2回 開発編
PDF
JellyBeanのソースをとりあえず眺めてみた(手抜き)
PDF
Rancher2.0で実現する Managed Kubernetes Service
PDF
Linux daemonとsupervisordの美味しい関係
PDF
Web技術勉強会 第33回
PDF
Al mininum 47redmine-2nd
PDF
RedHat MW 2015
PDF
Web技術勉強会 第31回
PPTX
Linux debug
PPTX
サバフェスLt
PDF
XenServerによるお手軽開発サーバ運用
PDF
PHPerのためのpostgresqlチューニングmini
PDF
PHPの今とこれから2022
PDF
Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Fluentd1.2 & Fluent Bit
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
Gruntの罪と罰
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Laravelから学びレガシーと闘いはじめた
Windows HPC Server 講習会 第2回 開発編
JellyBeanのソースをとりあえず眺めてみた(手抜き)
Rancher2.0で実現する Managed Kubernetes Service
Linux daemonとsupervisordの美味しい関係
Web技術勉強会 第33回
Al mininum 47redmine-2nd
RedHat MW 2015
Web技術勉強会 第31回
Linux debug
サバフェスLt
XenServerによるお手軽開発サーバ運用
PHPerのためのpostgresqlチューニングmini
PHPの今とこれから2022
Serfが面白いと俺の中で話題にwwwwww 【改訂版】

More from infinite_loop (20)

PDF
ChatGPT触ってみた
PDF
社内ソフトスキルを考える
PDF
3Dプリンタって いいね
PDF
VRChatでお酒が注げる飲み物アセットの紹介
PDF
アニメーションとスキニングをBurstで独自実装する.pdf
PDF
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
PDF
500万行のPHPプロジェクトにおけるログ出力の歩み
PDF
ADRという考えを取り入れてみて
PDF
リファクタリングで実装が○○分短縮した話
PDF
ゲームのインフラをAwsで実戦tips全て見せます
PDF
楽しいVR空間を作る技術と支える技術 #osc19do
PDF
Start rl with_unity_machine_learning_agents
PDF
UniRx の1歩目
PDF
がんばれ PHP Fiber
PDF
心に残った名前ランキング
PDF
プログラムと名前にまつわる座談会
PDF
名は体を表していますか
PDF
名前の力
PDF
大切な名前[Intro]公開版
PDF
JupyterNotebookとMySQLでゼロからはじめるデータサイエンス
ChatGPT触ってみた
社内ソフトスキルを考える
3Dプリンタって いいね
VRChatでお酒が注げる飲み物アセットの紹介
アニメーションとスキニングをBurstで独自実装する.pdf
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
500万行のPHPプロジェクトにおけるログ出力の歩み
ADRという考えを取り入れてみて
リファクタリングで実装が○○分短縮した話
ゲームのインフラをAwsで実戦tips全て見せます
楽しいVR空間を作る技術と支える技術 #osc19do
Start rl with_unity_machine_learning_agents
UniRx の1歩目
がんばれ PHP Fiber
心に残った名前ランキング
プログラムと名前にまつわる座談会
名は体を表していますか
名前の力
大切な名前[Intro]公開版
JupyterNotebookとMySQLでゼロからはじめるデータサイエンス

Laravel 5.1 LTSでサービスを作る