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
370
Livewireは魔法??コードリーディング してみた
namizatork
November 25, 2020
Tweet
Share
More Decks by namizatork
See All by namizatork
PHPのエラーを理解して適切なエラーハンドリングを学ぼう
namizatork
2
4k
もう細かいレビューは したくない、されたくない
namizatork
1
1.4k
PHPの静的解析 ついでにLarastan
namizatork
1
610
Laravel8.xまでの大きな変更点を振り返る
namizatork
0
550
Laravelワカンネ(゚⊿゚)から「完全に理解した()」までステップアップ
namizatork
1
1.2k
Laravelの「Hello World」を 表示するまでの処理を追ってみた
namizatork
0
1.4k
Laravel Hands-on
namizatork
0
370
SPA/PWA/AMPってなに?
namizatork
1
17k
Other Decks in Programming
See All in Programming
OSSとなったswift-buildで Xcodeのビルドを差し替えられるため 自分でXcodeを直せる時代になっている ダイアモンド問題編
yimajo
3
640
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
160
2026/02/04 AIキャラクター人格の実装論 口 調の模倣から、コンテキスト制御による 『思想』と『行動』の創発へ
sr2mg4
0
520
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
1k
24時間止められないシステムを守る-医療ITにおけるランサムウェア対策の実際
koukimiura
2
170
Apache Iceberg V3 and migration to V3
tomtanaka
0
210
360° Signals in Angular: Signal Forms with SignalStore & Resources @ngLondon 01/2026
manfredsteyer
PRO
0
170
朝日新聞のデジタル版を支えるGoバックエンド ー価値ある情報をいち早く確実にお届けするために
junkiishida
1
170
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
5
870
ふん…おもしれぇ Parser。RubyKaigi 行ってやるぜ
aki_pin0
0
110
CSC307 Lecture 06
javiergs
PRO
0
700
浮動小数の比較について
kishikawakatsumi
0
300
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
440
Site-Speed That Sticks
csswizardry
13
1.1k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
200
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
65
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.3k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
94
The SEO Collaboration Effect
kristinabergwall1
0
370
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.6k
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Building Applications with DynamoDB
mza
96
6.9k
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をレンダリングして いるっぽい
おわり 本当はもっと書きたかったけ ど 時間がありませんですた