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.6k
大規模開発に打ち勝つためのマルチパラダイム / 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
4
2.1k
Podcastを継続する技術 / refactoradio-240119
okunokentaro
1
150
Webアプリケーション設計の第一歩は ディレクトリの整理から / Encraft 1
okunokentaro
33
9.8k
JSONとJSON Schemaを改めて理解する / tokyo_study
okunokentaro
9
2.1k
それでもどうしてRecoilを使うのか / Harajuku.ts Meetup Recoil
okunokentaro
19
5.3k
TypeScriptは10年でこんなに進化しました / TechFeed Experts Night 11
okunokentaro
6
1.6k
Hasura.io RDBをサクサク作る方法はARやO/RMだけじゃなくなりました/hasura-io
okunokentaro
5
610
コードには型アノテーションよりも要件アノテーションを増やせ!/harajukuts2
okunokentaro
13
6.1k
10年と3ヶ月でWebサービスを作った話 / Piyogrammer Conference 2021
okunokentaro
2
980
Other Decks in Technology
See All in Technology
20240906_JAWS_Yamanashi_#1_leap_beyond_the_AWS_all_certifications
tsumita
1
280
アプリをリリースできる状態に保ったまま 段階的にリファクタリングするための 戦略と戦術 / Strategies and tactics for incremental refactoring
yanzm
6
900
不動産売買取引におけるAIの可能性とプロダクトでのAI活用
zabio3
0
260
20240911_New_Relicダッシュボード活用例
speakerdeckfk
0
100
エンジニア視点で見る、 組織で運用されるデザインシステムにするには
shunya078
1
300
contenteditableと向き合う
kikuchikakeru
2
300
リアルお遍路+SORACOM IoT
ozk009
1
130
Evolving DevOps Teams and Flexible Organizational Culture
kakehashi
1
260
DroidKaigi 2024 たすけて!ViewModel
mhidaka
5
640
20240912 JJUGナイトセミナー
mii1004
0
130
あなたの知らないiOS開発の世界
recruitengineers
PRO
3
110
忙しい人のためのLangGraph概要まとめ
__ymgc__
1
160
Featured
See All Featured
Become a Pro
speakerdeck
PRO
22
4.9k
Rebuilding a faster, lazier Slack
samanthasiow
78
8.6k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.4k
For a Future-Friendly Web
brad_frost
174
9.3k
4 Signs Your Business is Dying
shpigford
179
21k
Building Applications with DynamoDB
mza
90
6k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
8.9k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.4k
Into the Great Unknown - MozCon
thekraken
29
1.4k
Six Lessons from altMBA
skipperchong
26
3.3k
Raft: Consensus for Rubyists
vanstee
135
6.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
26
5.1k
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