Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Laravel 5.1 LTSでサービスを作る
Search
Infiniteloop
August 17, 2023
Programming
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Laravel 5.1 LTSでサービスを作る
Laravel 5.1 LTS の機能と比較をプレゼン資料としてひとまとめにしてみました。Laravel はいいぞ。
Infiniteloop
August 17, 2023
More Decks by Infiniteloop
See All by Infiniteloop
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2025年版)
infiniteloop_inc
18
91k
俺の PHP プロファイラの話 PHP スクリプトで PHP 処理系のメモリをのぞき込む
infiniteloop_inc
1
770
心理的安全性を学び直し、 「いい組織とは何か?」を考えてみる
infiniteloop_inc
1
1.2k
ゼロからつくる 2D物理シミュレーション ~物理現象をコードに落とし込む方法~
infiniteloop_inc
1
1.7k
詫び石の裏側
infiniteloop_inc
0
1k
[新卒向け研修資料] テスト文字列に「うんこ」と入れるな(2024年版)
infiniteloop_inc
7
36k
リファクタリングで実装が○○分短縮した話
infiniteloop_inc
0
320
ADRという考えを取り入れてみて
infiniteloop_inc
0
330
500万行のPHPプロジェクトにおけるログ出力の歩み
infiniteloop_inc
0
240
Other Decks in Programming
See All in Programming
Are APIs Still Relevant in the AI Era?
soyuka
0
440
dotNET_vulnclicker_intro.pdf
deka_morita
0
130
SREの越境 / SRE Collaboration
y0hgi
2
300
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
160
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
130
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
520
Androidだけじゃない、DroidKaigiで広がった私の技術スタック
akkeylab
0
120
setup-vp GitLab対応の裏側
naokihaba
0
160
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2.9k
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
470
カツオ、ご期待ください
suneo3476
0
160
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
300
Statistics for Hackers
jakevdp
799
230k
Utilizing Notion as your number one productivity tool
mfonobong
4
610
Making the Leap to Tech Lead
cromwellryan
135
10k
Google's AI Overviews - The New Search
badams
0
1.6k
A Tale of Four Properties
chriscoyier
163
24k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
490
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
270
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
320
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.