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
モダンWebシステム開発
Search
Naoya Ito
April 21, 2015
Technology
132
20k
モダンWebシステム開発
Qcon Tokyo2015 での発表スライド
Naoya Ito
April 21, 2015
Tweet
Share
More Decks by Naoya Ito
See All by Naoya Ito
Haskell を武器にして挑む競技プログラミング ─ 操作的思考から意味モデル思考へ
naoya
8
2.6k
Haskell でアルゴリズムを抽象化する / 関数型言語で競技プログラミング
naoya
21
7.5k
Functional TypeScript
naoya
18
6.6k
TypeScript 関数型スタイルでバックエンド開発のリアル
naoya
76
37k
シェルの履歴とイクンリメンタル検索を使う
naoya
16
6.6k
20230227-engineer-type-talk.pdf
naoya
91
84k
関数型プログラミングと型システムのメンタルモデル
naoya
63
110k
TypeScript による GraphQL バックエンド開発
naoya
29
37k
フロントエンドのパラダイムを参考にバックエンド開発を再考する / TypeScript による GraphQL バックエンド開発
naoya
67
25k
Other Decks in Technology
See All in Technology
Claude Cowork Plugins を読む - Skills駆動型業務エージェント設計の実像と構造
knishioka
0
190
「使いにくい」も「運用疲れ」も卒業する UIデザイナーとエンジニアが創る持続可能な内製開発
nrinetcom
PRO
1
760
AWS CDK の目玉新機能「Mixins」とは / cdk-mixins
gotok365
2
290
AIエンジニア Devin と歩む、自律型運用プロセスの構築
a2ito
0
280
APMの世界から見るOpenTelemetryのTraceの世界 / OpenTelemetry in the Java
soudai
PRO
0
200
失敗できる意思決定とソフトウェアとの正しい歩き方_-_変化と向き合う選択肢/ Designing for Reversible Decisions
soudai
PRO
8
1.3k
Vertex AI Agent Engine で学ぶ「記憶」の設計
tkikuchi
0
110
Data Hubグループ 紹介資料
sansan33
PRO
0
2.8k
Devinを導入したら予想外の人たちに好評だった
tomuro
0
460
opsmethod第1回_アラート調査の自動化にむけて
yamatook
0
330
1 年間の育休から時短勤務で復帰した私が、 AI を駆使して立ち上がりを早めた話
lycorptech_jp
PRO
0
190
【2026年版】生成AIによる情報システムへのインパクト
taka_aki
0
190
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
Building Applications with DynamoDB
mza
96
6.9k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
72k
SEO for Brand Visibility & Recognition
aleyda
0
4.3k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
82
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.3k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The Cost Of JavaScript in 2023
addyosmani
55
9.7k
sira's awesome portfolio website redesign presentation
elsirapls
0
170
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
140
WCS-LA-2024
lcolladotor
0
470
Faster Mobile Websites
deanohume
310
31k
Transcript
Ϟμϯ8FCγεςϜ։ൃ /BPZB*UP ,BJ[FO1MBUGPSN *OD 2$PO50,:0
,BJ[FO1MBUGPSN͔Βདྷ·ͨ͠
ຊۀᲔ৫ϚωδϝϯτͰ͢ ϚΠφϏͰϚωδϝϯ τஊٛ࿈ࡌத
ຊͷͷྲྀΕ • ࡢࠓݸਓతʹؾʹͳͬͨΞʔΩςΫνϟɾ ύϥμΠϜ • ͦΕΒ֓؍ΛݟͭͭʮϞμϯ8FCγες ϜʯͷΛߟ ڞ௨ͨ͠Կ͔͕ݟ͍ͩͤ Δ͔ɺ൱͔
Ϟμϯʮεέʔϥϒϧʯͷཁ • ΫϥυωΠςΟϒ – յΕ͘͢ɺ'BJMVSF͘͢͠ɺԣʹεέʔ ϧ
Πϯϑϥ • *OGSBTUSVDUVSFBT$PEF – $IFG "OTJCMF • *NNVUBCMF*OGSBTUSVDUVSF • ίϯςφܕΫϥυ
– %PDLFS • એݴతͳγεςϜཧπʔϧ – 5FSSBGPSN 3PBEXPSLFS
ΞϓϦέʔγϣϯ • .JDSPTFSWJDFT • 3FBDU • 'VODUJPOBM3FBDUJWF1SPHSBNNJOH
݁ͱͯ͠Կ͕ݴ͍͍͔ͨ • ࡢࠓͷΞʔΩςΫνϟύϥμΠϜͷഎޙʹ͋ ΔςʔϚʮঢ়ଶʯʮґଘؔʯͱͲ͏ઓ͏ ͔ ͕ɺଟ͍ • ྑ͍ύϥμΠϜɺΞʔΩςΫνϟͦ͜ʹճ Λ͍࣋ͬͯΔ
Ϟμϯͱ͍͏͔ɺܭࢉػ ͷྺ࢙͕ͣͬͱͦ͏͍͏ ͷ͔
*OGSBTUSVDUVSFBT$PEF
*OGSBTUSVDUVSFBT$PEF • ϓϩϏδϣχϯάϑϨʔϜϫʔΫ – $IFG – 1VQQFU – "OTJCMF
αʔόʔͷʮঢ়ଶʯ ґଘؔ • ͋Δೲ͞Εͨ3BJMTαʔόʔ – 9݄9ʹ%/4ΩϟογϡΛઃఆͨ͠ – :݄:ʹϓϩηεΛνϡʔχϯάͨ͠ –
;݄;ʹSVCZͷόʔδϣϯΛ্͛ͨ – ŋŋŋ ͍Ζ͍Ζ܁Γฦ͠ • ͜ͷαʔόʔʹৼΓʹΞϓϦΛσϓϩΠ – Ռͨͯ͠σϓϩΠਖ਼͘͠ऴΘΔͷ͔
$IFG αʔόʔͷ͋Δ͖ঢ়ଶ Λએݴతʹهड़͢Δ
ঢ়ଶ͕ίʔυʹͳΕ͋Δ͖ঢ়ଶ ͷऩଋࣗಈԽͰ͖Δ
ঢ়ଶΛهड़͢Δ • ϓϩϏδϣχϯά'8ΛͲ͏ݟΔ͔ – ηοτΞοϓͷࣗಈԽ ŋŋŋ͜Εݶఆత – ຊ࣭ŋŋŋঢ়ଶͷ એݴతͳ هड़ ͦΕ·Ͱهड़͞Ε͍ͯͳ ͍͕ͨΊʹϓϩάϥϜ͔
ΒऔΓѻ͏͜ͱ͕Ͱ͖ͳ ͔ͬͨͷ
Ͳ͔ͬͰݟͨͧ • #VOEMFS – εΫϦϓτݴޠʹ͓͚ΔϥΠϒϥϦͷґଘؔ ͋Δ͋Δ
#VOEMFSҎલ • HFNJOTUBMMGPPCBS – άϩʔόϧͳྖҬʹΠϯετʔϧ – ΞϓϦέʔγϣϯͷಈ࡞ʹඞཁͳHFN͕Կ ͔໌ࣔతʹ͔Βͳ͍ – HFN͕૿͑Δ㱺ϑΝΠϧγεςϜΛίϐʔ ͢ΔҎ֎ͷํ๏ͰڥΛ࠶ݱ͢Δͷ͕ࠔʹ
#VOEMFS
#VOEMFSޙ • ঢ়ଶͷ એݴతͳ هड़ – ඞཁͳHFNΛ(FNpMFʹએݴ – ಉ͡ߏΛ࠶ݱՄೳʹ • ϕετϓϥΫςΟε – /PEFͷOQN
1FSMͷDQBOpMF
ͱ͍ɺ*OGSBTUSVDUVSFBT$PEF • ͜Ε·Ͱҙࣝ͞Εͯ͜ͳ͔ͬͨʮঢ়ଶʯʮґଘؔʯ Λهड़͢Δ • ႈੑ ͖ͱ͏ੑ – ͋Δૢ࡞Λճߦͬͯෳճߦͬͯ݁Ռ͕ಉ͡Ͱ͋Δ͜
ͱ 8JLJQFEJB – ಉ͡ߏͷϊʔυΛ͍ͭͰ࠶ੜ࢈Ͱ͖Δ ݁ՌɺյΕ͘͢ɺԣʹ εέʔϧ͢Δڥʹద߹
αʔόʔཧNFFUT(JU • αʔόʔͷঢ়ଶ͕ͯ͢ίʔυͰهड़Ͱ͖ ͨͳΒɺ(JUͰཧ͢Εྑ͍
ΠϯϑϥNFFUT(JUIVC ΠϯϑϥQVMMSFRVFTUɺίʔυϨϏϡʔ
ΠϯϑϥΛςετŋŋŋ4FSWFSTQFD
NBTUFSʹมߋ QVMMSFRVFTU͕ NFSHF͞ΕΔ $JSDMF$*͕ͦΕ Λݕͯ͠ɺίʔυ Λ(JU)VC͔Βऔಘ &$ʹରͯ͠ $JSDMF$*͔Β$IFG
ద༻ มߋ͕ө͞Ε Δ Πϯϑϥ$*ΛىʹσϦόϦʔ
3PBEXPSLFS hosted_zone "winebarrel.jp." do rrset "winebarrel.jp.", "A" do
ttl 300 resource_records( "127.0.0.1", "127.0.0.2" ) end rrset "winebarrel.jp.", "MX" do ttl 300 resource_records( "10 mx.winebarrel.jp", "10 mx2.winebarrel.jp" ) end end $ roadwork -‐-‐apply %/4ϨίʔυΛએݴతʹ هड़
5FSSBGPSN resource "aws_instance" "dev001_foobar_net" { ami
= "ami-‐xxxxxxxx" instance_type = "t2.micro" key_name = "xxxxxxxxxxxxxxxx" security_groups = ["sg-‐xxxxxxxx"] subnet_id = "subnet-‐xxxxxxxx" tags { Name = "dev001.foobar.net" Role = "common" Service = "operator" Env = "dev" } } $ terraform apply Πϯϑϥ Πϯελϯε ωοτϫʔΫ ߏΛએݴ తʹهड़
NBTUFSʹมߋ QVMMSFRVFTU͕ NFSHF͞ΕΔ $JSDMF$*͕ͦΕ Λݕͯ͠ɺίʔυ Λ(JU)VC͔Βऔಘ "84ʹରͯ͠ $JSDMF$*͔Β
SPBEXPSLFS UFSSBGPSNΛద༻ มߋ͕ө͞Ε Δ (JU)VCͰཧ͠$*Ͱద༻
એݴతͳγεςϜཧπʔϧ • 5FSSBGPSN3PBEXPSLFSŋŋŋϓϩϏδϣ χϯά'8ͱൃಉ͡ – ঢ়ଶΛએݴతʹهड़ – ݁ՌɺϓϩάϥϚϒϧ͔ͭಉҰͷϫʔΫϑϩʔʹ
ঢ়ଶΛ͏·͘ѻ͏ • ঢ়ଶΛ͏·͘ѻ͏ͱ༷ʑͳԸܙ – ࠶ݱՄೳੑ ϙʔλϏϦςΟ – ςελϏϦςΟ – Ϋϥυͷద߹ – ΑΓϓϩάϥϚϒϧʹ ͬ͘͟Γݴ͏ͱ
ʮεέʔϥϒϧʯ
*NNVUBCMF *OGSBTUSVDUVSF
ঢ়ଶΛཧ͠ͳ͍ • ϓϩϏδϣχϯά'8ঢ়ଶΛదʹهड़͢Δ ͜ͱΛࢦͨ͠ – ·ͣ·͢ޭͨ͠ • ͦͦঢ়ଶΛཧ͠ͳ͍ͱ͍͏ߟ͑ํͳ͍ ͷ͔
– 㱺*NNVUBCMF
*NNVUBCMF*OGSBTUSVDUVSF • %JTQPTBCMF$PNQPOFOUT • ෆมͳɺঢ়ଶΛ࣋ͨͳ͍ɺഇغՄೳͳ
*NNVUBCMFͱ͍͏ߟ͑ํ • ϓϩάϥϛϯάͰѻΘΕΔ֓೦ – ʮ*NNVUBCMFͳσʔλߏʯ – جຊతʹ ྑ͍࡞๏ ؔܕϓϩάϥϛϯά ʹ͓͚Δࢀরಁ໌ʹ ܨ͕Δߟ͑ํ
#MVF(SFFO%FQMPZNFOU
)FSPLV )FSPLVHJUQVTI͢Δຖɺ৽͍͠ڥ ίϯςφ Λ࡞Γɺݹ͍ڥΛغͯΔ
5SBWJT$* 5SBWJT$*ςετΛ࣮ߦ͢ΔͨͼɺίϯςφΛ࡞ΓऴΘͬͨΒغͯΔ
*NNVUBCMFΛ੍ʹ • มߋŋŋŋغͯͯ৽͍͠ͷΛ༻ҙ͢Δ – ݁ՌతʹɺΑΓغͯ͘͢ɺΑΓ࠶ݱ͢͠ ͍γεςϜʹ յΕ͘͢ɺԣʹεέʔ ϧ͢ΔڥʹΑΓద߹
*NNVUBCMFʙΛࢧ͑Δٕज़ ίϯςφ
%PDLFS
None
https://speakerdeck.com/jbeda/containers-at-scale
*NNVUBCMF ʮΞϓϦέʔγϣϯίʔ υʯ͕Քಇ͢Δॴ
ύλʔϯ • ϞμϯΠϯϑϥʹ͓͚Δঢ়ଶͷѻ͍ – ঢ়ଶΛهड़͠ཧՄೳʹ͢Δ – ෆมΛલఏʹɺঢ়ଶΛཧ͠ͳ͍ • มߋŋŋŋݹ͍ഁغɺ৽͍͠ͷΛ༻ҙ ಘΒΕΔͷ εέʔϥϏϦςΟ
.JDSPTFSWJDFT
.JDSPTFSWJDFT • Ұ࿈ͷখ͞ͳαʔϏεͰͭͷΞϓϦέʔγϣ ϯΛ։ൃ͢Δख๏ – ಠཱͨ͠খ͞ͳίϯϙʔωϯτ͕)551"1*Ͱ௨৴ – 㲈40"ɺͨͩ͠6/*9ͷσβΠϯʹ͍ۙ
source: Scaling with Microservices and Ver6cal Decomposi6on h:p://dev.o:o.de/2014/07/29/scaling-‐with-‐microservices-‐and-‐ver6cal-‐decomposi6on/
ͳͥ.JDSPTFSWJDFT • ϞϊϦγοΫͰͬͯ͘ΔͱͭΒ͍ – UZQP͢ͷʹશମϏϧυσϓϩΠ – ͋ͦ͜มߋͨ͠Β༧֎ͷͱ͜Ζ͕յΕͨ – "1*͚ͩεέʔϧ͍ͤͨ͞ͷʹશ෦ల։
• ಠཱͨ͠։ൃɾσϓϩΠαΠΫϧΛ֫ಘ͍ͨ͠ – ૄ݁߹ – ৫ͷಠཱੑΛߴΊΔ See Also: "Microservices"を読んだ h:p://deeeet.com/wri6ng/2014/09/10/microservices/
.JDSPTFSWJDFTͷΞϓϩʔν • ӨڹൣғΛہॴԽ͢Δ – 㲈ঢ়ଶΛؔ͋Δ෦͚ͩʹӅṭ͢Δ ͜Εܧଓతʹอक͍ͯ͠ ͘γεςϜʹ͓͚Δʮঢ় ଶʯͷऔΓѻ͍ͷઓུͱ ݴ͑Δ
.JDSPTFSWJFTͱ*NNVUBCMF *OGSBTUSVDUVSF • .JDSPTFSWJFTԽʹΑͬͯͻͱͭͷγεςϜ୯Ұͷ ׂͷίϯϙʔωϯτʹ • %PDLFSͳͲͷίϯςφΤϯδϯ୯Ұͷׂͷίϯ ϙʔωϯτ͕ڠௐಈ࡞͢ΔઃܭΛલఏ – º'BUͳ%PDLFSΠϝʔδ
– ˓ҰͭͷׂΛ୲͏%PDLFSΠϝʔδ .JDSPTFSWJDFTʹΑΓঢ়ଶ ͷӨڹൣғΛہॴԽ͠ɺͦ ͷΠϯϑϥෆมͳͷͱ ͠ɺಠཱੑΛߴΊΔ
ಘΒΕΔͷ • ίϯϙʔωϯτͷಠཱੑ – ։ൃαΠΫϧ – σϓϩΠαΠΫϧ – ͦΕ͚ͩͰεέʔϦϯά Γ ʮεέʔϥϒϧʯ
3FBDU
3FBDU
3FBDUKT • 'BDFCPPL • ࠒʹൃද • +BWB4DSJQUͷ7JFXϥΠϒϥϦ • ࠒ͔Βʹ
K2VFSZ ໋ྩతͳ%0.ૢ ࡞ίʔυ܈
%0.ૢ࡞ • %0.ૢ࡞ͷ͠͞ – %0.͕ঢ়ଶΛ͍࣋ͬͯΔ – άϩʔόϧ – ඇಉظ • ໋ྩతͳίʔυ ͍ͭɺͲ͔͜Βॻ͖ ͑ΒΕΔ͔Θ͔Β
ͳ͍ঢ়ଶΛؒҧ͍ͳ ͘ཧ͠ͳ͚Εͳ Βͳ͍
3FBDU σʔλϞσϧͷ ঢ়ଶʹมߋΛ௨ એݴతʹఆٛ͞ Εͨ%0.ߏ͕ Α͠ͳʹ࠶ඳը
એݴత • ໋ྩత – $16ʹର͢Δ໋ྩͷखଓ͖Λॻ͘ – ίϚϯυΛ༩͑Δ • એݴత
– ࣮ݱ͍ͨ͜͠ͱͦͷͷΛهड़͢Δ – ͋Δ͖ঢ়ଶΛఆٛɺؔੑͷهड़FUD see also: 宣言的プログラミングの「宣言的」って? h:p://d.hatena.ne.jp/sh-‐2/20091006/1254847253 ᐆດ͔ͭ૬ର తͳݴ༿Ͱ͋Δ ͷͷ
3FBDU໋ྩతˠએݴత • ໋ྩతͰ͋ͬͨ7JFXͷΈཱͯ %0.ૢ࡞ Λɺ એݴతͳύϥμΠϜʹ • ʮσʔλϞσϧʹมߋ͕͋ͬͨΒ%0.Λؙ͝ ͱߋ৽ʯ –
αʔόʔαΠυ – ඇޮͳ෦7JSUVBM%0.͕ղܾ ϑϩϯτΤϯυ6*։ൃΛɺ αʔόʔαΠυͱಉ͡ ߽తϓϩάϥϛϯάελ Πϧʹ͢
7JSUVBM%0. • 3FBDUͷόοΫΤϯυʹ͋Δ %0.ߏΛநԽͨ͠σʔλ ߏ • σʔλϞσϧͷঢ়ଶมԽʹ߹Θ ͤͯ7JSUVBM%0.ͷલޙͷ EJ⒎Λࢉग़ •
ੜ%0.࠶ඳըΛࠩͷ͋ͬͨ Օॴ͚ͩߦ͏ source: React’s diff algorithm h:p://calendar.perfplanet.com/2013/diff/
3FBDU͕ୡͨ͜͠ͱ • 6*։ൃʹ͓͚Δঢ়ଶཧ͔Βͷղ์ • ൃ໌ – 7JSUVBM%0. – εςʔτϨείϯϙʔωϯτΛ࣮ݱ͢Δσʔ λϑϩʔ
'MVY
'MVY • 3FBDU7JFX͚ͩ • 'MVYϞσϧ 4UPSF ΛؚΊͨΞϓϦέʔ γϣϯશମͷΞʔΩςΫνϟ – ॲཧͷهड़ॴΛఆΊΔ
– σʔλϑϩʔΛఆΊΔ • ΠϕϯτͷґଘؔͷෳࡶੑΛղফ – ΠϕϯτσʔλϑϩʔͷํΛҰํ௨ߦʹ͢Δ
3FBDU/BUJWF • 3FBDUͱಉ͡࡞๏ͰJ04"OESPJE • -FBSO0ODF 8SJUF"OZXIFSF
None
'31 'VODUJPOBM3FBDUJWF 1SPHSBNNJOH
ϦΞΫςΟϒϓϩάϥϛϯά • ͱͱҎԼͷΑ͏ͳ֓೦ – σʔλͷྲྀΕΛ௨ͯ͡มߋΛൖ – σʔλͷྲྀΕʹԠ – 㱺ΠϕϯτۦಈɺΦϒβʔόʔɺ"DUPSɺ'VUVSF •
ٛͷɺڱٛͷŋŋŋ͕͋Δ – ֦େղऍ͠Α͏ͱ͢ΔͱͲ͜·Ͱ͍͚Δ ཁҙ – ݸਓతʹ'31ͷจ຺Ҏ֎Ͱ͋·Γݴٴ͠ͳ͍Α ͏ʹ͍ͯ͠Δ
ʮ3FBDUJWFͬΆ͍ʯͱ • σʔλϑϩʔΛએݴతʹѻ͏ – σʔλͷؔੑΛએݴతʹද͍ͯ͠Δ͔ source: Reac6ve Programming in JavaScript
h:p://ahomu.github.io/s/150221-‐frontrend_conference/#39
'VODUJPOBM3FBDUJWF 1SPHSBNNJOH • ؔܕ ϦΞΫςΟϒ • )BTLFMMˠ$ -*/2ˠ3Y • ͦͷޙ
– 3Y+BWB – 3FBDUJWF$PDPB – 3Y+4 #BDPOKT –
ྫ ͱԡ͢ͱ Λԡ͢ͱ
໋ྩతʹॻ͘ • ΧϯλมΛ༻ҙ • ॳظΛඳը • Ϙλϯ͕ԡ͞ΕͨΒΧϯλΛ ͯ͠࠶ඳ ը •
Ϙλϯ͕ԡ͞ΕͨΒΧϯλΛͯ͠࠶ඳը
None
σʔλϑϩʔʹண͢Δ + + + + ·ͣɺ ϘλϯͷΫϦοΫΠϕϯτΛ࣌ܥྻʹԊͬͯྲྀΕͯ͘ΔϦετ ετϦʔϜޙड़ ͱߟ͑Δɻ ΠϕϯτετϦʔϜΛྲྀΕΔͱΈͳͤΔ
+ + + + ϚΠφεϘλϯಉ༷ʹߟ͑Δ -‐ -‐
+ + + + ϘλϯΠϕϯτɺ ͢Δ͜ͱɻ Ώ͑ʹͱ͍͏ʹม 5SBOTGPSN ͯ͠ΈΔ 1
1 1 1
ϘλϯΠϕϯτɺ͢Δ͜ͱɻ Ώ͑ʹͱ͍͏ʹม 5SBOTGPSN ͯ͠ΈΔ -‐ -‐ -‐1 -‐1
1 1 1 1 -‐1 -‐1 1 1 1 1
-‐1 -‐1 ;ͨͭͷΠϕϯτඇಉظʹࠞͬͯ͟ಧ͘ͷͰ͋Δ Ώ͑ʹೋͭͷετϦʔϜΛϚʔδ͢Δ
1 1 1 1 -‐1 -‐1 1 1 2 0
1 2 Ϛʔδ͞ΕͨετϦʔϜΛɺҰͭલͷͱͷࢉज़݁Ռʹม
1 1 2 0 1 2 ͕มԽ͢Δຖʹը໘Λ࠶ඳը ෭࡞༻
'31XJUI#BDPOKT
+ + + + Bacon.fromEvent(plusButton, 'click')
+ + + + -‐ -‐ Bacon.fromEvent(minusButton, 'click')
+ + + + 1 1 1 1 plusClickStream.map(1)
-‐ -‐ -‐1 -‐1 minusClickStream.map(-‐1)
1 1 1 1 -‐1 -‐1 1 1 1 1
-‐1 -‐1 plusStream.merge(minusStream)
1 1 1 1 -‐1 -‐1 1 1 2 0
1 2 bothStream.scan(0, (x + y) => x + y)
1 1 2 0 1 2 counterBus.onValue( /* ը໘ඳը */)
ͳΜ͔ͩΘ͔ͬͨΑ͏ͳ Θ͔Βͳ͍Α͏ͳŋŋŋ
ࠓճͷจ຺Ͱݴ͑ ண͖͢ʮετϦʔϜʯ
source: Reac6ve Programming in JavaScript h:p://ahomu.github.io/s/150221-‐frontrend_conference/#39
ඇಉظσʔλετϦʔϜ • શͯͷσʔλϑϩʔΛετϦʔϜͱͯ͠ѻ͏ – ୯Ұͷɺෳͷɺ1SPNJTF • ετϦʔϜΛϦετͱΈͳ͢ • Ϧετૢ࡞㱺ؔܕͷΠσΟΦϜͰૢ࡞Ͱ͖Δ •
ؔܕ – એݴత – ୈڃߴ֊ؔ – ࢀরಁ໌͔ͭ෭࡞༻Λආ͚Δ ہॴԽ͢Δ
ࢥߟͷྲྀΕ • ʮ࣌ؒͱڞʹมԽ͢Δͷσʔλܕ͕ཉ͍͠ʯ • 㱺ετϦʔϜΛಋೖ • 㱺Πϕϯτඇಉظॲཧ·ͰετϦʔϜʹ – ʮ͋Εɺશ෦ετϦʔϜͰѻ͑Δ͡Όͳ͍ ʯ
• 㱺શͯΛ౷Ұ͞ΕͨετϦʔϜͱ͍͏ΠϯλϑΣʔεͰ • 㱺ϦετΏ͑ʹؔܕͷΠσΟΦϜɺύϥμΠϜ – ʮϦετૢ࡞Ͱ͢ΔͳΒؔܕ͕Ԡ༻Ͱ͖Δ͡Όͳ͍ʯ • 㱺෭࡞༻Λආ͚ͨએݴతͳهड़ • 㱺ࢀরಁ໌ঢ়ଶཧ͔Βͷղ์
"OESPJEJ04Ͱ3FBDUJWF • 3Y+BWB3FBDUJWF$PDPBͷྲྀߦ • ͨͩ͠ɺ'31Λਖ਼໘͔Βಋೖ͢ΔͷͰͳ͘ศརͳϥ ΠϒϥϦͱͯ͠ݶఆతʹಋೖ͢Δͱ͜Ζ͔Β࢝ΊΔྫΛ Α͘Έ͔͚Δ – ศརͳίϨΫγϣϯૢ࡞ϥΠϒϥϦͱͯ͠ –
.77.ͷσʔλόΠϯσΟϯά࣮ͱͯ͠
·ͱΊ
τϨʔυΦϑ ྫ • *OGSBTUSVDUVSFBT$PEFֶशίετ • *NNVUBCMF*OGSBTUSVDUVSFڥߏஙίετ • .JDSPTFSWJDFTϞϊϦγοΫΑΓܥશମͷෳࡶੑ૿ ͢
• 3FBDUKTίʔυྔ૿͑Δ • '31ֶशίετ
εέʔϥϒϧŋŋŋঢ়ଶΛͲ͏ѻ͏͔ • എܠ – ࣌ͷཁ • ΫϥυωΠςΟϒ • ඇಉظͳΞϓϦέʔγϣϯ •
࣌ؒͱڞʹԿ͔ͱෳࡶԽ͍͢͠8FCγεςϜ • ࢧతͳϑΝΫλʔঢ়ଶͷѻ͍ – Ӆṭ – એݴతʹهड़ – *NNVUBCMF େنτϥϑΟοΫ ͔ͩΒɺͱ͍͏ͩ ͚Ͱͳ͘ͳ͖ͬͯͯ Δ
·ͱΊ • ۙݸਓతʹணͨ͠τϨϯυΛΈͨ – *OGSBTUSVDUVSFBT$PEF – *NNVUBCMF*OGSBTUSVDUVSF – .JDSPTFSWJDFT –
3FBDU – 3FBDUJWF1SPHSBNNJOH • ෳࡶੑͷରࡦͱͯ͠ͷঢ়ଶཧख๏ʹύλʔ ϯ͕ݟ͍ͩͤΔ
13࠾༻ͯ͠·͢ ʮ,BJ[FO࠾༻ʯͰݕࡧɻڵ ຯ͋Δ͚ͩͰՄɻͦͷ ߹8BOEUFEMZͰ