$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
php conference okinawa 2022
Search
ふわせぐ
August 27, 2022
Programming
0
1.9k
php conference okinawa 2022
PHP Conference 沖縄 2022 の登壇資料です
ふわせぐ
August 27, 2022
Tweet
Share
More Decks by ふわせぐ
See All by ふわせぐ
php-conference-nagoya-2025
fuwasegu
0
440
object-oriented-conference-2024
fuwasegu
14
5.5k
proud of my organization LT
fuwasegu
1
450
Qiita Night PHP 2023
fuwasegu
0
14k
QiitaConference2022
fuwasegu
1
1.5k
sleepagotchi
fuwasegu
2
2.6k
何の画像か当てちゃるBot紹介/image_guess_bot
fuwasegu
0
210
新卒 Laravel 初心者が成長していく中で 感じたコレジャナイ感/PHPerKaigi 2022
fuwasegu
11
15k
入社初日に社内サービスを全部一人で引き継いだ新卒フルサイクルエンジニアの話
fuwasegu
4
6.8k
Other Decks in Programming
See All in Programming
宅宅自以為的浪漫:跟 AI 一起為自己辦的研討會寫一個售票系統
eddie
0
520
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
10
1.4k
Jetpack XR SDKから紐解くAndroid XR開発と技術選定のヒント / about-androidxr-and-jetpack-xr-sdk
drumath2237
1
180
Rediscover the Console - SymfonyCon Amsterdam 2025
chalasr
2
180
JETLS.jl ─ A New Language Server for Julia
abap34
2
430
gunshi
kazupon
1
110
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
280
ゆくKotlin くるRust
exoego
1
130
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
240
tparseでgo testの出力を見やすくする
utgwkk
2
260
大規模Cloud Native環境におけるFalcoの運用
owlinux1000
0
180
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
410
Featured
See All Featured
Designing for Performance
lara
610
69k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
850
Unsuck your backbone
ammeep
671
58k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
A better future with KSS
kneath
240
18k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Navigating Team Friction
lara
191
16k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.3k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
24
Producing Creativity
orderedlist
PRO
348
40k
4 Signs Your Business is Dying
shpigford
186
22k
Transcript
͕ *MVNJOBUF ΛಡΉཧ༝ ふわせぐ @fuwasegu
2 PHP Conference Okinawa 2022 • ふわせぐ (@fuwasegu) • 株式会社ゆめみ
/ 21卒 – コーポレートエンジニア • PHP / Laravel がメイン – Svelte(JS / TS),Rust 勉強中 自己紹介
3 PHP Conference Okinawa 2022 今日伝えたいこと ͚ͨ͠Ε࣮ΛಡΉ͠ʂ
4 PHP Conference Okinawa 2022 -BSBWFM ͷίʔυಡΜͰ·͔͢ʁ 🙅 Laravel で書かれたアプリケーションのコード
🙆 Laravel フレームワーク本体(Illuminate)のコード
5 Laravel の本体 “Illuminate” PHP Conference Okinawa 2022 https://github.com/illuminate
• メソッドが発掘できる – マニュアルには載ってないけど便利なメソッドがあ るかも • フレームワーク の仕様が深いところまで分かる – エラーの原因が推測しやすくなる
6 僕が Illuminate を読む理由 PHP Conference Okinawa 2022
• メソッドが発掘できる – マニュアルには載ってないけど便利なメソッドがあ るかも 7 僕が Illuminate を読む理由 PHP
Conference Okinawa 2022
8 おなじみ Laravel ReaDouble PHP Conference Okinawa 2022 https://readouble.com/ •
Laravel の公式マニュアル (laravel.com)の翻訳サイト • 恐らく日本の Laravel エンジニア が一番お世話になっているであろ う有名サイト
9 メソッドが発掘できる PHP Conference Okinawa 2022 Laravel7.x 以前で Http ファサードを用いた複数のリクエストを順序を含めて検証する
• 実装を紐解きながら裏技を紹 介する記事 • ソースコードリーディングで 見つけたメソッドで問題を解 決した • メソッドの発掘は宝探しみた いで楽しい! https://zenn.dev/fuwasegu/articles/728061dbaf7082
• フレームワーク の仕様が深いところまで分かる – エラーの原因が推測しやすくなる 10 僕が Illuminate を読む理由 PHP
Conference Okinawa 2022
11 何が渡ってくるかぱっと見分からない PHP Conference Okinawa 2022 https://readouble.com/laravel/8.x/ja/eloquent-relationships.html
12 ιʔείʔυΛಡΜͰղ໌ͯ͠ΈΑ͏ʂ PHP Conference Okinawa 2022
13 宣伝 PHP Conference Okinawa 2022 -BSBWFM ιʔείʔυϦʔσΟϯάษڧձ ݄த०ΑΓ DPOOQBTT
ʹͯఆظ։࠵ܾఆʂ
詳しい処理の解説は勉強会でいつかやるの で,今回は時間の関係で軽く処理を追って いくだけにしようと思います 14 PHP Conference Okinawa 2022
• $query に何が渡ってくるのかを突き止める – with に渡されたクロージャを実行している部分を見 つければよさそう 15 今回のコードリーディングのゴール PHP
Conference Okinawa 2022
User::with() の呼び出し部分 PHP Conference Okinawa 2022 16 地上1階
Eloquent Model::with() PHP Conference Okinawa 2022 17 今回の $relations は
array 地下1階
Eloquent Builder::with() PHP Conference Okinawa 2022 18 今回の $callback は
null 地下2階
Eloquent Builder::parseWithRelations() PHP Conference Okinawa 2022 19 $relations は,[‘posts’ =>
function ($query)] ここには入らない 地下3階 ドットでネストしたリレーションを処理
Eloquent Builder::with() PHP Conference Okinawa 2022 20 $eagerLoad は,[‘posts’ =>
function ($query)] 地下2階 $this->eagerLoad に [‘posts’ => function ($query)] をマージ
Eloquent Model::with() PHP Conference Okinawa 2022 21 地下1階
User::with() の呼び出し部分 PHP Conference Okinawa 2022 22 地上1階 次はこっち
Eloquent Builder::get() PHP Conference Okinawa 2022 23 地下1階 一旦リレーション無しでモデルを取得(SELECT) 今回はモデルが取れる想定
Eloquent Builder::eagerLoadRelations() PHP Conference Okinawa 2022 24 地下2階 さっき [‘posts’
=> function ($query)] をマージしたやつ
Eloquent Builder::eagerLoadRelation() PHP Conference Okinawa 2022 25 地下3階 ついに実行している部分を発見!!! function
($query) の $query は, $constraints($relation) の $relation $relation の型がわかれば良さそう
Eloquent Builder::getRelation() PHP Conference Okinawa 2022 26 地下4階 $this->getModel() ->newInstance()
->$name() で,User モデルの を呼んでる
Eloquent Relations Relation::noConstraints() PHP Conference Okinawa 2022 27 地下5階 そのままクロージャを実行して結果を
返却
Eloquent Builder::getRelation() PHP Conference Okinawa 2022 28 地下4階 $relation には
posts() の返り値 HasMany が入っていそう
Eloquent Builder::eagerLoadRelation() PHP Conference Okinawa 2022 29 地下3階 $relation の型が
HasMany に決定!
$query の正体(今回の場合) • Illuminate/Database/Eloquent/Relations/HasMany – 今回渡される実体 • Illuminate/Database/Eloquent/Relations/HasOneOrMany – HasMany
の継承元(抽象クラス) • Illuminate/Database/Eloquent/Relations/Relation – HasOneOrMany の継承元(抽象クラス) • Illuminate/Contracts/Database/Eloquent/Builder – Relation が実装しているインターフェース PHP Conference Okinawa 2022 30 抽 象 度 高 低
Laravel にちょっと詳しいヤツになれた! PHP Conference Okinawa 2022 31 Model::with() にわたすクロージャの引数 に何が渡ってくんのか全然分からん!
32 (おまけ)その他のメリット PHP Conference Okinawa 2022 mockery/library/Mockery/Container.php • 作者からのメッセージが残さ れていることも...?
I'll refactor it one day so it's easier to follow. いつか分かりやすくリファクタするよ ー Padraic Brady • OSS 貢献チャンス – コメントの修正レベルでも OK!実績作りにもってこい
• フレームワークのソースコードリーディングには メリットが沢山 – メソッドの発掘 – フレームワークの深い理解 – OSS への貢献チャンス
• ソースコードリーディングは成長への近道 – 初心者こそ,ツヨツヨに一歩近づくためにソースコ ードリーディングをして欲しい 33 まとめ PHP Conference Okinawa 2022
34 PHP Conference Okinawa 2022 -BSBWFM ͷίʔυΛಡ͏ʂ