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
1.1k
Laravelワカンネ(゚⊿゚)から「完全に理解した()」までステップアップ
2019.1.22 大阪Laravel勉強会主催
namizatork
January 22, 2020
Tweet
Share
More Decks by namizatork
See All by namizatork
PHPのエラーを理解して適切なエラーハンドリングを学ぼう
namizatork
2
3.7k
もう細かいレビューは したくない、されたくない
namizatork
1
1.4k
PHPの静的解析 ついでにLarastan
namizatork
1
570
Laravel8.xまでの大きな変更点を振り返る
namizatork
0
510
Livewireは魔法??コードリーディング してみた
namizatork
1
330
Laravelの「Hello World」を 表示するまでの処理を追ってみた
namizatork
0
1.4k
Laravel Hands-on
namizatork
0
350
SPA/PWA/AMPってなに?
namizatork
1
17k
Other Decks in Programming
See All in Programming
なぜ今、Terraformの本を書いたのか? - 著者陣に聞く!『Terraformではじめる実践IaC』登壇資料
fufuhu
4
620
GitHub Copilotの全体像と活用のヒント AI駆動開発の最初の一歩
74th
7
2.9k
ゲームの物理
fadis
5
1.2k
AIエージェント開発、DevOps and LLMOps
ymd65536
1
120
ワープロって実は計算機で
pepepper
2
1.4k
LLMOpsのパフォーマンスを支える技術と現場で実践した改善
po3rin
8
940
Comparing decimals in Swift Testing
417_72ki
0
170
管你要 trace 什麼、bpftrace 用下去就對了 — COSCUP 2025
shunghsiyu
0
420
AHC051解法紹介
eijirou
0
590
Understanding Kotlin Multiplatform
l2hyunwoo
0
260
Infer入門
riru
4
1.5k
Claude Codeで実装以外の開発フロー、どこまで自動化できるか?失敗と成功
ndadayo
2
190
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.4k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
The Invisible Side of Design
smashingmag
301
51k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Into the Great Unknown - MozCon
thekraken
40
2k
A Tale of Four Properties
chriscoyier
160
23k
RailsConf 2023
tenderlove
30
1.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
A Modern Web Designer's Workflow
chriscoyier
695
190k
4 Signs Your Business is Dying
shpigford
184
22k
Being A Developer After 40
akosma
90
590k
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