Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
12k
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.8k
Hasura.io RDBをサクサク作る方法はARやO/RMだけじゃなくなりました/hasura-io
okunokentaro
5
690
コードには型アノテーションよりも要件アノテーションを増やせ!/harajukuts2
okunokentaro
14
6.5k
10年と3ヶ月でWebサービスを作った話 / Piyogrammer Conference 2021
okunokentaro
2
1.1k
Other Decks in Technology
See All in Technology
AWSを使う上で最低限知っておきたいセキュリティ研修を社内で実施した話 ~みんなでやるセキュリティ~
maimyyym
2
1.8k
Fashion×AI「似合う」を届けるためのWEARのAI戦略
zozotech
PRO
2
850
LLM-Readyなデータ基盤を高速に構築するためのアジャイルデータモデリングの実例
kashira
0
270
多様なデジタルアイデンティティを攻撃からどうやって守るのか / 20251212
ayokura
0
490
30分であなたをOmniのファンにしてみせます~分析画面のクリック操作をそのままコード化できるAI-ReadyなBIツール~
sagara
0
180
5分で知るMicrosoft Ignite
taiponrock
PRO
0
400
子育てで想像してなかった「見えないダメージ」 / Unforeseen "hidden burdens" of raising children.
pauli
2
290
2025-12-18_AI駆動開発推進プロジェクト運営について / AIDD-Promotion project management
yayoi_dd
0
110
マイクロサービスへの5年間 ぶっちゃけ何をしてどうなったか
joker1007
15
6.6k
SQLだけでマイグレーションしたい!
makki_d
0
810
.NET 10の概要
tomokusaba
0
120
AWS運用を効率化する!AWS Organizationsを軸にした一元管理の実践/nikkei-tech-talk-202512
nikkei_engineer_recruiting
0
110
Featured
See All Featured
For a Future-Friendly Web
brad_frost
180
10k
Building Applications with DynamoDB
mza
96
6.8k
Code Reviewing Like a Champion
maltzj
527
40k
[SF Ruby Conf 2025] Rails X
palkan
0
540
Practical Orchestrator
shlominoach
190
11k
Visualization
eitanlees
150
16k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
Raft: Consensus for Rubyists
vanstee
141
7.2k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Bash Introduction
62gerente
615
210k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
286
14k
The Cult of Friendly URLs
andyhume
79
6.7k
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