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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
240
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
190
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
150
巨大モノリシックアプリ モダン化大作戦
ktcryomm
0
930
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
2.8k
デプロイ直後のレイテンシスパイクを調べたら、 Railsの仕様にたどり着いた
nhsykym
0
120
信頼性の目標を誰も求めてない
shubox
0
500
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
790
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
150
アクセシビリティから考える情報設計
high_g_engineer
0
360
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
200
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
The Curse of the Amulet
leimatthew05
2
14k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Ethics towards AI in product and experience design
skipperchong
2
370
How to Ace a Technical Interview
jacobian
281
24k
My Coaching Mixtape
mlcsv
0
310
Become a Pro
speakerdeck
PRO
31
6.2k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
Odyssey Design
rkendrick25
PRO
2
800
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
790
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