Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Jasprが凄い話
Search
Hayami Shuhei
March 01, 2025
Programming
420
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
330
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
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
240
Laravelのアプリケーションをどこにデプロイするか #ツナギメオフライン.9
akase244
0
130
アクセシビリティから考える情報設計
high_g_engineer
0
360
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
140
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
140
Can LLMs Replicate 4 Years of Compose Migration? Exploring the boundaries of automation with 279 XML files from a real product
makun
0
130
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
1.1k
AIエージェント時代のコードレビューを設計する
nogu66
6
2.6k
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
110
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
140
How I Stole PSI from Android Studio - DroidKaigi2026
worker8
0
110
Security issues being discussed on Web Platforms
petamoriken
0
820
Featured
See All Featured
Navigating Weather and Climate Data
rabernat
0
520
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
4
640
Optimizing for Happiness
mojombo
378
71k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
WENDY [Excerpt]
tessaabrams
13
39k
Side Projects
sachag
456
43k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.7k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Technical Leadership for Architectural Decision Making
baasie
3
560
Practical Orchestrator
shlominoach
191
12k
For a Future-Friendly Web
brad_frost
183
10k
Paper Plane
katiecoart
PRO
3
53k
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