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
Livewireは魔法??コードリーディング してみた
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
namizatork
November 25, 2020
Programming
400
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Livewireは魔法??コードリーディング してみた
namizatork
November 25, 2020
More Decks by namizatork
See All by namizatork
PHPのエラーを理解して適切なエラーハンドリングを学ぼう
namizatork
2
4.2k
もう細かいレビューは したくない、されたくない
namizatork
1
1.5k
PHPの静的解析 ついでにLarastan
namizatork
1
630
Laravel8.xまでの大きな変更点を振り返る
namizatork
0
580
Laravelワカンネ(゚⊿゚)から「完全に理解した()」までステップアップ
namizatork
1
1.2k
Laravelの「Hello World」を 表示するまでの処理を追ってみた
namizatork
0
1.4k
Laravel Hands-on
namizatork
0
390
SPA/PWA/AMPってなに?
namizatork
1
17k
Other Decks in Programming
See All in Programming
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
160
霧の中の代数的エフェクト
funnyycat
1
490
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
210
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
540
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
730
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
870
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
210
the container ship “Apple Silicon”@WWDC26 Recap -Japan-\(region).swift
shingangan
0
110
継続モナドとリアクティブプログラミング
yukikurage
3
700
OpenSpecのproposalにbrainstormingを持たせてみた
tigertora7571
1
210
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
1.4k
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
540
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
6.2k
Are puppies a ranking factor?
jonoalderson
1
3.8k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Side Projects
sachag
455
43k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.3k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
260
From π to Pie charts
rasagy
0
260
We Have a Design System, Now What?
morganepeng
55
8.3k
Color Theory Basics | Prateek | Gurzu
gurzu
0
410
Transcript
Livewire は本当に魔法?? コードリーディングしてみた 弁護士ドットコム @namizatork
@namizatork ナミザト Profile 会社 年齢 出身 弁護士ドットコム株式会社 26歳 沖縄 すこ
お酒 一言 最近Reactハマってる
JavaScriptを書かずにPHPだけでSPAを実現することが出来るライブラリのこと 従来通りデータを受け取ったり、渡したりする為にはバックエンドへのAPI通信は必須だが、 その辺りを Livewire が”うまいこと”やってくれているので、開発者はAjax処理を意識せずに SPAが構築できる 今回はその”うまいこと”している箇所のコードを読み解いてみる Livewireとは
とはいえ実装方法の説明 ボタンを押すと数字がカウントするという簡 単なプログラムを作ってみる 普通ならJSを書いてAjax通信をしないとカウ ントアップはされないが、LivewireならPHPだ けで書けちゃう
View View部分(フロントだとコンポーネント的な) LivewireはBladeの記述で書く必要があり、 変数の出力方法なども基本的にはBladeの 記述方と同じだよ wire:click=”inc” はクリックした時にinc()メ ソッドを呼び出している
View(コンポーネント)の呼び出し これは普通のwelcome.blade.phpファイル (ちょいと違うけどまぁそういことにして) 先ほどのカウンターコンポーネントを <livewire:counter> で呼び出している
ロジック部分(Classファイル) これはLaravelでいうところのController的な 役目の箇所 関数を記述したり、Viewを指定して値を渡し たり、フロントからデータを受け取ったりする ことが出来る
いよいよ本題 まずはルーティングから 追ってくよ。 ※Jetstreamは省くよ。
ルーティングを確認
Livewireのサービスプロバイダを確認 Livewireのサービスプロバイダを確認すると 何やらboot()に登録している $this->RegisterRoutes() あたりがルートの指定っぽい
ルーティングファイルの場所 ここでルーティング指定してるっぽいですね 試しにlivewire/livewire.jsを覗いてみます
LivewireJavaScriptAssets 先ほどのルーティングであった LivewireJavaScriptAssets::class を覗いてみよう 何やらuse先のメソッドにJavaScriptファイル のパスを渡している...?
CanPretendToBeAFile 呼び出し元のメソッドを確認すると ファイルパスをJavaScriptとして吐いている つまり /livewire/livewire.js にアクセスすると ビルドされた /dist/livewire.js ファイルを表 示されるので、ここを叩けばLaravel側からア
クセスできそう
初期のルーティング設定は何となく理解 次はどうやってBladeにJSな しでAjax通信しているか見て いくよ
@livewireScripts JSの記述もないのにどうやってAjax通信を 行っているか調べる @livewireScripts という記述があやしい
再度Livewireのサービスプロバイダを確認 本来のBladeのディレクティブには @livewireJavascript なんてものはないのでどこかでカスタムディ レクティブしていると思われる Livewireのサービスプロバイダを確認すると それっぽい記述を発見 $this->registerBladeDirctives()
Bladeのカスタムディレクティブの内容を確認 やっぱりこのメソッド内でBladeのカスタアム ディレクティブを設定してました! 第一引数がBladeの @livewireScripts 第二引数が実際に実行したい処理 処理を確認すると別クラスのメソッド が呼ば れている...
カスタムディレクティブで実行される処理を確認 scripts()を覗くとどうやら別のメソッドから HTML構造を受け取っているので、 そのメソッドを見てみる (これが1メソッドだと....) これを吐き出してLivewireをレンダリングして いるっぽい
おわり 本当はもっと書きたかったけ ど 時間がありませんですた