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
310
Claude Agent SDK を使ってみよう
hyshu
0
2.2k
Flutterと Vibe Coding で個人開発!
hyshu
1
400
BLoCパターンとflutter_bloc
hyshu
0
160
Melos x Pub Workspaces で 沢山のアプリとパッケージを管理するのに 苦労した話
hyshu
1
66
CanvasKitの描画の仕組みを調べてみる
hyshu
0
270
Other Decks in Programming
See All in Programming
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
230
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
870
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
510
仕様駆動開発の消費期限
watany
20
8.3k
Android CLI
fornewid
0
220
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
120
What's New in Android 2026
veronikapj
0
260
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
4.4k
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
930
Building a Meta Ray-Ban display app
akkeylab
0
150
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
520
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
330
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
170
YesSQL, Process and Tooling at Scale
rocio
174
15k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
WENDY [Excerpt]
tessaabrams
11
39k
Site-Speed That Sticks
csswizardry
13
1.4k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Practical Orchestrator
shlominoach
191
12k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
770
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
The Cost Of JavaScript in 2023
addyosmani
55
10k
How to Ace a Technical Interview
jacobian
281
24k
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