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
Jasprが凄い話
Search
Hayami Shuhei
March 01, 2025
Programming
410
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Jasprが凄い話
Flutter Tokyo #5
Hayami Shuhei
March 01, 2025
More Decks by Hayami Shuhei
See All by Hayami Shuhei
スマートグラスで並列バイブコーディング
hyshu
0
320
Claude Agent SDK を使ってみよう
hyshu
0
2.2k
Flutterと Vibe Coding で個人開発!
hyshu
1
410
BLoCパターンとflutter_bloc
hyshu
0
160
Melos x Pub Workspaces で 沢山のアプリとパッケージを管理するのに 苦労した話
hyshu
1
66
CanvasKitの描画の仕組みを調べてみる
hyshu
0
290
Other Decks in Programming
See All in Programming
自分的「カンファレンスの楽しみ方」
syumai
0
190
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
670
新卒PdEのリアル
ryu1013
1
390
承認済みなのに差戻しできてしまうバグ、型で潰せます
shinchit
0
140
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
160
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
260
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
330
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
1
480
高専、大学編入、そして未踏へ〜プロダクト開発とキャリアの歩み - Technical College, University Transfer, and On to “Mitou” / My Journey in Product Development and Career
pkmiya
0
140
リアルな遅延を測る仕様
kota_yata
1
140
Swift愛好会100回記念 第1回を振り返る
jollyjoester
0
120
Go 1.27からのGODEBUG / Go 1.27 リリースパーティ #go127party
mazrean
0
300
Featured
See All Featured
The Limits of Empathy - UXLibs8
cassininazir
1
640
It's Worth the Effort
3n
188
29k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
560
Balancing Empowerment & Direction
lara
6
1.3k
Accessibility Awareness
sabderemane
1
200
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
430
Prompt Engineering for Job Search
mfonobong
0
440
How to build a perfect <img>
jonoalderson
1
6k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Transcript
Flutter Tokyo #5.2 2025/03/01 aq (Hayami Shuhei) +BTQS͕ੌ͍
https://jaspr.site/ Jaspr
IUUQTHJUIVCDPNEBSUMBOHTJUFXXXQVMM IUUQTYDPNTDIVMUFL@EFWTUBUVT EBSUEFWͰ࠾༻͞Εͨ 13ग़ͨ͠,JMJBOࢯ͕࡞ऀ
Jasprͷલʹ…ݱࡏͷFlutterWeb • Wasmͷ2DඳըΤϯδϯͰ͋Δ CanvasKit ·ͨ SKWasm + ΞϓϦ(Dart)ΛWasmίϯύΠϧ͔jsϏϧυ • ϏϧυʹΑͬͯ΄΅WasmͷΈͰඳըͰ͖ΔͷͰઌਐత
• ΞϓϦͱ΄ͱΜͲมΘΒͳ͍ը໘ΛWebͰ࠶ݱ
Jasprͷલʹ…ݱࡏͷFlutterWeb • CanvasKitSKWasmѹॖ࣌Ͱ1.5MBʙ2MBఔ͋Δ • ϒϥβʔͱҟͳΔಠࣗඳըΛ͢ΔͷͰɺεϚϗͳͲੑೳ ͷڥͩͱॳճඳըʹ͕͔͔࣌ؒΔ • ಡΈࠐΈ+ඳըͷ͔͞ΒɺSEOධՁ͕Ͳ͏ؤுͬͯ࠷ʹ ۙ͘ͳͬͯ͠·͏ •
ͪΐͬͱ·͕͍͍ͩ࣌ͭͯͳ͍ײ
Jaspr • FlutterΛΘͣʹDart͔ΒWebϖʔδΛੜ͢Δύοέʔδ • Flutter ͕ Everything is a Widget
ͳͷʹର͠ɺ Jaspr Everything is a Component • main͔ΒrunAppΛ࣮ߦɺStatelessComponent·ͨ StatefulComponentͷbuildϝιουʹهड़͍ͯ͘͠
JasprͰΧϯλʔΞϓϦΛ࡞ͬͯΈΔ dart pub global activate jaspr_cli ࣮ߦ͢Δͱ৭ʑ߲͕ग़ͯ͘Δ͚ͲTUBUJDCVJMEΛબΜͰ ͓͚ޙͲΕͰ0, ॳظͰ؆୯ͳΧϯλʔΞϓϦ͕࡞ΒΕΔͷͷɺͬͱ γϯϓϧʹͯ͠ΈΔ
jaspr create my_website
JasprͰΧϯλʔΞϓϦΛ࡞ͬͯΈΔ import 'package:jaspr/browser.dart'; import 'package:my_website/counter.dart'; void main() { runApp(Counter()); }
XFCNBJOEBSU
import 'package:jaspr/jaspr.dart'; class Counter extends StatefulComponent { const Counter({super.key}); @override
State<Counter> createState() => CounterState(); } class CounterState extends State<Counter> { int count = 0; @override Iterable<Component> build(BuildContext context) sync* { yield div( styles: Styles(textAlign: TextAlign.center, fontSize: Unit.em(5)), [ span([text('$count')]), button( onClick: () => setState(() => count++), [text('+1')], ), ]); } } MJCDPVOUFSEBSU
JasprͰΧϯλʔΞϓϦ jaspr serve ϩʔΧϧͰ֬ೝ༻ʹMJCNBJOEBSUඞཁʢࠓճׂѪʣ ϩʔΧϧͰ֬ೝ͢Δʹɿ jaspr build αʔόʔΞοϓϩʔυ༻ʹϏϧυ͢Δʹɿ
SEOʹڧ͍ • HTMLλάςΩετΛؚΊͨ੩తϑΝΠϧͱͯ͠ੜ͞ΕΔ ͷͰɺී௨ͷWebαΠτͱͯ͠ೝࣝ͞ΕΔ • CSSʹΑΔҰׅܗग़དྷΔʢTailwind͑Δʣ • αʔόʔαΠυϨϯμϦϯάΛ͑ಈతίϯςϯπΛαʔ όʔଆͰ੩తϑΝΠϧͱͯ͠ੜ͢ΔͷͰߋʹૣ͘Ͱ͖Δ
Flutterͱͷޓੑ • Riverpodjaspr_riverpodΛ͑OK →ConsumerWidget͕ແ͘ɺcontext.watch͚ͩͰมߋ͕ өͰ͖Δ • InheritedWidgetΘΓͷInheritedComponentͪΌΜͱ͋Δ
Flutterͱͷޓੑ • Dartίʔυ `dart compile` Ͱjsʹม͞Ε͍ͯΔ (Wasmίϯ ύΠϧՄೳ)ɻͳͷͰFlutterΛ͍ͬͯͳ͍Dartίʔυͦͷ ··ར༻Մೳ (https://github.com/schultek/jaspr/blob/main/packages/jaspr_cli/lib/src/commands/build_command.dart#L129)
• FlutterEmbedViewΛ͑FlutterWebΛը໘ʹຒΊࠐΉ͜ ͱՄೳɻԆಡΈࠐΈͳͷͰSEOతʹͳ͠
·ͱΊ • FlutterWebϦονͳίϯςϯπɺJasprදࣔͱSEOॏࢹ ͷܰྔͳίϯςϯπͱ͍͍͚͕ͬͨྑͦ͞͏ • Flutter༻ʹॻ͍ͨίʔυΛJapsrͰϏϧυ͢ΔͨΊͷઃܭ৭ʑ ·͍͠🤔 ࠓޙ͕ٞͳ͞ΕΔͱخ͍͠Ͱ͢… • ݸਓతʹBLoCύλʔϯͰਐΊ͍ͯ͘༧ఆͰ͢
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ X: @aqhayami Zenn: @hyshu