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
namizatork
November 25, 2020
Programming
1
330
Livewireは魔法??コードリーディング してみた
namizatork
November 25, 2020
Tweet
Share
More Decks by namizatork
See All by namizatork
PHPのエラーを理解して適切なエラーハンドリングを学ぼう
namizatork
2
3.6k
もう細かいレビューは したくない、されたくない
namizatork
1
1.4k
PHPの静的解析 ついでにLarastan
namizatork
1
560
Laravel8.xまでの大きな変更点を振り返る
namizatork
0
500
Laravelワカンネ(゚⊿゚)から「完全に理解した()」までステップアップ
namizatork
1
1.1k
Laravelの「Hello World」を 表示するまでの処理を追ってみた
namizatork
0
1.4k
Laravel Hands-on
namizatork
0
350
SPA/PWA/AMPってなに?
namizatork
1
17k
Other Decks in Programming
See All in Programming
なぜ適用するか、移行して理解するClean Architecture 〜構造を超えて設計を継承する〜 / Why Apply, Migrate and Understand Clean Architecture - Inherit Design Beyond Structure
seike460
PRO
1
680
KotlinConf 2025 現地で感じたServer-Side Kotlin
n_takehata
1
230
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
150
A2A プロトコルを試してみる
azukiazusa1
2
1.1k
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
210
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
330
AWS CDKの推しポイント 〜CloudFormationと比較してみた〜
akihisaikeda
3
310
Is Xcode slowly dying out in 2025?
uetyo
1
190
WindowInsetsだってテストしたい
ryunen344
1
190
生成AIコーディングとの向き合い方、AIと共創するという考え方 / How to deal with generative AI coding and the concept of co-creating with AI
seike460
PRO
1
330
PHPでWebSocketサーバーを実装しよう2025
kubotak
0
100
プロダクト志向なエンジニアがもう一歩先の価値を目指すために意識したこと
nealle
0
110
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
YesSQL, Process and Tooling at Scale
rocio
173
14k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
The Invisible Side of Design
smashingmag
299
51k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
KATA
mclloyd
29
14k
Designing for humans not robots
tammielis
253
25k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
124
52k
Facilitating Awesome Meetings
lara
54
6.4k
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をレンダリングして いるっぽい
おわり 本当はもっと書きたかったけ ど 時間がありませんですた