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.7k
大規模開発に打ち勝つためのマルチパラダイム / 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
9.6k
Podcastを継続する技術 / refactoradio-240119
okunokentaro
1
160
Webアプリケーション設計の第一歩は ディレクトリの整理から / Encraft 1
okunokentaro
34
9.9k
JSONとJSON Schemaを改めて理解する / tokyo_study
okunokentaro
9
2.2k
それでもどうしてRecoilを使うのか / Harajuku.ts Meetup Recoil
okunokentaro
19
5.4k
TypeScriptは10年でこんなに進化しました / TechFeed Experts Night 11
okunokentaro
6
1.7k
Hasura.io RDBをサクサク作る方法はARやO/RMだけじゃなくなりました/hasura-io
okunokentaro
5
620
コードには型アノテーションよりも要件アノテーションを増やせ!/harajukuts2
okunokentaro
14
6.2k
10年と3ヶ月でWebサービスを作った話 / Piyogrammer Conference 2021
okunokentaro
2
1k
Other Decks in Technology
See All in Technology
[FOSS4G 2024 Japan LT] LLMを使ってGISデータ解析を自動化したい!
nssv
1
210
Shopifyアプリ開発における Shopifyの機能活用
sonatard
4
250
Amplify Gen2 Deep Dive / バックエンドの型をいかにしてフロントエンドへ伝えるか #TSKaigi #TSKaigiKansai #AWSAmplifyJP
tacck
PRO
0
370
TypeScript、上達の瞬間
sadnessojisan
46
13k
元旅行会社の情シス部員が教えるおすすめなre:Inventへの行き方 / What is the most efficient way to re:Invent
naospon
2
330
Platform Engineering for Software Developers and Architects
syntasso
1
510
Security-JAWS【第35回】勉強会クラウドにおけるマルウェアやコンテンツ改ざんへの対策
4su_para
0
170
マルチプロダクトな開発組織で 「開発生産性」に向き合うために試みたこと / Improving Multi-Product Dev Productivity
sugamasao
1
300
誰も全体を知らない ~ ロールの垣根を超えて引き上げる開発生産性 / Boosting Development Productivity Across Roles
kakehashi
1
220
フルカイテン株式会社 採用資料
fullkaiten
0
40k
100 名超が参加した日経グループ横断の競技型 AWS 学習イベント「Nikkei Group AWS GameDay」の紹介/mediajaws202411
nikkei_engineer_recruiting
1
170
AWS Media Services 最新サービスアップデート 2024
eijikominami
0
190
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
120
The Cost Of JavaScript in 2023
addyosmani
45
6.7k
How STYLIGHT went responsive
nonsquared
95
5.2k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
Unsuck your backbone
ammeep
668
57k
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Making the Leap to Tech Lead
cromwellryan
133
8.9k
A Tale of Four Properties
chriscoyier
156
23k
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