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
89
mediba におけるフロントエンド, JavaScript / mediba & JavaScript development
tkdn
0
760
未学習領域におけるチーム{学習,プレイ}とは /au Web portal frontend, BIT VALLEY -INSIDE- Vol.8
tkdn
2
3.5k
フロントエンド全身ちぎれ節/BIT VALLEY -INSIDE- Vol4
tkdn
0
69
Other Decks in Technology
See All in Technology
SmartHR プロダクトエンジニア求人ガイド_2025 / PdE job guide 2025
smarthr
0
170
Рекомендации с нуля: как мы в Lamoda превратили главную страницу в ключевую точку входа для персонализированного шоппинга. Данил Комаров, Data Scientist, Lamoda Tech
lamodatech
0
790
SnowflakeとDatabricks両方でRAGを構築してみた
kameitomohiro
1
470
Road to Go Gem #rubykaigi
sue445
0
930
Terraform Cloudで始めるおひとりさまOrganizationsのすゝめ
handy
2
190
「経験の点」の位置を意識したキャリア形成 / Career development with an awareness of the “point of experience” position
pauli
4
110
Writing Ruby Scripts with TypeProf
mame
0
360
“パスワードレス認証への道" ユーザー認証の変遷とパスキーの関係
ritou
1
620
生成AIのユースケースをとにかく集めてまるっと学ぶ!/ all about generative ai usecases
gakumura
2
230
クォータ監視、AWS Organizations環境でも楽勝です✌️
iwamot
PRO
1
340
PostgreSQL Log File Mastery: Optimizing Database Performance Through Advanced Log Analysis
shiviyer007
PRO
0
130
ドキュメント管理の理想と現実
kazuhe
1
230
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
We Have a Design System, Now What?
morganepeng
52
7.5k
Fireside Chat
paigeccino
37
3.4k
Building Applications with DynamoDB
mza
94
6.3k
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.5k
Code Reviewing Like a Champion
maltzj
522
40k
A better future with KSS
kneath
239
17k
BBQ
matthewcrist
88
9.6k
The Pragmatic Product Professional
lauravandoore
33
6.6k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Site-Speed That Sticks
csswizardry
5
500
The Cost Of JavaScript in 2023
addyosmani
49
7.7k
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 ͰՄࢹԽ͍ͯ͠Δ • ঢ়گσΠϦʔ༦ձͰ֬ೝ •
τϐοΫͳͲΛڞ༗͍ͯ͠Δ ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ
·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ ୭͔ͷܾఆ ʻ νʔϜͷ߹ҙɾҙࢥܾఆ ΞʔΩςΫνϟҰൠ ʻ νʔϜڞ௨ݴޠͷΞʔΩςΫνϟ ػೳͷఏڙ ʻ
ػೳͱՁͷఏڙ ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ νʔϜͰεϐʔυΛ࣋ͬͨҙࢥܾఆΛ܁Γฦ͢ͱ ຖिϦϦʔε͢ΔதͰվળલਐ͕વʹͳͬͯ͘Δ
ݱͰಈ͍ͯΔਓ͕ͨͪҰ൪ଚ͍ ྑ͍νʔϜͰɺྑ͍ϓϩμΫτΛ