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
週一でリリースし続けるためのフロントエンドにおける不確実性との戦い方 / Developers...
Search
Satoshi Takeda
July 21, 2020
Technology
2
1.4k
週一でリリースし続けるためのフロントエンドにおける不確実性との戦い方 / Developers Summit 2020 Summer C-4
Developers Summit 2020 Summer C-4 で発表した資料です。
Satoshi Takeda
July 21, 2020
Tweet
Share
More Decks by Satoshi Takeda
See All by Satoshi Takeda
フロントエンド、私的リリース戦略史 / Connehito Marche Online Front-End release strategy
tkdn
0
110
mediba におけるフロントエンド, JavaScript / mediba & JavaScript development
tkdn
0
800
未学習領域におけるチーム{学習,プレイ}とは /au Web portal frontend, BIT VALLEY -INSIDE- Vol.8
tkdn
2
3.5k
フロントエンド全身ちぎれ節/BIT VALLEY -INSIDE- Vol4
tkdn
0
85
Other Decks in Technology
See All in Technology
RDS の負荷が高い場合に AWS で取りうる具体策 N 連発/a-series-of-specific-countermeasures-available-on-aws-when-rds-is-under-high-load
emiki
7
4k
業務効率化をさらに加速させる、ノーコードツールとStep Functionsのハイブリッド化
smt7174
2
150
AIツールでどこまでデザインを忠実に実装できるのか
oikon48
6
3.5k
「使い方教えて」「事例教えて」じゃもう遅い! Microsoft 365 Copilot を触り倒そう!
taichinakamura
0
440
アイテムレビュー機能導入からの学びと改善
zozotech
PRO
0
190
大規模サーバーレスAPIの堅牢性・信頼性設計 〜AWSのベストプラクティスから始まる現実的制約との向き合い方〜
maimyyym
10
5k
FinOps について (ちょっと) 本気出して考えてみた
skmkzyk
0
110
Wasmの気になる最新情報
askua
0
120
能登半島地震において デジタルができたこと・できなかったこと
ditccsugii
0
250
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
43k
データ戦略部門 紹介資料
sansan33
PRO
1
3.8k
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3k
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
How to Ace a Technical Interview
jacobian
280
24k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
KATA
mclloyd
PRO
32
15k
The Invisible Side of Design
smashingmag
302
51k
GraphQLとの向き合い方2022年版
quramy
49
14k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
How STYLIGHT went responsive
nonsquared
100
5.8k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
190
55k
Transcript
िҰͰϦϦʔε͠ଓ͚ΔͨΊͷ ϑϩϯτΤϯυʹ͓͚Δ ෆ࣮֬ੑͱͷઓ͍ํ %FWFMPQFST4VNNJU4VNNFS $ EFWTVNJ$ גࣜձࣾ NFEJCBా ་
ձࣾհ גࣜձࣾ NFEJCB IUUQTXXXNFEJCBKQ ઃཱ ݄ ैۀһ ໊ ։ൃऀ
໊ ݄ݱࡏ ,%%*גࣜձࣾͷ BVεϚʔτύεΛத৺ͱͨ͠ BVؔ࿈αʔϏεӡӦͷଞɺ෯͍ͰαʔϏ εΛల։͠ɺϢʔβʔ͕ΠϯλʔωοτΛ௨͡ ͯඞཁͳ࣌ʹඞཁͳใʹΞΫηεͰ͖Δڥ ͮ͘ΓͷͨΊͷαʔϏεΛఏڙ͍ͯ͠·͢ɻ
ా ་ !ULEO גࣜձࣾ NFEJCB։ൃ( ϑϩϯτΤϯυΤϯδχΞ ΫϥΠΞϯταΠυ #''ͷ։ൃΛ୲ جຊతʹϒϥβ͕ओઓ ɿऀ
ɿάϩʔεΤΫεύʔτφʔζגࣜձࣾ ɿάϩʔεɾΠϯΫגࣜձࣾ ɿגࣜձࣾ NFEJCB ࣗݾհ
• ൃද༰ • νʔϜʹᴥᴪΛͳ͘͠ಉ͡ޠኮͰΞʔΩςΫνϟΛΜͰ͍͘ • #'' Ͱѻ͍ͬͯΔ (SBQI2- "1* ͕ϝΠϯͷ
• ϒϥβͰ͓͖Δྫ֎ "1* ͷΤϥʔΛ 6* ͰϑΥϩʔ͢Δ • ఆظతʹϦϦʔε͢ΔΈɺͦͯ͠·ͱΊ • ͞ͳ͍͜ͱ • "QPMMP 4FSWFS ʹ͍ͭͯ৮Ε·͕͢ϥΠϒϥϦͷ͍ํ͠·ͤΜ • ΫϥΠΞϯταΠυͰ 3FBDU Λ͍ͬͯ·͕͢ൃදʹ΄΅ग़͖ͯ·ͤΜ • ରऀ • νʔϜͰͷίϛϡχέʔγϣϯʹΜͰ͍Δํ • ։ൃ్தͰᴥᴪ͕ੜ·Εͨ··ϦϦʔε͕ͨ͠ೲಘͰ͖ͳ͔ͬͨํ • #'' Ͱ "1* Λ։ൃ͍ͨ͠ϑϩϯτΤϯυدΓͷ։ൃऀ • "QPMMP 4FSWFS Λͬͨ͜ͱͷ͋Δ։ൃऀ ൃද༰ͱఆରऀ
ຊʹೖΔલʹ গ͚ͩ͠લఏɾഎܠͷ͓
ϓϩμΫτɿʮຖϙΠϯτʯ λʔήοτɿBVϢʔβʔ͕ϝΠϯ ϏδωεϞσϧɿ$1$ ใुܕࠂ ˞ ϦϦʔε࣌ୡײىΛతͱͯ͠ϏδωεΑΓମݧΛ༏ઌ ఏڙ͍ͨ͠ମݧ BV8FCϙʔλϧ͔Β࢝·ΔϙΠϯτΛஷΊΔମݧΛߏஙৢ͢Δ ϙΠϯτ ΠϯηϯςΟϒΛ༻͍ͯBV8FCϙʔλϧΛັྗԽ͢Δ
׆༻ͯ͠Β͍͍ͨ ϙΠϯτʹର͢ΔϦςϥγʔΛߴΊར׆༻ͯ͠Β͏ ʑୡײΛײ͡ͳ͕Βश׳Խͯ͠΄͍͠ ϓϩμΫτͱഎܠ
ϓϩμΫτɿʮຖϙΠϯτʯ औΓר͘ঢ়گ • ݄ BV8"--&5ϙΠϯτ͔Β 1POUBϙΠϯτ • ΩϟογϡϨεܾࡁ BV1": •
BV*%ΩϟϦΞϢʔβʔͷΈͳΒͣΦʔϓϯͳ *% ෆ࣮֬ͳཁૉ͕ଟ͍ɺ.71 .JOJNVN7JBCMF1SPEVDU • ϢʔβʔχʔζɾϙΠϯτͷೝ • Ͳ͏͍ͬͨػೳΛՃ͠श׳Խͯ͠Β͏͔ • ϢʔβʔΛͲͷ͘Β͍ݟࠐΉ͔ ❌ ݕূͷͨΊͷ࡞Γࣺͯɾ࡞Γ͠ ⭕ ͋Δఔͷਫ਼Λ্࣋ͬͨͰݕূ͠ͳ͕ΒҭͯΔ ϓϩμΫτͱഎܠ
ϓϩδΣΫτͷഎܠɿͷͮ͘Γϓϩηε Ϣʔβʔத৺ͷʮͷͮ͘ΓΧϯύχʔʯͱͯ͠தظతͳ ઓུΛܝ࣮͛ݱ͚ͨ৫ମ੍Λཱ֬͢Δ IUUQXXXNFEJCBKQOFXT • ࡢͷͮ͘ΓϓϩηεΛੜ͢Δ෦ॺॴଐ • ༷ʑͳ৬छʹΑΔϓϩηεɾจԽৢ • ΑΓྑ͍ϫʔΫϑϩʔͷࡧࢼߦ
ʮϓϩδΣΫτʹؔΘΔ ʹ ͷͮ͘ΓΛ͢Δʯਓ ͨͪͷϓϩηεΛΑΓΑ͍ͷʹ͢ΔϩʔϧϞσ ϧͱͳΔɺॳΊͯͷ ͷϓϩδΣΫτ ϓϩμΫτͱഎܠ
ϓϩδΣΫτͷഎܠɿϑϩϯτΤϯυͷڧԽ ະֶशྖҬʹ͓͚ΔνʔϜ\ֶश ϓϨΠ^ͱ !#*57"--&:*/4*%& 7PM • ݄ BV8FCϙʔλϧϦχϡʔΞϧ • /FYUKT
Y(SBQI2-"1* • ϑϩϯτΤϯυڧԽͷͨΊνʔϜମ੍มߋ • ϑϩϯτΤϯυ։ൃऀͷΛ૿͢ • αʔόʔαΠυ։ൃऀͷεΩϧస • /PEFKT ʹΑΔϑϩϯταʔόʔӡ༻ • 443 (SBQI2- "1* ϓϩμΫτͱഎܠ
͜͜·Ͱ͕લఏɾഎܠͷ͓
࣍ #''ʹকདྷతͳมߋ༰қੑΛ ઓུϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳ ઓज़ϢʔεέʔεۦಈͰ։ൃ͢Δ ΤϥʔΠϕϯτͱվળ
ΫϥΠΞϯτ ϒϥβͷྫ֎ʹదͳ 6* Λ #''ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ ࣍
࣍ #''ʹকདྷతͳมߋ༰қੑΛ ઓུϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳ ઓज़ϢʔεέʔεۦಈͰ։ൃ͢Δ ΤϥʔΠϕϯτͱվળ
ΫϥΠΞϯτ ϒϥβͷྫ֎ʹదͳ 6* Λ #''ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳
.71εϐʔυΛٻΊΒΕ͍ͯΔɺ͕͔͠͠ ʮʓʓΛΓ͍ͨʯ ʮ˚˚ࠓճͷείʔϓʹؚΊ͍ͨʯ ͱݴͬͯͨͳʜ֬ূͳ͍͕ʜ ॳظϦϦʔεʹඞཁͳ͜ͱʜʁ ԿΛٻΊΒΕ͍ͯͯԿΛ༏ઌ͖͢ʜʁ ೝࣝͷᴥᴪͬͯͳ͍͔ʜʁ ૬ޓʹೝͷΈ͕ͳ͍͔ʜʁ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳
ݟͨ͜ͱ͋Δͭʢݟͨ͘ͳ͍ͭʣ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳
ʮԿΛ࡞ͬͯԿΛఏڙ͢Δ༧ఆͳͷ͔Ұ୴ཧ͠Α͏ʯ • 10ɺσβΠφʔɺ։ൃऀɺεΫϥϜϚελʔҰಉհ͢Δ • શһ͕ಉ͡ޠኮͰͤΔ͕ʮϢʔεέʔεʯ • γεςϜ༻ޠൈ͖ʹͯ͠શһ͕ཧղͰ͖Δݴ༿ • ࣗͣͱ༏ઌݟ͑ͯ͘Δ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳
ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳ ϢʔβʔछผʹΑͬͯϙΠϯτ͕͑ͳ͍ ։ൃऀ ͳΔ΄Ͳʁʢॳࣖ σβΠφʔ ར༻ෆՄͷϢʔβʔʹέΞ͢Δը໘͕ඞཁͦ͏ 10 ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳
ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳ γʔζϯʢ։࠵ظؒʣͬͯγʔϜϨεʹͣͬͱଓ͘ʁ ։ൃऀ Ͳ͏͍͏͜ͱʁ ϝϯςφϯεதɺγʔζϯ֎ͷߟྀ͕ඞཁͦ͏ 10 ։ൃऀ ࿈ܞઌϝϯςφϯεΛߟྀ͢Δͱඇ࿈ଓతͰͳ͍ͱਏͦ͏ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳
ಉ͡ͷΛɺಉ͡ઢͰɺνʔϜڞ௨ͷݴޠͰ࡞Δ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳
༏ઌɿ҆શੑɺকདྷੑͱεϐʔυ • ҆શੑ զʑϢʔβʔࢿ࢈Λ༬͔͍ͬͯΔ • কདྷੑͱεϐʔυ ։ൃظؒͱϦϦʔεޙͷมߋ༰қੑΛߟ͑Δ ྫ͑ʜ • 3%4ͷςʔϒϧ࠷খߏ
কདྷతʹςʔϒϧ͕૿͑Δ͔͠Εͳ͍ • ཧը໘࡞Βͳ͍ ӡ༻ඞཁ͕ͩ·ͣखӡ༻ • ӡ༻Ͱ͑ΒΕΔมσʔλετϨʔδͰཧ • ΞϓϦέʔγϣϯ֎෦ετϨʔδͷ +40/ ϑΝΠϧΛࢀর͢Δ • ։࠵ظؒɺϙΠϯτɺίϯςϯπɺαʔϏε͕৳͔ͯ͠Βཧը໘ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳
։ൃνʔϜͯ͢Ϟϒϓϩ • ݸਓʹ͕ࣝுΓ͘͜ͱΛආ͚Δ • ϙδςΟϒͳҙຯͰૠ͛ସ͕͑Մೳͳঢ়ଶʹ͓ͯ͘͠ • ͜Ε͋ͷਓ͔͠Ͱ͖ͳ͍Λపఈతʹආ͚Δ • ઃܭɾઃܭϨϏϡʔɾ࣮ɾ୯ମςετͷ΄ͱΜͲϞϒͰߦ͏ •
։ൃޙͷ্͍͛ • όοΫΤϯυαʔϏε։ൃʢ(Pʣͷϝϯόʔʹ 5ZQF4DSJQU Πϯετʔϧ • εϓϦϯτͰҰॹʹͬͯ࣍εϓϦϯτͰλεΫΛרऔΓ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳
։ൃॱௐɻ͕ͩɺԶͬͯΔΜͩʜ ࠷ॳͷಉظ͔ΒঃʑʹζϨʜ ૯߹ςετதʹόάͱແؔͳʜ ʮͬͯ͜͜͜͏͡Όͳ͔ͬͨΜͰ͚ͨͬ͠ʁʯ ʮʓʓ͕͜ͷ΄͏͕ྑ͍ͱݴͬͨͷͰม͍͑ͯͩ͘͞ʯ ͋ΘΘΘ͋ΘΘΘΘΘΘΘΘͬΘΘΘͬΘΘΘΘΘ͋͋ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳
࠶ܝ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳
ϦΧόϦʔ͕ޮ͘λΠϛϯάͰ࠶Ϣʔεέʔεͷ֬ೝ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳
ෆ࣮֬ੑΛݮͤ͞ΔͨΊͷɺզʑͷઓུ • εϐʔυΛॏࢹͭͭ͠ϦΧόϦʔՄೳͳʹඞͣಉظΛ • ։ൃશͯϞϒϓϩͰ࣮ࢪࣝ͠ཧղͷภΓΛͳ͘͢ • ζϨͲ͔͜Ͱى͖ΔͷͰൃࢄͱऩଋͷόϥϯεײ֮Λͭ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳
࣍ #''ʹকདྷతͳมߋ༰қੑΛ ઓུϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳ ઓज़ϢʔεέʔεۦಈͰ։ൃ͢Δ ΤϥʔΠϕϯτͱվળ
ΫϥΠΞϯτ ϒϥβͷྫ֎ʹదͳ 6* Λ #''ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ ϢʔεέʔεۦಈͰ։ൃ͢Δ
ϢʔεέʔεۦಈͰ։ൃ͢Δʁ 6TFDBTF%SJWFO OPU.PEFM%SJWFO ΫϦʔϯΞʔΩςΫνϟಉ৺ԁͷΤϯςΟςΟ υϝΠϯۦಈઃܭͷதͰϞσϧΛத৺ʹͨ͠։ൃख๏ͰޠΒΕΔ ࠓճϞσϧͰͳ͘ϢʔεέʔεۦಈͰ։ൃ͍ͯ͠Δ ϢʔεέʔεۦಈͰ։ൃ͢Δ
#'' #BDLFOE'PS'SPOUFOE (SBQI2- • ΫϥΠΞϯταΠυϝϦοτ • ⭕ ΫϥΠΞϯτ͔Βͷը໘ʹରͯ͠ඞཁͳϦΫΤετޮ্͕ • ΫϥΠΞϯτ͕ϢʔεέʔεʹԠͯ͡ΫΤϦΛΈཱͯΔ͜ͱ͕Մೳ
• ࠓճෳࡶͳϩδοΫΛΫϥΠΞϯτʹدͤͨ͘ͳ͍ • #'' ϝϦοτ • ރΕͯάϩʔεରͰͳ͍طଘ "1*ΛΞάϦήʔτ͠৽ن "1*ͱͯ͠࠶ར༻ • ΫϥΠΞϯταΠυɾ#'' ڞ௨ͷϝϦοτ • ⭕ εΩʔϚʹΑͬͯͨΒ͞ΕΔํϑϨϯυϦʔͳ։ൃମ੍ߏங ϢʔεέʔεۦಈͰ։ൃ͢Δ
&YQSFTT "QPMMP 4FSWFS ϢʔεέʔεۦಈͰ։ൃ͢Δ
ʢࡶͳʣ݁ࠗͱਓੜͷุͰ͋Δ lࣗͷΞϓϦέʔγϣϯͰԿΒ͔ͷϑϨʔϜϫʔΫΛ͏͜ͱʹܾΊͨ࣌ ͰɺͦͷΞϓϦέʔγϣϯϑϨʔϜϫʔΫʹറΒΕΔ͜ͱʹͳΔͷͩͱ ೝ͓ࣝͯ͘͠ඞཁ͕͋Δɻ͍ͷͱ͖ɺࡂ͍ͷͱ͖ɺ๛͔ͳͱ͖ɺශ ͍͠ͱ͖ɺ݈͔ͳΔͱ͖ɺපΊΔͱ͖ɺ΄͔ͷͯ͢Λ٘ਜ਼ʹͯ͠ ͰɺͦͷϑϨʔϜϫʔΫΛ͏͜ͱʹͳΔɻؾܰʹड͚ೖΕΒΕΔΑ͏ͳ ͷͰͳ͍ɻz $MFBO"SDIJUFDUVSF ୈষ ϑϨʔϜϫʔΫৄࡉ
ϢʔεέʔεۦಈͰ։ൃ͢Δ
ݱ࣮ ϢʔεέʔεۦಈͰ։ൃ͢Δ
εϐʔυײΛอͪͳ͕Βมߋ༰қੑΛ࣋ͯΔ࠷దղ • ٻΊΒΕ͍ͯΔͷ • νʔϜͰ߹ҙͨ͠ڞ௨ͷݴޠͱϢʔεέʔε • ϓϩμΫτͷ৳Λߟྀͨ͠มߋ༰қੑ • σʔλϕʔεɺετϨʔδɺΩϟογϡͳͲଓઌ͕มΘΔՄೳੑ •
มߋΛ͙͢ʹٻΊΒΕΔ͜ͱ • ՁݕূϢʔβϏϦςΟςετͰมߋ͕ଟ͘Δͷϒϥβͷ (6* • #'' ͕ࢦ͍ͨ͠ͱ͜Ζ • ΫϥΠΞϯταΠυͰͷϢʔεέʔεΛϕʔεʹͨ͠ "1* ϢʔεέʔεۦಈͰ։ൃ͢Δ
ϢʔεέʔεΛத৺ʹ͢Δ l༏ΕͨΞʔΩςΫνϟϢʔεέʔεΛத৺ʹ͍ͯ͠ ΔͨΊɺϑϨʔϜϫʔΫɺπʔϧɺڥʹґଘ͢Δ͜ͱ ͳ͘ɺϢʔεέʔεΛαϙʔτ͢ΔߏΛͳ͘આ໌ Ͱ͖Δz $MFBO"SDIJUFDUVSFୈ ষ ڣͿΞʔΩςΫνϟ ϢʔεέʔεۦಈͰ։ൃ͢Δ
• νʔϜ͕࣋ͭಉ͡ޠኮ Ϣʔεέʔε • ϢʔεέʔεΛʮํʯͱͯ͠த৺ʹਾ͑Δ • ΫϦʔϯΞʔΩςΫνϟͷத৺ʹ͋ΔΤϯςΟςΟͳ͍
SFTPMWFSϢʔεέʔεΛ࣮ߦ ϢʔεέʔεۦಈͰ։ൃ͢Δ
มߋ༰қੑ lιʔείʔυͷґଘੑɺଆʢ্ҐϨϕϧͷํʣͩ ͚ʹ͔͍ͬͯͳ͚Ε͍͚ͳ͍ɻz $MFBO"SDIJUFDUVSF ୈ ষ ΫϦʔϯΞʔΩςΫνϟ ґଘੑͷϧʔϧ ϢʔεέʔεۦಈͰ։ൃ͢Δ
• ࠶ܝ ϓϩμΫτͷ৳Λߟྀͨ͠มߋ༰қੑ • σʔλϕʔεɺετϨʔδɺΩϟογϡͳͲ ଓઌ͕༰қʹมߋɾૠ͛ସ͑Ͱ͖ͳ͍ • Ϣʔεέʔε֎෦ଓʹؔ৺͕͋Δঢ়ଶ
ґଘͷํඞ্ͣҐϨϕϧʹͷΈ͔͏ • ͭͷΤοηϯε͚ͩΛநग़ • ґଘؔٯసͷ๏ଇ %*1 • ͷɺదͳϨΠϠϦϯά • ӈԼͷͪ͜Όͪ͜Όͨͭ͠ࠓճআ֎
ϢʔεέʔεۦಈͰ։ൃ͢Δ
ͷɺϨΠϠϦϯά ϢʔεέʔεۦಈͰ։ൃ͢Δ
6TFDBTF ֎ͷϨΠϠʔʹґଘ͠ͳ͍ ϢʔεέʔεۦಈͰ։ൃ͢Δ
"EBQUPS 6TFDBTF ʹґଘ ϢʔεέʔεۦಈͰ։ൃ͢Δ
"EBQUPS ίϯετϥΫλͰ %* ϢʔεέʔεۦಈͰ։ൃ͢Δ ϥΠϒϥϦͷؔ৺Λ֎ • )551ϦΫΤετ͍ͨ͠ • ྫ
OPEFGFUDI • 03.͍͍ͨ • ྫ 5ZQF03. • ۩ମతʹओுͨ͘͠ͳ͍ ୯ମςετΛॻ͖͍͢ • ґଘΛ฿͢ΔܕߏΛೖ ͢Δ͚ͩ
*OGSBTUSVDUVSF • ͱʹ͔ࣝ͘Λ࣋ͨͤͳ͍ • ϥΠϒϥϦϑϨʔϜϫʔΫ͕ఏ ڙ͢ΔͷΛ७ʹஔ ϢʔεέʔεۦಈͰ։ൃ͢Δ
&OUJUJFT ʁʁʁ &OUFSQSJTF#VTJOFTT3VMFT&OUJUJFTʁ ϢʔεέʔεۦಈͰ։ൃ͢Δ • $MFBO "SDIJUFDUVSF த৺ʹΤϯςΟςΟΛਾ͑ͨ Ϟσϧۦಈ։ൃͰͳ͍
• νʔϜڞ௨ݴޠͱϢʔεέʔεΛϕʔεʹͨ͠ Ϣʔεέʔεۦಈͷ։ൃ • ϏδωεϧʔϧͳͲࣗͣͱΤϯςΟςΟʢϞσϧʣʹ
%*1ͱదͳϨΠϠϦϯά͚ͩͰಘΒΕΔϝϦοτ • ֦ॆमਖ਼͢͠͞Λओ؟ͱͨ͠ͷͰӡ༻͕ਏ͘ͳ͍ • νʔϜڞ௨ݴޠΛར༻ͨ͠ϢʔεέʔεϕʔεͳͷͰဃ͕ͳ͍ • ࠷େͷతͩͬͨΫϥΠΞϯταΠυͷෛՙۃྗബ͘Ͱ͖ͨ ΞʔΩςΫνϟϑΝʔετͰͳ͘ ϓϩμΫτϑΝʔετͳ࠷ݶͷΞʔΩςΫνϟ
ϢʔεέʔεۦಈͰ։ൃ͢Δ
զʑͷ #'' ઓུɾઓज़·ͱΊ • εϐʔυΛٻΊΒΕΔέʔεͰ߹ྲྀΛ • ઓ͏͖૬ޓͷೝࣝᴥᴪͰͳ͍ • ઓ͏͖ϏδωεΛࠓޙ৳͍ͯ͘͠ʹ͋ͨͬͯͷෆ࣮֬ੑ •
ͦͷͨΊʹઌਓͷͨ͠ΞʔΩςΫνϟͷΤοηϯε͕͋Δͣ • νʔϜڞ௨ͷݴޠͰઢͷߴ͞Λ߹Θ͓ͤͯ͘ • ಉ͡ઢͰରͰ͖Δ༰͕ίʔυʹసࣸ͞Ε͍ͯΔ #''ʹকདྷతͳมߋ༰қੑΛ
࣍ #''ʹকདྷతͳมߋ༰қੑΛ ઓུϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳ ઓज़ϢʔεέʔεۦಈͰ։ൃ͢Δ ΤϥʔΠϕϯτͱվળ
ΫϥΠΞϯτ ϒϥβͷྫ֎ʹదͳ 6* Λ #''ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ ϒϥβͷྫ֎ʹదͳ 6* Λ
ϒϥβͷྫ֎ 3FGFSFODF&SSPS 4ZOUBY&SSPS 5ZQF&SSPS ϒϥβͷྫ֎ʹదͳ 6* Λ
ϒϥβͷྫ֎ɿ%0.&YDFQUJPO • IUUQTIFZDBNHJUIVCJPXFCJEMJEM %0.&YDFQUJPO • %0.͔Βࢀর͍ͯ͠Δ 8FC*%- Ͱఆٛ • ྫ
• ͷ௨৴ෆ௨ʹΑΔΤϥʔ • ϒϥβઃఆʹΑͬͯग़Δ͜ͱ͋ͬͨΓ ϒϥβͷྫ֎ʹదͳ 6* Λ
ϦϦʔεॳͷྫ֎ัଊ࣌ͷը໘ • 3FBDU &SSPS#PVOEBSZ ͰϑΥϩʔ • ΤϥʔΠϕϯτૹ৴ͱϑΥʔϧόοΫ 6*ͷදࣔ ϒϥβͷྫ֎ʹదͳ 6*
Λ
/FUXPSL&SSPSɿωοτϫʔΫͷෆ௨ • ΄ͱΜͲաͯ͠Α͍ • ຖ ສ΄ͲΠϕϯτ্͕͕ͬͯ͘Δ • Ұ࣌తʹωοτϫʔΫঢ়گ͕ѱ͘ͳΔɺλΠϜΞτ • $IVOL-PBE&SSPS-PBEJOHDIVOLGBJMFE
• 6ODBVHIU JOQSPNJTF 5ZQF&SSPS'BJMFEUPGFUDI ϒϥβͷྫ֎ʹదͳ 6* Λ
4FDVSJUZ&SSPSɿ+BWB4DSJQU͔Β JOTFDVSFͳૢ࡞ 4FDVSJUZ&SSPS'BJMFEUPSFBEUIFMPDBM4UPSBHFQSPQFSUZGSPN8JOEPX"DDFTTJTEFOJFEGPSUIJTEPDVNFOU ϒϥβͷྫ֎ʹదͳ 6* Λ
%0.&YDFQUJPOʹֻ͔Βͳ͍ఆ֎ • ΤϥʔΠϕϯτ͕ൃੜ͠ͳ͍έʔε • ัଊͰ͖ͣʹՄࢹԽ͢Δ͜ͱ͕͍͠ • ྫɿ XJOEPXPQFO ʹΑΔϙοϓΞοϓϒϩοΫ ϒϥβͷྫ֎ʹదͳ
6* Λ
XJOEPXPQFO BCVTF͞ΕΔϢʔεέʔε͕ଟ͍ ϢʔβʔମݧΛ্ͤ͞ΔͨΊͷ৽͍͠ΟϯυΛ։͘ͱ͍͏త͕͋ΔʹؔΘ ΒͣɺࠂΛ։ͨ͘Ίʹѱ༻͞Ε͍ͯΔɻϢʔβʔΠϕϯτͰ͋ΔΩʔԡԼɾϚε ΫϦοΫҎ֎Ͱཁٻ͞Εͨ߹ϒϩοΫ͞ΕΔ ϒϥβͷྫ֎ʹదͳ 6* Λ l 5IFXJOEPXPQFO
"1*IBTCFFOBCVTFEUPPQFOJOUSVTJWFBEWFSUJTJOH XIJDI JTSFHSFUGVMTJODFUIFSFBSFMFHJUJNBUFSFBTPOTUPPQFOBOFXXJOEPXUIBU FOIBODFVTFSFYQFSJFODF5SBEJUJPOBMMZ QPQVQXJOEPXTBSFCMPDLFEXIFOUIFZ BSFOUFYQMJDJUMZSFRVFTUFECZBVTFSLFZQSFTTPSNPVTFDMJDLz IUUQTXXXDISPNJVNPSHEFWFMPQFSTEFTJHOEPDVNFOUTDPOTUSBJOFEQPQVQXJOEPXT
υΩϡϝϯτʹ໌ࣔ͞Εͯͳ͍͜ͱ ϒϥβͷྫ֎ʹదͳ 6* Λ _⼈⼈⼈⼈⼈⼈⼈⼈⼈⼈⼈⼈⼈⼈⼈_ > ポップアップブロック!!! <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
࣍ #''ʹকདྷతͳมߋ༰қੑΛ ઓུϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳ ઓज़ϢʔεέʔεۦಈͰ։ൃ͢Δ ΤϥʔΠϕϯτͱվળ
ΫϥΠΞϯτ ϒϥβͷྫ֎ʹదͳ 6* Λ #''ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS
ϦϦʔεޙ͔Δ͜ͱͨ͘͞Μ͋Δ ʮͣͬͱಉ͡λϒͰར༻͞ΕΔఆ͕ͩͬͨผλϒͰ։͘έʔε͕ଟͦ͏ʯ ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS _⼈⼈⼈⼈⼈⼈⼈⼈⼈_ > 例外画⾯!!! <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^ ̄
ϦϦʔεޙ͔Δ͜ͱͨ͘͞Μ͋Δ ʮ"1* ͷϨεϙϯεʹԠͯ͡దͳϑΥʔϧόοΫ 6* ͕ඞཁʜʯ ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS _⼈⼈⼈⼈⼈⼈⼈⼈⼈_
> 例外画⾯!!! <  ̄Y^Y^Y^Y^Y^Y^Y^Y^ ̄
(SBQI2-&SSPSͰదͳϑΟʔυόοΫΛఏڙ͢Δ ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS
(SBQI2- &SSPS4QFD • FYUFOTJPOT • l5IJTFOUSZJTSFTFSWFEGPSJNQMFNFOUPSTUPBEE BEEJUJPOBMJOGPSNBUJPOUPFSSPSTIPXFWFSUIFZTFF GJU BOEUIFSFBSFOPBEEJUJPOBMSFTUSJDUJPOTPOJUT DPOUFOUTz
• ϑΟʔϧυՃʹ੍ݶͳͦ͞͏ • ࠓճར༻͢Δͷ FYUFOTJPOTDPEF ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS IUUQTTQFDHSBQIRMPSHESBGUTFD&SSPST
"QPMMP4FSWFS͕࣋ͭྫ֎ 例外クラス extensions.code クラス ApollError INTERNAL_SERVER_ERROR 継承元になるクラス SyntaxError GRAPHQL_PARSE_FAILED サブクラス
ValidationError GRAPHQL_VALIDATION_FAILED サブクラス AuthenticationError UNAUTHENTICATED サブクラス ForbiddenError FORBIDDEN サブクラス UserInputError BAD_USER_INPUT サブクラス ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS
"QPMMPͰͷྫ֎ͷऔΓѻ͍ • SFTPMWFSҎԼͰى͖ͨྫ֎ϑϨʔϜϫʔΫ͕ัଊͯ͠ "QPMMP&SSPSଞʹ͓͖͔͑Δ • ΫΤϦ͕ JOWBMJEͰ͋ΕΑΖ͘͠ 7BMJEBUJPO&SSPSΛૹग़ • 4QFDఆٛͷΤϥʔϨεϙϯεͷΈཱͯ
"QPMMP4FSWFS͕ΑΖ͘͠Δ ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS
ΫϥΠΞϯταΠυʹࣝผࢠʢDPEFʣΛૹΔ • ํ • SFTPMWFSʹྫ֎ૹग़Λूத • ෦తͳྫ֎ΛัଊͰ͖ΔΈΛ༻ҙ ΫϥΠΞϯτʹ࠷దͳ (SBQI2-
&SSPS
ΫϥΠΞϯταΠυͱ࿈ܞ ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS ϓϩάϥϚϒϧͳ࿈ܞํ๏͕Ͱ͖ͳ͔ͬͨͨΊɺυΩϡϝϯτͰڞ༗
ΤϥʔΠϕϯτͱվળɺ·ͱΊ • ϒϥβͰԿ͕ى͜Δ͔Ѳ͢Δ • ϥϯλΠϜΤϥʔɿ։ൃͷͰ͖ͬͪΓ௵͍ͯͩ͘͠͞ • %0.&YDFQUJPOɿ·͋·͋ى͜ΓಘΔɺஅΛ • 8FCΞϓϦέʔγϣϯϒϥβ͕ΠϯλϑΣʔε
• ॳظϦϦʔε࣌Ͱͷ 6*ͷ࡞ΓࠐΈ४උ • ΤϥʔʹΑͬͯஅ͢ΔΛࣄલʹ͓ͯ͘͠ͱྑͦ͞͏ • ػೳΛॆͨͤྑ͍Θ͚Ͱͳ͍ • ͍৺རศੑΛߴΊΔʹՁΛ ΤϥʔΠϕϯτͱվળ
࣍ #''ʹকདྷతͳมߋ༰қੑΛ ઓུϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳ ઓज़ϢʔεέʔεۦಈͰ։ൃ͢Δ ΤϥʔΠϕϯτͱվળ
ΫϥΠΞϯτ ϒϥβͷྫ֎ʹదͳ 6* Λ #''ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ
ఆظతͳϦϦʔεͷ࣮ݱɿϞϒϫʔΫ ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ • ༏ઌͱνʔϜͷҙࢥܾఆΛΠϕϯτԽ ࢪࡦվળ͕ᷓΕ͔͑Δ ༏ઌΛ͚ͭΔ
ϞϒϫʔΫͱͯ͠νʔϜͰ߹ҙ ༏ઌ͕ߴ͚Εཌ 4QSJOUʹ։ൃ ͙͢ϦϦʔε • ཹͤ͞ͳ͍ΈΛνʔϜͰ࣋ͭ
ఆظతͳϦϦʔεͷ࣮ݱɿ3FOPWBUF • ։ൃڥͷ݈શͷͨΊʹ 3FOPWBUF Λಋೖ • ४ͯ͡ຖिΞοϓσʔτ͞Εଓ͚Δ • ʮຍʯͱνʔϜͰݺΜͰ͍Δ •
ຍϞϒϓϩͷҰͰߦ͏ ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ
ఆظతͳϦϦʔεͷ࣮ݱɿͷՄࢹԽ • νʔϜʹσʔλΞφϦετ͕ ໊ࡏ੶ • %BUB4UVEJP ͰՄࢹԽ͍ͯ͠Δ • ঢ়گσΠϦʔ༦ձͰ֬ೝ •
τϐοΫͳͲΛڞ༗͍ͯ͠Δ ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ
·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ ୭͔ͷܾఆ ʻ νʔϜͷ߹ҙɾҙࢥܾఆ ΞʔΩςΫνϟҰൠ ʻ νʔϜڞ௨ݴޠͷΞʔΩςΫνϟ ػೳͷఏڙ ʻ
ػೳͱՁͷఏڙ ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ νʔϜͰεϐʔυΛ࣋ͬͨҙࢥܾఆΛ܁Γฦ͢ͱ ຖिϦϦʔε͢ΔதͰվળલਐ͕વʹͳͬͯ͘Δ
ݱͰಈ͍ͯΔਓ͕ͨͪҰ൪ଚ͍ ྑ͍νʔϜͰɺྑ͍ϓϩμΫτΛ