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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Satoshi Takeda
July 21, 2020
Technology
1.5k
2
Share
週一でリリースし続けるためのフロントエンドにおける不確実性との戦い方 / Developers Summit 2020 Summer C-4
Developers Summit 2020 Summer C-4 で発表した資料です。
Satoshi Takeda
July 21, 2020
More Decks by Satoshi Takeda
See All by Satoshi Takeda
フロントエンド、私的リリース戦略史 / Connehito Marche Online Front-End release strategy
tkdn
0
130
mediba におけるフロントエンド, JavaScript / mediba & JavaScript development
tkdn
0
830
未学習領域におけるチーム{学習,プレイ}とは /au Web portal frontend, BIT VALLEY -INSIDE- Vol.8
tkdn
2
3.6k
フロントエンド全身ちぎれ節/BIT VALLEY -INSIDE- Vol4
tkdn
0
100
Other Decks in Technology
See All in Technology
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.1k
解剖"React Native"
hacusk
0
120
NOSTR, réseau social et espace de liberté décentralisé
rlifchitz
0
150
会社紹介資料 / Sansan Company Profile
sansan33
PRO
16
410k
Strands Agents × Amazon Bedrock AgentCoreで パーソナルAIエージェントを作ろう
yokomachi
2
270
終盤で崩壊させないAI駆動開発
j5ik2o
0
480
バックオフィスPJのPjMをコーポレートITが担うとうまくいく3つの理由
yueda256
1
300
Zero-Downtime Migration: Moving a Massive, Historic iOS App from CocoaPods to SPM and Tuist without Stopping Feature Delivery
kagemiku
0
230
システムは「動く」だけでは 足りない - 非機能要件・分散システム・トレードオフの基礎
nwiizo
25
8.2k
Zero Data Loss Autonomous Recovery Service サービス概要
oracle4engineer
PRO
5
14k
ある製造業の会社全体のAI化に1エンジニアが挑んだ話
kitami
2
860
システムは「動く」だけでは足りない 実装編 - 非機能要件・分散システム・トレードオフをコードで見る
nwiizo
2
320
Featured
See All Featured
Paper Plane
katiecoart
PRO
1
49k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
510
A designer walks into a library…
pauljervisheath
211
24k
Code Reviewing Like a Champion
maltzj
528
40k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Unsuck your backbone
ammeep
672
58k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
Color Theory Basics | Prateek | Gurzu
gurzu
0
280
Large-scale JavaScript Application Architecture
addyosmani
515
110k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
96
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.5k
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 ͰՄࢹԽ͍ͯ͠Δ • ঢ়گσΠϦʔ༦ձͰ֬ೝ •
τϐοΫͳͲΛڞ༗͍ͯ͠Δ ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ
·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ ୭͔ͷܾఆ ʻ νʔϜͷ߹ҙɾҙࢥܾఆ ΞʔΩςΫνϟҰൠ ʻ νʔϜڞ௨ݴޠͷΞʔΩςΫνϟ ػೳͷఏڙ ʻ
ػೳͱՁͷఏڙ ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ νʔϜͰεϐʔυΛ࣋ͬͨҙࢥܾఆΛ܁Γฦ͢ͱ ຖिϦϦʔε͢ΔதͰվળલਐ͕વʹͳͬͯ͘Δ
ݱͰಈ͍ͯΔਓ͕ͨͪҰ൪ଚ͍ ྑ͍νʔϜͰɺྑ͍ϓϩμΫτΛ