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ワカンネ(゚⊿゚)から「完全に理解した()」までステップアップ
Search
namizatork
January 22, 2020
Programming
1.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Laravelワカンネ(゚⊿゚)から「完全に理解した()」までステップアップ
2019.1.22 大阪Laravel勉強会主催
namizatork
January 22, 2020
More Decks by namizatork
See All by namizatork
PHPのエラーを理解して適切なエラーハンドリングを学ぼう
namizatork
2
4.2k
もう細かいレビューは したくない、されたくない
namizatork
1
1.5k
PHPの静的解析 ついでにLarastan
namizatork
1
630
Laravel8.xまでの大きな変更点を振り返る
namizatork
0
580
Livewireは魔法??コードリーディング してみた
namizatork
1
400
Laravelの「Hello World」を 表示するまでの処理を追ってみた
namizatork
0
1.4k
Laravel Hands-on
namizatork
0
390
SPA/PWA/AMPってなに?
namizatork
1
17k
Other Decks in Programming
See All in Programming
5分で問診!Composer セキュリティ健康診断
codmoninc
0
830
Android CLI
fornewid
0
210
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
1.1k
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
250
What's New in Android 2026
veronikapj
0
250
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
380
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
480
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
450
OpenSpecのproposalにbrainstormingを持たせてみた
tigertora7571
1
190
Built Our Own Background Agent at LayerX #aidevex_findy
layerx
PRO
9
4.7k
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
290
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
1
560
Featured
See All Featured
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
390
Testing 201, or: Great Expectations
jmmastey
46
8.2k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
600
Evolving SEO for Evolving Search Engines
ryanjones
0
250
Mobile First: as difficult as doing things right
swwweet
225
10k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
430
Building an army of robots
kneath
306
46k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
230
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
980
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.5k
Transcript
⼤阪Laravel勉強会 # ⼤阪Laravel勉強会 でツイート 登壇(15min) Laravelワカンネ(゚⊿゚)から「完全に理解した()」までス テップアップ LaravelとSymfony Laravel5 と
Laravel6 の違い -認証編- LT(5min) LaravelでSNSログインを実装 LaravelのコアコードからMiddlewareとControllerの実 ⾏⼿順を理解する MySQLと⽂字コードの話 故Laravel4でやっていく時のTips Amazon LightsailにLaravel環境作ってみた
Laravelワカンネ(゚⊿゚)から 「完全に理解した()」までステップアップ Namizato
エンジニアの「完全に理解した()」 ⾃信 理解度 完全に理解した なんも分からん チョットワカル
以上。 前ページ踏まえた上でご視聴ください。
⾃⼰紹介 Laravelのライフサイクル Laravelでよく⽬にするやつ
Namizato @namizatop Work : サーバーサイド Like : ⽝ バスケ Age
: 25 Laravelコミュニティ参加⾃由です
Laravelのライフサイクル
Laravelをwebに公開する時、 publicフォルダのみを公開 フォルダとします。 そこに存在するCSS・JS等 以外のファイルへのアクセ スは全てindex.phpを通して、 実⾏されます。 公開フォルダ
HTTPカーネル http://laravel 1 エントリポイント ルーティング ミドルウェア コントローラー 2 3 4
5 6 7 実⾏フロー
オートロードファイルの読み込み フレームワークの起動 アプリケーション実⾏ HTTPレスポンス送信 終了処理 エントリポイント
通常のPHPでは別のPHP ファイルを参照する際、 require⽂を読み込む必要が ありますが、Laravelでは ファイルの上部でuse宣⾔す ると⾃動でそれらのファイ ル郡を⾃動で読み込んで使 ⽤できます。 オートロード
Laravelの根幹とも⾔えるApplicationイ ンスタンスを⽣成します。 このApplicationインスタンスでは Laravelの様々な機能を提供する部品を 管理しており、Laravelではサービスコ ンテナと呼んでいます。 ここではHTTPカーネル/Consoleカー ネル/エラーハンドラーをsingletonでバ インドしてindex.php(エンドポイント) に返します。
※サービスコンテナは別ページで説明します。 アプリケーション実⾏
前ページでsingletonを利⽤してバイン ドしたHTTPカーネルの⼀例です。 HTTPカーネルではリクエストの実⾏前 に処理される機能(CSRFや認証など) を配列($middleware)で定義します。 ここで定義した処理はRequestインスタ ンスに対して必ず実⾏されます。 また、任意で処理を追加、削除が可能 です。 ※定義した処理はミドルウェアで実⾏されます。
HTTPカーネル
特定のURL (http://laravel/◦◦◦)に対して どの処理を呼び出して実⾏するのか を管理するのがルーティングです。 図①では/homeにアクセスされた時 に図②の`HomeController`クラスの `index`メソッドを呼び出しています。 ルーティング http://laravel/home 1
2
ミドルウェアとはRequestに対して(つまり Laravelアプリケーション全体)フィルタリン グをする機能の事です。 例えば右の図の様にログイン機能を追加しよう と思った時にそれぞれのコントローラーで認証 ロジックを書くのは⼤変です。 その処理をコントローラーとは別に実⾏する仕 組みを⽤意したものになります。 右の図の様にミドルウェア->コントローラー を通った後に再度ミドルウェアに戻っている様
にコントローラーの前後どちらでも設定が可能 です。 ※認証ロジックだけでなくCSRFトークンのチェックなど 様々な処理が初期設定で存在します。 ミドルウェア ミドルウェア コントローラー 5 6 ~~~~~~省略~~~~~~ ログイン ここで認証ロジック など ʻʻ実⾏フローから引⽤ʼʼ
LaravelはMVCフレームワークです。 ControllerはModelとViewの制御を ⾏う中⼼となる部分です。 右の図の様にLaravelのControllerは 通常、Controllerクラスを継承してい ます。 継承せずともControllerとして機能し ますが、前ページで説明した、ミド ルウェアへのアクセスが出来なくな ります。
コントローラー
Laravelでよく⽬にするやつ
DIとはオブジェクト同⼠の 依存をなくして疎結合にし ようという考え⽅です。 右の図では`User`クラスは `Phone`クラスに依存して います。 このままでは`User`クラス の単体テストができません。 DI(依存性の注⼊) Phoneクラスに依存している
右の図ではresolve()という関数にク ラス名を渡しています。 この記述をする事で、外部でインス タンス⽣成を⾏い、疎結合にしたと いう事になります。 これにより`Phone`クラスのモック を与えた`User`クラスの単体テスト が可能になりました。 では外部からインスタンスを⽣成す るとはどういう事か次ページで追っ
てみます。 DI(依存性の注⼊) Phoneクラスに依存していない
サービスコンテナとはアプリケーショ ン全体のインスタンスを管理する機能 の事です。 前ページで紹介したresolve()はグロー バル関数として使⽤でき、クラス名を 渡すと該当のクラスのインスタンスを リターンする事ができます。 resolve()は説明するためにあえて使い ましたが、メソッドに直接クラス名を 渡すと⾃動で同様にインスタンスを外
部から注⼊する事ができるメソッドイ ンジェクションがよく使われます。 サービスコンテナ サービスコンテナ インスタンス⽣成し てくだぱい あいよ (インスタンスを渡す)
ご静聴ありがとうございました。 Namizato