Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Laravel 5.1 LTSでサービスを作る
Search
Infiniteloop
August 17, 2023
Programming
0
150
Laravel 5.1 LTSでサービスを作る
Laravel 5.1 LTS の機能と比較をプレゼン資料としてひとまとめにしてみました。Laravel はいいぞ。
Infiniteloop
August 17, 2023
Tweet
Share
More Decks by Infiniteloop
See All by Infiniteloop
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2025年版)
infiniteloop_inc
16
58k
俺の PHP プロファイラの話 PHP スクリプトで PHP 処理系のメモリをのぞき込む
infiniteloop_inc
1
540
心理的安全性を学び直し、 「いい組織とは何か?」を考えてみる
infiniteloop_inc
1
760
ゼロからつくる 2D物理シミュレーション ~物理現象をコードに落とし込む方法~
infiniteloop_inc
1
1.1k
詫び石の裏側
infiniteloop_inc
0
760
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2024年版)
infiniteloop_inc
7
34k
リファクタリングで実装が○○分短縮した話
infiniteloop_inc
0
240
ADRという考えを取り入れてみて
infiniteloop_inc
0
240
500万行のPHPプロジェクトにおけるログ出力の歩み
infiniteloop_inc
0
180
Other Decks in Programming
See All in Programming
GitHubとGitLabとAWS CodePipelineでCI/CDを組み比べてみた
satoshi256kbyte
4
220
Deep Dive into Kotlin Flow
jmatsu
1
330
1から理解するWeb Push
dora1998
7
1.9k
実用的なGOCACHEPROG実装をするために / golang.tokyo #40
mazrean
1
270
Namespace and Its Future
tagomoris
6
700
モバイルアプリからWebへの横展開を加速した話_Claude_Code_実践術.pdf
kazuyasakamoto
0
320
私の後悔をAWS DMSで解決した話
hiramax
4
210
AIコーディングAgentとの向き合い方
eycjur
0
270
Putting The Genie in the Bottle - A Crash Course on running LLMs on Android
iurysza
0
140
Testing Trophyは叫ばない
toms74209200
0
860
時間軸から考えるTerraformを使う理由と留意点
fufuhu
16
4.8k
ぬるぬる動かせ! Riveでアニメーション実装🐾
kno3a87
1
210
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
51
5.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
13k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
Gamification - CAS2011
davidbonilla
81
5.4k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
810
Transcript
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 `\Illuminate\Database\Eloquent\SoftDeletes` トレイトを利用することで、 ソフトデリート(レコードに削除済み日時を乗せる)が利用可能になる `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の◦◦を使いたい! という、欲張りなあなたに朗報
None
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.