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.5k
php conference okinawa 2022
PHP Conference 沖縄 2022 の登壇資料です
ふわせぐ
August 27, 2022
Tweet
Share
More Decks by ふわせぐ
See All by ふわせぐ
object-oriented-conference-2024
fuwasegu
14
4.5k
proud of my organization LT
fuwasegu
1
310
Qiita Night PHP 2023
fuwasegu
0
13k
QiitaConference2022
fuwasegu
1
1.2k
sleepagotchi
fuwasegu
2
2.6k
何の画像か当てちゃるBot紹介/image_guess_bot
fuwasegu
0
150
新卒 Laravel 初心者が成長していく中で 感じたコレジャナイ感/PHPerKaigi 2022
fuwasegu
10
13k
入社初日に社内サービスを全部一人で引き継いだ新卒フルサイクルエンジニアの話
fuwasegu
4
6.2k
Other Decks in Programming
See All in Programming
Remix on Hono on Cloudflare Workers
yusukebe
1
290
初めてDefinitelyTypedにPRを出した話
syumai
0
420
型付き API リクエストを実現するいくつかの手法とその選択 / Typed API Request
euxn23
8
2.2k
Figma Dev Modeで変わる!Flutterの開発体験
watanave
0
140
ペアーズにおけるAmazon Bedrockを⽤いた障害対応⽀援 ⽣成AIツールの導⼊事例 @ 20241115配信AWSウェビナー登壇
fukubaka0825
6
2k
광고 소재 심사 과정에 AI를 도입하여 광고 서비스 생산성 향상시키기
kakao
PRO
0
170
.NET のための通信フレームワーク MagicOnion 入門 / Introduction to MagicOnion
mayuki
1
1.7k
Compose 1.7のTextFieldはPOBox Plusで日本語変換できない
tomoya0x00
0
190
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
2
350
Enabling DevOps and Team Topologies Through Architecture: Architecting for Fast Flow
cer
PRO
0
330
ECS Service Connectのこれまでのアップデートと今後のRoadmapを見てみる
tkikuc
2
250
ActiveSupport::Notifications supporting instrumentation of Rails apps with OpenTelemetry
ymtdzzz
1
230
Featured
See All Featured
Teambox: Starting and Learning
jrom
133
8.8k
Building Applications with DynamoDB
mza
90
6.1k
KATA
mclloyd
29
14k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
410
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
130
For a Future-Friendly Web
brad_frost
175
9.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Why Our Code Smells
bkeepers
PRO
334
57k
Being A Developer After 40
akosma
87
590k
Navigating Team Friction
lara
183
14k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
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 ͷίʔυΛಡ͏ʂ