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
大規模開発に打ち勝つためのマルチパラダイム / Beat with multi paradigms
Search
OKUNOKENTARO
June 16, 2018
Technology
4
1.8k
大規模開発に打ち勝つためのマルチパラダイム / Beat with multi paradigms
2018/6/16 ng-japan 2018にて発表した資料です。
OKUNOKENTARO
June 16, 2018
Tweet
Share
More Decks by OKUNOKENTARO
See All by OKUNOKENTARO
トレタO/X アーキテクチャ移行記 Next.js App Router化への道のり / TORETA TECH UPDATE 1
okunokentaro
5
11k
Podcastを継続する技術 / refactoradio-240119
okunokentaro
1
190
Webアプリケーション設計の第一歩は ディレクトリの整理から / Encraft 1
okunokentaro
34
10k
JSONとJSON Schemaを改めて理解する / tokyo_study
okunokentaro
9
2.4k
それでもどうしてRecoilを使うのか / Harajuku.ts Meetup Recoil
okunokentaro
19
5.6k
TypeScriptは10年でこんなに進化しました / TechFeed Experts Night 11
okunokentaro
6
1.7k
Hasura.io RDBをサクサク作る方法はARやO/RMだけじゃなくなりました/hasura-io
okunokentaro
5
680
コードには型アノテーションよりも要件アノテーションを増やせ!/harajukuts2
okunokentaro
14
6.4k
10年と3ヶ月でWebサービスを作った話 / Piyogrammer Conference 2021
okunokentaro
2
1.1k
Other Decks in Technology
See All in Technology
新卒(ほぼ)専業Kagglerという選択肢
nocchi1
1
2.4k
モダンな現場と従来型の組織——そこに生じる "不整合" を解消してこそチームがパフォーマンスを発揮できる / Team-oriented Organization Design 20250825
mtx2s
6
650
「AI2027」を紐解く ― AGI・ASI・シンギュラリティ
masayamoriofficial
0
110
コスト削減の基本の「キ」~ コスト消費3大リソースへの対策 ~
smt7174
2
190
Webアクセシビリティ入門
recruitengineers
PRO
2
430
人を動かすことについて考える
ichimichi
2
330
Yahoo!広告ビジネス基盤におけるバックエンド開発
lycorptech_jp
PRO
1
280
会社にデータエンジニアがいることでできるようになること
10xinc
9
1.6k
知られざるprops命名の慣習 アクション編
uhyo
11
2.6k
TypeScript入門
recruitengineers
PRO
25
7.7k
Devinを使ったモバイルアプリ開発 / Mobile app development with Devin
yanzm
0
190
DeNA での思い出 / Memories at DeNA
orgachem
PRO
3
1.7k
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
96
6.2k
We Have a Design System, Now What?
morganepeng
53
7.7k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Building Adaptive Systems
keathley
43
2.7k
The Art of Programming - Codeland 2020
erikaheidi
55
13k
The Pragmatic Product Professional
lauravandoore
36
6.8k
A designer walks into a library…
pauljervisheath
207
24k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
A better future with KSS
kneath
239
17k
KATA
mclloyd
32
14k
Code Reviewing Like a Champion
maltzj
525
40k
Making Projects Easy
brettharned
117
6.3k
Transcript
େن։ൃʹଧͪউͭͨΊͷ ϚϧνύϥμΠϜ +VO OHKBQBO !PLVOPLFOUBSP
୭ w Ԟݡଠ!PLVOPLFOUBSP w גࣜձࣾϐΫηϧάϦ ο υ w OHKBQBO
$PEF(SJE ϑϩϯτΤϯυʹؔΘΔਓʑͷΨΠυ ֹ݄ԁʢ੫ࠐԁʣ ΫϨδοτΧʔυɺ1BZ1BMͰͷ͓ࢧ͍ͷ߹ؒͷແྉߪಡظؒ
ࣥච IUUQTCPPLJNQSFTTDPKQCPPLT
͋Β͢͡
͜͜·Ͱͷ͋Β͢͡ IUUQTTQFBLFSEFDLDPNPLVOPLFOUBSP
ݱࡏͷঢ়گ w ૯ߦ ߦ ʢۭߦɺ ςε τίʔ υؚΉʣ w
૯ϑΝΠϧ ϑΝΠϧ ʢςε τؚΉʣ w ։ൃମ੍ w ϑϩϯ τΤϯ υ ɾ ΤϯδχΞਓ
ʑɺ ͕ग़ w ઃܭͲ͏͢Δ͔ w ίʔ υͷॏෳ͕සൟʹੜ·ΕΔͲ͏͢Δ͔ w ͦͯ͠ԿมΘΔ༷ॻʜ
ղܾͷࠔ͞ w ͋ΒΏΔঢ়گΛΓӽ͑Δਖ਼ղɺ ͻͱͭͰͳ͍ w ਖ਼ղ͕ݟ͔ͭΒͳ͍͜ͱ͢Β͋Δ w ίʔ υΛॻ࣌ؒ͘Α Γɺ
ܾஅʹඅ͕࣌ؒ͢ଟ͍͋Δ w ܾஅ͕ɺ ޙͷޙչΛট͘ ͜ͱ͋Δ
Ҿ͖ग़͠Λଟ࣋ͭ͘ wʮલʹಡΜͩ͋ͷຊͰʙʯ wʮ͋ͷਓ͕͍ͯͨ͠ͷʙʯ wʮ࠷ۙ؍ͨΧϯϑΝϨϯεͩͱʙʯ
ϓϩάϥϛϯά ɾ ύϥμΠϜ
w ϓϩάϥ ϛϯάʹ͓͚Δֶͷ֓೦ɺ ղऍΛҙຯ͢Δ w खଓ͖ܕϓϩάϥ ϛϯά w ΦϒδΣΫ τࢦϓϩάϥ
ϛϯά w ؔܕϓϩάϥ ϛϯά ϓϩάϥϛϯά ɾ ύϥμΠϜ
w ࣌ͷਐߦ w ٕज़ͷਐาɺ ٕज़త੍͔Βͷղ์ w ࣏తͳࣄ w աڈͷผݴޠͷলͱվળ ͳͥݴޠෳ͋Δͷ͔
w +BWB4DSJQU w खଓ͖ܕɺ ΦϒδΣΫ τࢦͳͲ w 5ZQF4DSJQU w ؔܕɺ
δΣωϦ οΫͳͲ ͋ͳͨͷಘҙͱ͢Δݴޠ ʁ
w ύϥμΠϜ࣍ʑ ͱฤΈग़͞ΕΔ w ࣗͷۀ্ѻ͍ͬͯΔݴޠͷΈ͔͠৮͍ͬͯͳ͍ͱɺ ৽͍͠ύϥμΠϜʹ৮ΕΔػձ͕ͳ͍ w ੵۃతʹଞͷύϥμΠϜʹ৮ΕͯΈΔ w
ղܾͷҾ͖ग़͠Λ͛Δ ෆ׳ΕͳύϥμΠϜʹ৮ΕΔ
ϚϧνύϥμΠϜΛऔΓೖΕ࣮ͨྫ
w ֮͑ͨύϥμΠϜΛҋӢʹೖΕͳ͍ w खஈͷతԽආ͚Δ w ΤϯδχΞͷࣗݾຬʹͯ͠ͳΒͳ͍ w ࠓճϚϧνύϥμΠϜʹ͖͢ͱड़͍ͨΘ͚Ͱͳ͍ w ղܾʹ͚ͨൃΛॊೈʹ͢ΔͨΊͷΤΫααΠζͰ͋Δͱଊ͑Δ
w έʔεόΠέʔεͰͷۛຯ͕ඞཁ ҙ
w ܖʹΑΔઃܭɺ %FTJHOCZ$POUSBDU %C$ͱ w ͋Δϝ ιο υΛݺͿͱ͖ɺ ݺͿଆͰอূ͖͢ෆม݅ɺ ࣄલ͕݅ຬͨ͞ΕΔ
w Ͱ͋Ε w ͦͷϝ ιο υͷऴྃ࣌ʹอূ͖͢ෆม݅ɺ ࣄޙ͕݅ຬͨ͞ΕΔ w ࣮ͷޡΓͳͷ͔ɺ ϝ ιο υΛ͏ଆͷޡΓ͔ΛϋοΩ Ϧͤ͞Δ ܖϓϩάϥϛϯά
w console.assert() + unassertJOWBSJBOU͕Φεεϝ `npm i invariant` w ಋೖ؆୯ w
ܖϓϩάϥ ϛϯάͷશ࠶ݱͰ͖ͳ͍͕ ʮ࣮ͷޡΓͳͷ͔ɺ ϝ ιο υΛ͏ଆͷޡΓ͔ΛϋοΩ Ϧͤ͞Δʯ Λڗड͢ΔͨΊͷΞϓϩʔν w +BWB4DSJQU։ൃʹ͓͍ͯޚతϓϩάϥ ϛϯάɺ ૣظϦλʔϯͳͲ ࣝͱͯ͠༗༻ "OHVMBSͳΒ
w ԣஅతؔ৺ࣄ ʢΞεϖΫ τʣ Λڞ௨Խ࣮ͯ͠ߦ͢ΔͨΊͷϓϩάϥ ϛϯάख๏ w ༗໊ͳྫͱͯ͠ϩάग़ྗ w ͋ΒΏΔϞδϡʔϧɺ
͋ΒΏΔϝ ιο υͰϩάͷग़ྗ༗༻ w ͨͩ͠ɺ ͦΕΒͯ͢ʹϩάग़ྗ༻ͷίʔ υ͕ॻ͔Ε͍ͯͨΒ ຊʹॏཁͳॲཧΛࣔ͢ίʔ υ͕ຒΕͯ͠· ͏ w ෭࣍తͳॲཧԣஅతؔ৺ࣄΛ͠ຒΕͳ͍Α ͏ʹ͢Δख๏ ΞεϖΫ τࢦϓϩάϥϛϯά
w "OHVMBS։ൃऀʹ͓ͳ͡Έɺ %FDPSBUPSΛ͏ w Ϋϥε໊ϝ ιο υ໊ͷ্ʹ%FDPSBUPSͱͯͨؔ͠͠Λهड़ wʮϩάΛग़ྗͤΑʯ ͱ͍͏ॲཧ%FDPSBUPS෦ʹӅṭͭͭ͠ϩάग़ྗΛୡ w
%FDPSBUPSॲཧͰ 1SPYZύλʔϯ (P' Ϧ ϑ ϨΫγϣϯ ɾ ϓϩάϥ ϛϯάͳͲͷख๏͕༗༻ w ௐࢠʹͬͯΓ͗͢ΔͱͨͩͷಡԽ "OHVMBSͳΒ
࣮Ҋ݅Ͱͷྫ @KukerComponent() @Component({ selector: 'app-foo-bar', templateUrl: './component.html', styleUrls: ['./component.scss'], })
export class FooBarComponent { // ... } IUUQTHJUIVCDPNLSBTJNJSLVLFS
w ෭࡞༻Λ༻͍ͣʹҾ ʢೖྗʣ ͱΓ ʢग़ྗʣ ΛͬͨؔΛ ͍ͭ͘Έ߹ΘͤΔ͜ͱͰॲཧΛ࣮ݱ͢Δख๏ w +BWB4DSJQUɺ ୈҰڃؔΛѻ͑ΔͷͰ࠶ݱ͍͢͠
w ؔΛ͍ͭ͘Έ߹ΘͤΔͱ͍͏Ͱ3Y+4Ͱ͓ͳ͡Έ w ͪͳΈʹ3Y+4ϦΞΫςΟ ϒϓϩάϥ ϛϯάɺ એݴܕϓϩάϥ ϛϯά ͳͲͷύϥμΠϜͷ࣮ݱͰ͋Γɺ ؔܕϓϩάϥ ϛϯάͰͳ͍ ؔܕϓϩάϥϛϯά
w ܕΛύϥϝʔλͱͯ͠ѻ͏ ͜ͱͰɺ ಛఆͷܕʹґଘ͠ͳ͍࣮͕ՄೳʹͳΔ ϓϩάϥ ϛϯάख๏ w 5ZQF4DSJQUʹ͓͍ͯArray<T>Promise<T>ͳΒຖ͍ͬͯΔͣ δΣωϦ οΫ
ɾ ϓϩάϥϛϯά
w 0QUJPO&JUIFSͱ͍ͬͨؔܕݴޠ )BTLFMM 4DBMBͳͲ ͷٕज़Λഈआ w 0QUJPOͱ ʮ͕͋Δ͔ແ͍͔Λද͢ܕʯ w
&JUIFSͱ ʮͭͷ͏ ͪͲͪΒ͔Λද͢ܕʯ ؔܕ ɾ δΣωϦ οΫΛΈ߹Θͤͯ
w ௐࢠʹ͍͖ͬͯͳΓ ʮϞφ υΔͧʔʯ ͱ͔ݴ͍ग़ͤେମҾ͔ΕΔ w ؔܕݴޠ͕ԿΛࠀ͘͢0QUJPO&JUIFSΛ࣮͍ͯ͠Δͷ͔Λཧղ͢Δ w ྫ͑getOrElse()ͷߟ͑ํͳͲೲಘ͞Ε͘͢ಋೖ͍͢͠ ։ൃνʔϜͷཧղΛಘΔ
w ٸͳ༷มߋͰɺ 5ZQF4DSJQUͷܕ͚͚ͩͰݫ͍͠Օॴ͕Ͱ͖ͯͨͱ͖ w Either<A, B>ܕͰॲཧΛେ෯ʹม͑ͣʹରԠͰ͖ͳ͍ͩΖ͏͔ w 5ZQF4DSJQUʹstrictNullChecks͕͋Δ͕ສશͰͳ͍ w JGจΛڧཁͯ͘͠
Δ͋ͨΓ w undefined, nullରࡦͷΞϓϩʔνͱͯ͠ࣄΛ͓ͬͯ͘ ͱΑ͍ ٸసʹඋ͑Δ
ϑϩϯ τΤϯ υ ɾ ΤϯδχΞͷ ଞݴޠͱͷ͖߹͍ํ
wʮϑϩϯ τΤϯ υ ɾ ΤϯδχΞ͔ͩΒ+BWB4DSJQU 5ZQF4DSJQUֶͳ͘ ͪΌʜʯ wʮ)5.-$44Βͳ͍ͱʜʯ
w ͪΖΜͦΕେࣄ w ҰํͰɺ ΤϯδχΞͱͯ͠ͷࢹΛ͛Δ͜ͱେࣄ ϑϩϯ τΤϯ υ ɾ ΤϯδχΞͱ ͯ͠
wʮ͜ͷݴޠͰ+4Ͱى͜ Γ͕ͪͳΛ͜͏ͬͯղܾͯ͠Δͷ͔ʯ w ˠ+4ͰࣅͨΑ ͏ͳΞϓϩʔνͰղܾ͍ͯ͠ΔϥΠ ϒϥ Ϧ͕͋Δ ʂ
wʮ࠷৽ͷݴޠʹ͋ͬͨ˓˓ߏจɺ +4ʹཉ͍͠ͳʔʯ w ˠ5$ͷϓϩϙʔβϧʹ͏ग़ͯΔ ʂ w ͱ͍ͬͨɺ +BWB4DSJQUք۾ΩϟονΞοϓʹ͓͚ΔΞϯςφͷຊ͕૿͑ ൃݟ͕༰қʹͳΓɺ ڻ͔ͳ͘ ͯࡁΉ ଞݴޠֶशͷར
w ΩϟονΞοϓͷযΓɺ ྲྀߦϥΠ ϒϥ Ϧͷܯռɺ ϑ ϨʔϜϫʔΫϓϩϨεͷউഊʜ w ͜Εࠣࡉͳ͜ͱ w
߄ͯΔ͜ͱͳ͍ w ຊ࣭తͳղܾखஈԿͳͷ͔Λߟ͑Δ w ྺ࢙ʹֶͿ w ύϥμΠϜʹֶͿ ߄ͯͳ͍ͨΊʹ
5IBOLZPV