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
Mint: Language Level Support for SPAs
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Agata Naomichi
August 02, 2018
Programming
2.1k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Mint: Language Level Support for SPAs
Agata Naomichi
August 02, 2018
More Decks by Agata Naomichi
See All by Agata Naomichi
Why Kotlin? 電子カルテを Kotlin で開発する理由 / Why Kotlin? at Henry
agatan
2
9.6k
全員アーキテクトで挑む、 巨大で高密度なドメインの紐解き方
agatan
9
24k
チームで開発し事業を加速するための"良い"設計の考え方 @ サポーターズCoLab 2025-07-08
agatan
2
720
医療系スタートアップが経験した 認知負荷問題の症状分析と処方箋 チーム分割による認知負荷の軽減 / Cognitive Load Busters
agatan
2
640
専門性の高い領域をいかに開発し、 テストするか / How to test and develop complicated systems with Domain Experts!
agatan
3
940
Henry のサーバーサイドアーキテクチャ 狙いと課題 2022.08.25 / Server-Side Architecture at Henry, Inc.
agatan
3
6.1k
The Web Conference 2020 - Participation Report
agatan
1
760
○○2vec 再考
agatan
1
4.7k
Improving "People You May Know" on Directed Social Graph
agatan
4
2.8k
Other Decks in Programming
See All in Programming
不幸な GC
chencmd
0
830
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
7.9k
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
290
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
740
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
230
リアルな遅延を測る仕様
kota_yata
1
130
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
120
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
520
AWS Transform Customによる Spring Boot 2.xから4.xへのVerUp
satoshi256kbyte
2
110
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
130
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.2k
仕様駆動開発の消費期限
watany
20
9.1k
Featured
See All Featured
The SEO Collaboration Effect
kristinabergwall1
1
540
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Building an army of robots
kneath
306
46k
Why Our Code Smells
bkeepers
PRO
340
58k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
420
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
550
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Transcript
©2018 Wantedly, Inc. Mint Language Level Support for SPA 2.Aug.2018
- Naomichi Agata
©2018 Wantedly, Inc. agatan Software engineer at Wantedly, Inc. Server
side + Machine learning Github Twitter @agatan @agatan_
©2018 Wantedly, Inc. Single Page Application Ͳ͏࡞Γ·͔͢ʁ
©2018 Wantedly, Inc. React Vue Angular
©2018 Wantedly, Inc. React Redux Vue react-router universal-router Angular styled-components
webpack-serve Typescript Immutable.js
©2018 Wantedly, Inc. React Redux Vue react-router universal-router Angular styled-components
webpack-serve Typescript Immutable.js CSS Modules flow prettier preact redux-saga redux-thunk npm esdoc webpack parcel jest mocha jasmin hyperapp Vuex
©2018 Wantedly, Inc. https://www.mint-lang.com/
©2018 Wantedly, Inc. Mint w IUUQTNJOUMBOHDPN w front-end web ͷͨΊͷϓϩάϥϛϯάݴޠ
w ੩తܕݕࠪ w SPAsͷͨΊͷ༷ʑͳػೳΛݴޠϨϕϧͰαϙʔτ • Reusable components • Styling • Routing • Global and local state handling • Synchronous and asynchronous computations that might fail
©2018 Wantedly, Inc. Hello, world! DPNQPOFOU.BJO\ GVOSFOEFS)UNM\ EJW \l)FMMP XPSMEz^
EJW ^ ^
©2018 Wantedly, Inc. Styling with CSS DPNQPOFOU.BJO\ TUZMFCVUUPO\ CBDLHSPVOESFE DPMPSXIJUF
CPSEFS ^ GVOSFOEFS)UNM\ CVUUPOCVUUPO \$MJDL.&^ CVUUPO ^ ^ Style ఆٛ͞Εͨcomponentsͷ scopeʹด͡Δ
©2018 Wantedly, Inc. Routing SPVUFT\ \ "QQMJDBUJPOTFU1BHF JOEFY ^
VTFSTJE JE/VNCFS \ EP\ "QQMJDBUJPOTFU1BHF TIPX "QQMJDBUJPOMPBE6TFS JE ^ ^ ^
©2018 Wantedly, Inc. Components DPNQPOFOU5FTU\ QSPQFSUZTJ[F4USJOHTNBMM QSPQFSUZDPMPS4USJOHSFE GVOSFOEFS)UNM\ EJW
\DPMPS^ \TJ[F^ EJW ^ ^ React.Component property Λ࣋ͯΔ render ؔΛ࣋ͭ
©2018 Wantedly, Inc. Passing properties DPNQPOFOU.BJO\ GVOSFOEFS)UNM\ 5FTUDPMPSCMVFTJ[FCJH ^ ^
͔Βࢠͷ property ΛͤΔ
©2018 Wantedly, Inc. JavaScript interpolation DPNQPOFOU.BJO\ GVOIBOEMF$MJDL FWFOU)UNM&WFOU 7PJE\ ABMFSU
)FMMP A ^ GVOSFOEFS)UNM\ EJWPO$MJDL\IBOEMF$MJDL^\$MJDLUPBMFSU^EJW ^ ^
©2018 Wantedly, Inc. Anonymous functions DPNQPOFOU(SFFUFS\ GVOSFOEFS)UNM\ EJWPO$MJDL\ FWFOU)UNM&WFOU 7PJE\EP\%FCVHMPH
)FMMP ^^^ \$MJDL.F^ EJW ^ ^
©2018 Wantedly, Inc. Store TUPSF$PVOUFS4UPSF\ TUBUFDPVOUFS/VNCFS GVOJODSFNFOU7PJE\ OFYU\DPVOUFSDPVOUFS ^ ^
GVOEFDSFNFOU7PJE\ OFYU\DPVOUFSDPVOUFS^ ^ ^ FluxͷStore
©2018 Wantedly, Inc. Connect connect Ͱ component ͱ store Λͭͳ͙
DPNQPOFOU.BJO\ DPOOFDU$PVOUFSFYQPTJOH\DPVOU JODSFNFOU^ GVOSFOEFS)UNM\ EJW \/VNCFSUP4USJOH DPVOU ^ CVUUPOPO$MJDL\ FWFOU)UNM&WFOU 7PJE\ JODSFNFOU ^^\ ^CVUUPO EJW ^ ^
©2018 Wantedly, Inc. Testing TVJUF.BJO\ UFTU(SFFUT.JOU\ XJUI5FTU)UNM\ .BJO cTUBSU
cBTTFSU5FYU0G EJW )FMMP.JOU ^ ^ ^
©2018 Wantedly, Inc. dev-server ࣗಈίϯύΠϧ ܕݕࠪɺsyntax error ͷදࣔ
©2018 Wantedly, Inc. ෦࣮ Ὂ ίϯύΠϥͳͲCrystalͰ࣮͞Ε͍ͯΔ Ὂ ίϯύΠϧ͢ΔͱReact ࣗલflux ʹͳΔ
Ὂ component → React.Component Ὂ Ttore → global variableʹ
©2018 Wantedly, Inc. Component before DPNQPOFOU.BJO\ DPOOFDU$PVOUFSFYQPTJOH\DPVOU JODSFNFOU^ GVOSFOEFS)UNM\ EJW
\/VNCFSUP4USJOH DPVOU ^ CVUUPOPO$MJDL\ FWFOU)UNM&WFOU 7PJE\ JODSFNFOU ^^\ ^CVUUPO EJW ^ ^
©2018 Wantedly, Inc. Component after DMBTT.BJOFYUFOET$PNQPOFOU\ HFUDPVOU \SFUVSO$PVOUFSDPVOU^ JODSFNFOU QBSBNT
\SFUVSO$PVOUFSJODSFNFOU QBSBNT ^ DPNQPOFOU8JMM6ONPVOU \ $PVOUFS@VOTVCTDSJCF UIJT ^ DPNQPOFOU%JE.PVOU \ $PVOUFS@TVCTDSJCF UIJT ^ SFOEFS \ SFUVSO@DSFBUF&MFNFOU EJW \^ </VNCFSUP4USJOH UIJTDPVOU @DSFBUF&MFNFOU CVUUPO \ PO$MJDL FWFOU FWFOU \ SFUVSOUIJTJODSFNFOUCJOE UIJT ^ @OPSNBMJ[F&WFOU FWFOU ^ <A A> > ^ ^
©2018 Wantedly, Inc. Store before & after DPOTU$PVOUFSOFX DMBTTFYUFOET4UPSF\ DPOTUSVDUPS
\ TVQFS UIJTTUBUF\ DPVOU ^ ^ HFUDPVOU \SFUVSOUIJTTUBUFDPVOU^ JODSFNFOU \ SFUVSOOFX1SPNJTF @SFTPMWF \ UIJTTFU4UBUF @VQEBUF UIJTTUBUF OFX3FDPSE \ DPVOUUIJTDPVOU ^ @SFTPMWF ^ ^ ^ $PVOUFS@@EJTQMBZ/BNFA$PVOUFSA TUPSF$PVOUFS\ TUBUFDPVOU/VNCFS GVOJODSFNFOU 7PJE\ OFYU\DPVOUDPVOU ^ ^ ^
©2018 Wantedly, Inc. ඪ४ϥΠϒϥϦ Ὂ IUUQTHJUIVCDPNNJOUMBOHNJOUDPSF Ὂ Maybe, Promise, Result,
etc. Ὂ ΄ͱΜͲjs interpolation NPEVMF"SSBZ\ GVOTJ[F BSSBZ"SSBZ B /VNCFS\ ABSSBZMFOHUIA ^ ^ NPEVMF+TPO\ GVOQBSTF JOQVU4USJOH .BZCF 0CKFDU \ A \ USZ\ SFUVSOOFX+VTU +40/QBSTF JOQVU ^DBUDI FSSPS \ SFUVSOOFX/PUIJOH ^ ^ A ^ ^
©2018 Wantedly, Inc. ײͱ·ͱΊ Ὂ ͷ͘͢͝Ϧον Ὂ ݴޠػೳͯΜ͜Γͩ͠ɺπʔϧతͳػೳ๛ Ὂ dev-server,
formatter, etc. Ὂ ෳࡶͳ SPAs Λ࡞ΔΞϓϩʔνͷҰͭͱ͓ͯ͘͢͠͝͠Ζ͍ͳͱࢥ͍·ͨ͠ Ὂ ElmΛ͞ΒʹSPAsಛԽͤͨ͞Α͏ͳݴޠ Ὂ ࣮SPAsॻ͍ͨ͜ͱͳ͍Ͱ͢ Ὂ JSerͷօ༷ͷײΛௌ͖ͨͯ͘ൃද͠·ͨ͠ Ὂ ElmmintͷΑ͏ͳΞϓϩʔνʹ͍ͭͯͲ͏ࢥ͍ͬͯ·͔͢ʁʁ