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
Agata Naomichi
August 02, 2018
Programming
2k
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.5k
全員アーキテクトで挑む、 巨大で高密度なドメインの紐解き方
agatan
9
24k
チームで開発し事業を加速するための"良い"設計の考え方 @ サポーターズCoLab 2025-07-08
agatan
2
700
医療系スタートアップが経験した 認知負荷問題の症状分析と処方箋 チーム分割による認知負荷の軽減 / Cognitive Load Busters
agatan
2
630
専門性の高い領域をいかに開発し、 テストするか / How to test and develop complicated systems with Domain Experts!
agatan
3
930
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
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
180
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
130
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
0
210
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
520
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
190
yield再入門 #phpcon
o0h
PRO
0
350
共通化で考えるべきは、実装より公開する型だった
codeegg
0
240
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
150
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.5k
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
120
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
2
480
Featured
See All Featured
Visualization
eitanlees
152
17k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
870
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
56k
Un-Boring Meetings
codingconduct
0
350
Code Review Best Practice
trishagee
74
20k
Paper Plane (Part 1)
katiecoart
PRO
1
9.7k
Raft: Consensus for Rubyists
vanstee
141
7.6k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
390
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ͷΑ͏ͳΞϓϩʔνʹ͍ͭͯͲ͏ࢥ͍ͬͯ·͔͢ʁʁ