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
php conference okinawa 2022
Search
ふわせぐ
August 27, 2022
Programming
0
1.8k
php conference okinawa 2022
PHP Conference 沖縄 2022 の登壇資料です
ふわせぐ
August 27, 2022
Tweet
Share
More Decks by ふわせぐ
See All by ふわせぐ
php-conference-nagoya-2025
fuwasegu
0
350
object-oriented-conference-2024
fuwasegu
14
5.2k
proud of my organization LT
fuwasegu
1
430
Qiita Night PHP 2023
fuwasegu
0
14k
QiitaConference2022
fuwasegu
1
1.4k
sleepagotchi
fuwasegu
2
2.6k
何の画像か当てちゃるBot紹介/image_guess_bot
fuwasegu
0
200
新卒 Laravel 初心者が成長していく中で 感じたコレジャナイ感/PHPerKaigi 2022
fuwasegu
11
15k
入社初日に社内サービスを全部一人で引き継いだ新卒フルサイクルエンジニアの話
fuwasegu
4
6.7k
Other Decks in Programming
See All in Programming
Android端末で実現するオンデバイスLLM 2025
masayukisuda
1
170
FindyにおけるTakumi活用と脆弱性管理のこれから
rvirus0817
0
540
個人軟體時代
ethanhuang13
0
330
アルテニア コンサル/ITエンジニア向け 採用ピッチ資料
altenir
0
110
Flutter with Dart MCP: All You Need - 박제창 2025 I/O Extended Busan
itsmedreamwalker
0
150
テストカバレッジ100%を10年続けて得られた学びと品質
mottyzzz
2
610
私の後悔をAWS DMSで解決した話
hiramax
4
210
GitHubとGitLabとAWS CodePipelineでCI/CDを組み比べてみた
satoshi256kbyte
4
250
AIでLINEスタンプを作ってみた
eycjur
1
230
もうちょっといいRubyプロファイラを作りたい (2025)
osyoyu
1
460
チームのテスト力を鍛える
goyoki
3
940
go test -json そして testing.T.Attr / Kyoto.go #63
utgwkk
3
320
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1370
200k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
Facilitating Awesome Meetings
lara
55
6.5k
Unsuck your backbone
ammeep
671
58k
Visualization
eitanlees
148
16k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
113
20k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
The Art of Programming - Codeland 2020
erikaheidi
56
13k
Building Adaptive Systems
keathley
43
2.7k
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 ͷίʔυΛಡ͏ʂ