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
340
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
エンジニアのための”最低限いい感じ”デザイン入門
shunshobon
0
130
WebAssemblyインタプリタを書く ~Component Modelを添えて~
ruccho
1
920
令和最新版手のひらコンピュータ
koba789
14
8k
Portapad紹介プレゼンテーション
gotoumakakeru
1
130
testingを眺める
matumoto
1
110
State of CSS 2025
benjaminkott
1
120
オープンセミナー2025@広島「君はどこで動かすか?」アンケート結果
satoshi256kbyte
0
210
LLMOpsのパフォーマンスを支える技術と現場で実践した改善
po3rin
8
990
フロントエンドのmonorepo化と責務分離のリアーキテクト
kajitack
2
140
Namespace and Its Future
tagomoris
6
540
サイトを作ったらNFCタグキーホルダーを爆速で作れ!
yuukis
0
520
モバイルアプリからWebへの横展開を加速した話_Claude_Code_実践術.pdf
kazuyasakamoto
0
280
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.4k
Code Reviewing Like a Champion
maltzj
525
40k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.6k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Visualization
eitanlees
147
16k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
Raft: Consensus for Rubyists
vanstee
140
7.1k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Balancing Empowerment & Direction
lara
2
590
It's Worth the Effort
3n
187
28k
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 ͷίʔυΛಡ͏ʂ