週一でリリースし続けるためのフロントエンドにおける不確実性との戦い方 / Developers Summit 2020 Summer C-4

週一でリリースし続けるためのフロントエンドにおける不確実性との戦い方 / Developers Summit 2020 Summer C-4

Developers Summit 2020 Summer C-4 で発表した資料です。

365c5067d0c90ef80e3c35d83ed811a3?s=128

Satoshi Takeda

July 21, 2020
Tweet

Transcript

  1. िҰͰϦϦʔε͠ଓ͚ΔͨΊͷ ϑϩϯτΤϯυʹ͓͚Δ ෆ࣮֬ੑͱͷઓ͍ํ %FWFMPQFST4VNNJU4VNNFS $ EFWTVNJ$ גࣜձࣾ NFEJCB෢ా ་

  2. ձࣾ঺հ גࣜձࣾ NFEJCB IUUQTXXXNFEJCBKQ ઃཱ ೥݄೔ ैۀһ਺  ໊ ։ൃऀ਺

     ໊ ೥݄ݱࡏ ,%%*גࣜձࣾͷ BVεϚʔτύεΛத৺ͱͨ͠ BVؔ࿈αʔϏεӡӦͷଞɺ෯޿͍෼໺ͰαʔϏ εΛల։͠ɺϢʔβʔ͕ΠϯλʔωοτΛ௨͡ ͯඞཁͳ࣌ʹඞཁͳ৘ใʹΞΫηεͰ͖Δ؀ڥ ͮ͘ΓͷͨΊͷαʔϏεΛఏڙ͍ͯ͠·͢ɻ
  3. ෢ా ་ !ULEO גࣜձࣾ NFEJCB։ൃ( ϑϩϯτΤϯυΤϯδχΞ ΫϥΠΞϯταΠυ #''ͷ։ൃΛ୲౰ جຊతʹ͸ϒϥ΢β͕ओઓ৔ ɿ໾ऀ

    ɿάϩʔεΤΫεύʔτφʔζגࣜձࣾ ɿάϩʔεɾΠϯΫגࣜձࣾ ɿגࣜձࣾ NFEJCB ࣗݾ঺հ
  4. • ൃද಺༰ • νʔϜʹᴥᴪΛͳ͘͠ಉ͡ޠኮͰΞʔΩςΫνϟΛ૊ΜͰ͍͘࿩ • #'' Ͱѻ͍ͬͯΔ (SBQI2- "1* ͕ϝΠϯͷ࿩

    • ϒϥ΢βͰ͓͖Δྫ֎΍ "1* ͷΤϥʔΛ 6* ͰϑΥϩʔ͢Δ࿩ • ఆظతʹϦϦʔε͢Δ࢓૊Έɺͦͯ͠·ͱΊ • ࿩͞ͳ͍͜ͱ • "QPMMP 4FSWFS ʹ͍ͭͯ৮Ε·͕͢ϥΠϒϥϦͷ࢖͍ํ͸࿩͠·ͤΜ • ΫϥΠΞϯταΠυͰ 3FBDU Λ࢖͍ͬͯ·͕͢ൃදʹ΄΅ग़͖ͯ·ͤΜ • ର৅ऀ • νʔϜͰͷίϛϡχέʔγϣϯʹ೰ΜͰ͍Δํ • ։ൃ్தͰᴥᴪ͕ੜ·Εͨ··ϦϦʔε͕ͨ͠ೲಘͰ͖ͳ͔ͬͨํ • #'' Ͱ "1* Λ։ൃ͍ͨ͠ϑϩϯτΤϯυدΓͷ։ൃऀ • "QPMMP 4FSWFS Λ࢖ͬͨ͜ͱͷ͋Δ։ൃऀ ൃද಺༰ͱ૝ఆର৅ऀ
  5. ຊ୊ʹೖΔલʹ গ͚ͩ͠લఏɾഎܠͷ͓࿩

  6. ϓϩμΫτɿʮຖ೔ϙΠϯτʯ λʔήοτɿBVϢʔβʔ͕ϝΠϯ ϏδωεϞσϧɿ$1$ ใुܕ޿ࠂ ˞ ϦϦʔε࣌͸ୡ੒ײ΍૝ىΛ໨తͱͯ͠ϏδωεΑΓ΋ମݧΛ༏ઌ ఏڙ͍ͨ͠ମݧ BV8FCϙʔλϧ͔Β࢝·ΔϙΠϯτΛஷΊΔମݧΛߏஙৢ੒͢Δ ϙΠϯτ ΠϯηϯςΟϒΛ༻͍ͯBV8FCϙʔλϧΛັྗԽ͢Δ

    ׆༻ͯ͠΋Β͍͍ͨ ϙΠϯτʹର͢ΔϦςϥγʔΛߴΊར׆༻ͯ͠΋Β͏ ೔ʑୡ੒ײΛײ͡ͳ͕Βश׳Խͯ͠΄͍͠ ϓϩμΫτͱഎܠ
  7. ϓϩμΫτɿʮຖ೔ϙΠϯτʯ औΓר͘ঢ়گ • ݄ BV8"--&5ϙΠϯτ͔Β 1POUBϙΠϯτ΁ • ΩϟογϡϨεܾࡁ BV1": •

    BV*%͸ΩϟϦΞϢʔβʔͷΈͳΒͣΦʔϓϯͳ *% ෆ࣮֬ͳཁૉ͕ଟ͍ɺ.71 .JOJNVN7JBCMF1SPEVDU • ϢʔβʔχʔζɾϙΠϯτͷೝ஌౓ • Ͳ͏͍ͬͨػೳΛ௥Ճ͠श׳Խͯ͠΋Β͏͔ • Ϣʔβʔ਺ΛͲͷ͘Β͍ݟࠐΉ͔ ❌ ݕূͷͨΊͷ࡞Γࣺͯɾ࡞Γ௚͠ ⭕ ͋Δఔ౓ͷਫ਼౓Λ্࣋ͬͨͰݕূ͠ͳ͕ΒҭͯΔ ϓϩμΫτͱഎܠ
  8. ϓϩδΣΫτͷഎܠɿ΋ͷͮ͘Γϓϩηε Ϣʔβʔத৺ͷʮ΋ͷͮ͘ΓΧϯύχʔʯͱͯ͠த௕ظతͳ੒ ௕ઓུΛܝ࣮͛ݱ΁޲͚ͨ૊৫ମ੍Λཱ֬͢Δ IUUQXXXNFEJCBKQOFXT • ࡢ೥౓΋ͷͮ͘ΓϓϩηεΛ૑ੜ͢Δ෦ॺॴଐ • ༷ʑͳ৬छʹΑΔϓϩηεɾจԽৢ੒ • ΑΓྑ͍ϫʔΫϑϩʔͷ໛ࡧ΍ࢼߦ

    ʮϓϩδΣΫτʹؔΘΔ ʹ ΋ͷͮ͘ΓΛ͢Δʯਓ ͨͪͷϓϩηεΛΑΓΑ͍΋ͷʹ͢ΔϩʔϧϞσ ϧͱͳΔɺॳΊͯͷ  ͷϓϩδΣΫτ ϓϩμΫτͱഎܠ
  9. ϓϩδΣΫτͷഎܠɿϑϩϯτΤϯυͷڧԽ ະֶशྖҬʹ͓͚ΔνʔϜ\ֶश ϓϨΠ^ͱ͸ !#*57"--&:*/4*%& 7PM • ೥݄ BV8FCϙʔλϧϦχϡʔΞϧ • /FYUKT

    Y(SBQI2-"1* • ϑϩϯτΤϯυڧԽͷͨΊνʔϜମ੍มߋ • ϑϩϯτΤϯυ։ൃऀͷ੹຿Λ૿΍͢ • αʔόʔαΠυ։ൃऀͷεΩϧస׵ • /PEFKT ʹΑΔϑϩϯταʔόʔӡ༻ • 443 (SBQI2- "1* ϓϩμΫτͱഎܠ
  10. ͜͜·Ͱ͕લఏɾഎܠͷ͓࿩

  11. ໨࣍  #''ʹকདྷతͳมߋ༰қੑΛ  ઓུϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳  ઓज़ϢʔεέʔεۦಈͰ։ൃ͢Δ  ΤϥʔΠϕϯτͱվળ 

    ΫϥΠΞϯτ ϒϥ΢βͷྫ֎ʹద੾ͳ 6* Λ  #''ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS  ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ ໨࣍
  12. ໨࣍  #''ʹকདྷతͳมߋ༰қੑΛ  ઓུϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳  ઓज़ϢʔεέʔεۦಈͰ։ൃ͢Δ  ΤϥʔΠϕϯτͱվળ 

    ΫϥΠΞϯτ ϒϥ΢βͷྫ֎ʹద੾ͳ 6* Λ  #''ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS  ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳
  13. .71εϐʔυΛٻΊΒΕ͍ͯΔɺ͕͔͠͠ ʮʓʓΛ΍Γ͍ͨʯ ʮ˚˚͸ࠓճͷείʔϓʹؚΊ͍ͨʯ ͱݴͬͯͨͳʜ֬ূ͸ͳ͍͕ʜ ॳظϦϦʔεʹඞཁͳ͜ͱʜʁ ԿΛٻΊΒΕ͍ͯͯԿΛ༏ઌ͢΂͖ʜʁ ೝࣝͷᴥᴪͬͯͳ͍͔ʜʁ ૬ޓʹೝ஌ͷ࿪Έ͕ͳ͍͔ʜʁ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳

  14. ݟͨ͜ͱ͋Δ΍ͭʢݟͨ͘͸ͳ͍΍ͭʣ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳

  15. ʮԿΛ࡞ͬͯԿΛఏڙ͢Δ༧ఆͳͷ͔Ұ୴੔ཧ͠Α͏ʯ • 10ɺσβΠφʔɺ։ൃऀɺεΫϥϜϚελʔҰಉհ͢Δ • શһ͕ಉ͡ޠኮͰ࿩ͤΔ౔৕͕ʮϢʔεέʔεʯ • γεςϜ༻ޠ͸ൈ͖ʹͯ͠શһ͕ཧղͰ͖Δݴ༿ • ࣗͣͱ༏ઌ౓΋ݟ͑ͯ͘Δ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳

  16. ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳ ϢʔβʔछผʹΑͬͯ͸ϙΠϯτ͕࢖͑ͳ͍ ։ൃऀ ͳΔ΄Ͳʁʢॳࣖ σβΠφʔ ར༻ෆՄͷϢʔβʔʹ͸έΞ͢Δը໘͕ඞཁͦ͏ 10 ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳

  17. ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳ γʔζϯʢ։࠵ظؒʣͬͯγʔϜϨεʹͣͬͱଓ͘ʁ ։ൃऀ Ͳ͏͍͏͜ͱʁ ϝϯςφϯεதɺγʔζϯ֎ͷߟྀ͕ඞཁͦ͏ 10 ։ൃऀ ࿈ܞઌ΍ϝϯςφϯεΛߟྀ͢Δͱඇ࿈ଓతͰͳ͍ͱਏͦ͏ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳

  18. ಉ͡΋ͷΛɺಉ͡໨ઢͰɺνʔϜڞ௨ͷݴޠͰ࡞Δ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳

  19. ༏ઌ౓ɿ҆શੑɺকདྷੑͱεϐʔυ • ҆શੑ զʑ͸Ϣʔβʔࢿ࢈Λ༬͔͍ͬͯΔ • কདྷੑͱεϐʔυ ։ൃظؒͱϦϦʔεޙͷมߋ༰қੑΛߟ͑Δ ྫ͑͹ʜ • 3%4ͷςʔϒϧ͸࠷খߏ੒

    কདྷతʹ͸ςʔϒϧ͕૿͑Δ͔΋͠Εͳ͍ • ؅ཧը໘͸࡞Βͳ͍ ӡ༻͸ඞཁ͕ͩ·ͣ͸खӡ༻ • ӡ༻Ͱ଱͑ΒΕΔม਺͸σʔλετϨʔδͰ؅ཧ • ΞϓϦέʔγϣϯ͸֎෦ετϨʔδͷ +40/ ϑΝΠϧΛࢀর͢Δ • ։࠵ظؒɺϙΠϯτɺίϯςϯπɺαʔϏε͕৳௕͔ͯ͠Β؅ཧը໘ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳
  20. ։ൃνʔϜ͸͢΂ͯϞϒϓϩ • ݸਓʹ஌͕ࣝுΓ෇͘͜ͱΛආ͚Δ • ϙδςΟϒͳҙຯͰૠ͛ସ͕͑Մೳͳঢ়ଶʹ͓ͯ͘͠ • ͜Ε͸͋ͷਓ͔͠Ͱ͖ͳ͍Λపఈతʹආ͚Δ • ઃܭɾઃܭϨϏϡʔɾ࣮૷ɾ୯ମςετͷ΄ͱΜͲϞϒͰߦ͏ •

    ։ൃޙ൒ͷ௥্͍͛ • όοΫΤϯυαʔϏε։ൃʢ(Pʣͷϝϯόʔʹ 5ZQF4DSJQU Πϯετʔϧ • εϓϦϯτͰҰॹʹ૸ͬͯ࣍εϓϦϯτͰλεΫΛרऔΓ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳
  21. ։ൃ͸ॱௐɻ͕ͩɺԶ͸஌ͬͯΔΜͩʜ ࠷ॳͷಉظ͔ΒঃʑʹζϨʜ ૯߹ςετதʹόάͱ͸ແؔ܎ͳ࿩ʜ ʮͬͯ͜͜͜͏͡Όͳ͔ͬͨΜͰ͚ͨͬ͠ʁʯ ʮʓʓ͕͜ͷ΄͏͕ྑ͍ͱݴͬͨͷͰม͍͑ͯͩ͘͞ʯ ͋ΘΘΘ͋ΘΘΘΘΘΘΘΘͬΘΘΘͬΘΘΘΘΘ͋͋ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳

  22. ࠶ܝ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳

  23. ϦΧόϦʔ͕ޮ͘λΠϛϯάͰ࠶౓Ϣʔεέʔεͷ֬ೝ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳

  24. ෆ࣮֬ੑΛ࡟ݮͤ͞ΔͨΊͷɺզʑͷઓུ • εϐʔυΛॏࢹͭͭ͠΋ϦΧόϦʔՄೳͳ஍఺ʹ͸ඞͣಉظΛ • ։ൃ͸શͯϞϒϓϩͰ࣮ࢪ͠஌ࣝ΍ཧղͷภΓΛͳ͘͢ • ζϨ͸Ͳ͔͜Ͱى͖ΔͷͰൃࢄͱऩଋͷόϥϯεײ֮Λ΋ͭ ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳

  25. ໨࣍  #''ʹকདྷతͳมߋ༰қੑΛ  ઓུϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳  ઓज़ϢʔεέʔεۦಈͰ։ൃ͢Δ  ΤϥʔΠϕϯτͱվળ 

    ΫϥΠΞϯτ ϒϥ΢βͷྫ֎ʹద੾ͳ 6* Λ  #''ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS  ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ  ϢʔεέʔεۦಈͰ։ൃ͢Δ
  26. ϢʔεέʔεۦಈͰ։ൃ͢Δʁ 6TFDBTF%SJWFO OPU.PEFM%SJWFO ΫϦʔϯΞʔΩςΫνϟಉ৺ԁͷΤϯςΟςΟ͸ υϝΠϯۦಈઃܭͷதͰϞσϧΛத৺ʹͨ͠։ൃख๏ͰޠΒΕΔ ࠓճ͸ϞσϧͰ͸ͳ͘ϢʔεέʔεۦಈͰ։ൃ͍ͯ͠Δ  ϢʔεέʔεۦಈͰ։ൃ͢Δ

  27. #'' #BDLFOE'PS'SPOUFOE (SBQI2- • ΫϥΠΞϯταΠυϝϦοτ • ⭕ ΫϥΠΞϯτ͔Βͷը໘ʹରͯ͠ඞཁͳϦΫΤετޮ཰͕޲্ • ΫϥΠΞϯτ͕ϢʔεέʔεʹԠͯ͡ΫΤϦΛ૊ΈཱͯΔ͜ͱ͕Մೳ

    • ࠓճ͸ෳࡶͳϩδοΫΛΫϥΠΞϯτʹدͤͨ͘͸ͳ͍ • #'' ϝϦοτ • ރΕͯάϩʔεର৅Ͱ͸ͳ͍طଘ "1*ΛΞάϦήʔτ͠৽ن "1*ͱͯ͠࠶ར༻ • ΫϥΠΞϯταΠυɾ#'' ڞ௨ͷϝϦοτ • ⭕ εΩʔϚʹΑͬͯ΋ͨΒ͞ΕΔ૒ํϑϨϯυϦʔͳ։ൃମ੍ߏங  ϢʔεέʔεۦಈͰ։ൃ͢Δ
  28. &YQSFTT "QPMMP 4FSWFS  ϢʔεέʔεۦಈͰ։ൃ͢Δ

  29. ʢࡶͳʣ݁ࠗͱ͸ਓੜͷุ৔Ͱ͋Δ lࣗ෼ͷΞϓϦέʔγϣϯͰԿΒ͔ͷϑϨʔϜϫʔΫΛ࢖͏͜ͱʹܾΊͨ࣌ ఺ͰɺͦͷΞϓϦέʔγϣϯ͸ϑϨʔϜϫʔΫʹറΒΕΔ͜ͱʹͳΔͷͩͱ ೝ͓ࣝͯ͘͠ඞཁ͕͋Δɻ޾͍ͷͱ͖΋ɺࡂ͍ͷͱ͖΋ɺ๛͔ͳͱ͖΋ɺශ ͍͠ͱ͖΋ɺ݈΍͔ͳΔͱ͖΋ɺපΊΔͱ͖΋ɺ΄͔ͷ͢΂ͯΛ٘ਜ਼ʹͯ͠ Ͱ΋ɺͦͷϑϨʔϜϫʔΫΛ࢖͏͜ͱʹͳΔɻؾܰʹड͚ೖΕΒΕΔΑ͏ͳ ΋ͷͰ͸ͳ͍ɻz $MFBO"SDIJUFDUVSF ୈষ ϑϨʔϜϫʔΫ͸ৄࡉ

     ϢʔεέʔεۦಈͰ։ൃ͢Δ
  30. ݱ࣮  ϢʔεέʔεۦಈͰ։ൃ͢Δ

  31. εϐʔυײΛอͪͳ͕Βมߋ༰қੑΛ࣋ͯΔ࠷దղ • ٻΊΒΕ͍ͯΔ΋ͷ • νʔϜͰ߹ҙͨ͠ڞ௨ͷݴޠͱϢʔεέʔε • ϓϩμΫτͷ৳௕Λߟྀͨ͠มߋ༰қੑ • σʔλϕʔεɺετϨʔδɺΩϟογϡͳͲ઀ଓઌ͕มΘΔՄೳੑ •

    มߋΛ͙͢ʹٻΊΒΕΔ͜ͱ • Ձ஋ݕূ΍ϢʔβϏϦςΟςετͰมߋ͕ଟ͘૸Δͷ͸ϒϥ΢βͷ (6* • #'' ͕໨ࢦ͍ͨ͠ͱ͜Ζ • ΫϥΠΞϯταΠυͰͷϢʔεέʔεΛϕʔεʹͨ͠ "1*  ϢʔεέʔεۦಈͰ։ൃ͢Δ
  32. ϢʔεέʔεΛத৺ʹ͢Δ l༏ΕͨΞʔΩςΫνϟ͸ϢʔεέʔεΛத৺ʹ͍ͯ͠ ΔͨΊɺϑϨʔϜϫʔΫɺπʔϧɺ؀ڥʹґଘ͢Δ͜ͱ ͳ͘ɺϢʔεέʔεΛαϙʔτ͢Δߏ଄Λ໰୊ͳ͘આ໌ Ͱ͖Δz $MFBO"SDIJUFDUVSFୈ ষ ڣͿΞʔΩςΫνϟ  ϢʔεέʔεۦಈͰ։ൃ͢Δ

    • νʔϜ͕࣋ͭಉ͡ޠኮ Ϣʔεέʔε • ϢʔεέʔεΛʮํ਑ʯͱͯ͠த৺ʹਾ͑Δ • ΫϦʔϯΞʔΩςΫνϟͷத৺ʹ͋ΔΤϯςΟςΟ͸ͳ͍
  33. SFTPMWFS͸ϢʔεέʔεΛ࣮ߦ  ϢʔεέʔεۦಈͰ։ൃ͢Δ

  34. มߋ༰қੑ lιʔείʔυͷґଘੑ͸ɺ಺ଆʢ্ҐϨϕϧͷํ਑ʣͩ ͚ʹ޲͔͍ͬͯͳ͚Ε͹͍͚ͳ͍ɻz $MFBO"SDIJUFDUVSF ୈ ষ ΫϦʔϯΞʔΩςΫνϟ ґଘੑͷϧʔϧ  ϢʔεέʔεۦಈͰ։ൃ͢Δ

    • ࠶ܝ ϓϩμΫτͷ৳௕Λߟྀͨ͠มߋ༰қੑ • σʔλϕʔεɺετϨʔδɺΩϟογϡͳͲ઀ ଓઌ͕༰қʹมߋɾૠ͛ସ͑Ͱ͖ͳ͍ • Ϣʔεέʔε͸֎෦઀ଓʹؔ৺͕͋Δঢ়ଶ
  35. ґଘͷํ޲͸ඞ্ͣҐϨϕϧʹͷΈ޲͔͏ • ͭͷΤοηϯε͚ͩΛநग़ • ґଘؔ܎ٯసͷ๏ଇ %*1 • ੹຿ͷ෼཭ɺద੾ͳϨΠϠϦϯά • ӈԼͷͪ͜Όͪ͜Όͨ͠΍ͭ͸ࠓճআ֎

     ϢʔεέʔεۦಈͰ։ൃ͢Δ
  36. ੹຿ͷ෼཭ɺϨΠϠϦϯά  ϢʔεέʔεۦಈͰ։ൃ͢Δ

  37. 6TFDBTF ͸֎ͷϨΠϠʔʹґଘ͠ͳ͍  ϢʔεέʔεۦಈͰ։ൃ͢Δ

  38. "EBQUPS ͸ 6TFDBTF ʹґଘ  ϢʔεέʔεۦಈͰ։ൃ͢Δ

  39. "EBQUPS ΋ίϯετϥΫλͰ %*  ϢʔεέʔεۦಈͰ։ൃ͢Δ ϥΠϒϥϦ΁ͷؔ৺Λ֎΁ • )551ϦΫΤετ͍ͨ͠ • ྫ

    OPEFGFUDI • 03.࢖͍͍ͨ • ྫ 5ZQF03. • ۩ମతʹओுͨ͘͠ͳ͍ ୯ମςετΛॻ͖΍͍͢ • ґଘΛ໛฿͢Δܕߏ଄Λ஫ೖ ͢Δ͚ͩ
  40. *OGSBTUSVDUVSF • ͱʹ͔͘஌ࣝΛ࣋ͨͤͳ͍ • ϥΠϒϥϦ΍ϑϨʔϜϫʔΫ͕ఏ ڙ͢Δ΋ͷΛ७๿ʹ഑ஔ  ϢʔεέʔεۦಈͰ։ൃ͢Δ

  41. &OUJUJFT ʁʁʁ &OUFSQSJTF#VTJOFTT3VMFT&OUJUJFTʁ  ϢʔεέʔεۦಈͰ։ൃ͢Δ • $MFBO "SDIJUFDUVSF த৺ʹΤϯςΟςΟΛਾ͑ͨ Ϟσϧۦಈ։ൃͰ͸ͳ͍

    • νʔϜڞ௨ݴޠͱϢʔεέʔεΛϕʔεʹͨ͠ Ϣʔεέʔεۦಈͷ։ൃ • ϏδωεϧʔϧͳͲ͸ࣗͣͱΤϯςΟςΟʢϞσϧʣʹ
  42. %*1ͱద੾ͳϨΠϠϦϯά͚ͩͰ΋ಘΒΕΔϝϦοτ • ֦ॆ΍मਖ਼͠΍͢͞Λओ؟ͱͨ͠ͷͰӡ༻͕ਏ͘ͳ͍ • νʔϜڞ௨ݴޠΛར༻ͨ͠ϢʔεέʔεϕʔεͳͷͰဃ཭͕ͳ͍ • ࠷େͷ໨తͩͬͨΫϥΠΞϯταΠυ΁ͷෛՙ͸ۃྗബ͘Ͱ͖ͨ ΞʔΩςΫνϟϑΝʔετͰ͸ͳ͘ ϓϩμΫτϑΝʔετͳ࠷௿ݶͷΞʔΩςΫνϟ 

    ϢʔεέʔεۦಈͰ։ൃ͢Δ
  43. զʑͷ #'' ઓུɾઓज़·ͱΊ • εϐʔυΛٻΊΒΕΔέʔεͰ΋߹ྲྀ஍఺Λ • ઓ͏΂͖͸૬ޓͷೝࣝᴥᴪͰ͸ͳ͍ • ઓ͏΂͖͸ϏδωεΛࠓޙ৳௕͍ͯ͘͠ʹ͋ͨͬͯͷෆ࣮֬ੑ •

    ͦͷͨΊʹઌਓͷ࢒ͨ͠ΞʔΩςΫνϟͷΤοηϯε͕͋Δ͸ͣ • νʔϜڞ௨ͷݴޠͰ໨ઢͷߴ͞Λ߹Θ͓ͤͯ͘ • ಉ͡໨ઢͰର࿩Ͱ͖Δ಺༰͕ίʔυʹసࣸ͞Ε͍ͯΔ #''ʹকདྷతͳมߋ༰қੑΛ
  44. ໨࣍  #''ʹকདྷతͳมߋ༰қੑΛ  ઓུϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳  ઓज़ϢʔεέʔεۦಈͰ։ൃ͢Δ  ΤϥʔΠϕϯτͱվળ 

    ΫϥΠΞϯτ ϒϥ΢βͷྫ֎ʹద੾ͳ 6* Λ  #''ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS  ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ ϒϥ΢βͷྫ֎ʹద੾ͳ 6* Λ
  45. ϒϥ΢βͷྫ֎ 3FGFSFODF&SSPS 4ZOUBY&SSPS 5ZQF&SSPS ϒϥ΢βͷྫ֎ʹద੾ͳ 6* Λ

  46. ϒϥ΢βͷྫ֎ɿ%0.&YDFQUJPO • IUUQTIFZDBNHJUIVCJPXFCJEMJEM %0.&YDFQUJPO • %0.͔Βࢀর͍ͯ͠Δ 8FC*%- Ͱఆٛ • ྫ

    • ୺຤ͷ௨৴ෆ௨ʹΑΔΤϥʔ • ϒϥ΢βઃఆʹΑͬͯग़Δ͜ͱ΋͋ͬͨΓ ϒϥ΢βͷྫ֎ʹద੾ͳ 6* Λ
  47. ϦϦʔε౰ॳͷྫ֎ัଊ࣌ͷը໘ • 3FBDU &SSPS#PVOEBSZ ͰϑΥϩʔ • ΤϥʔΠϕϯτૹ৴ͱϑΥʔϧόοΫ 6*ͷදࣔ ϒϥ΢βͷྫ֎ʹద੾ͳ 6*

    Λ
  48. /FUXPSL&SSPSɿωοτϫʔΫͷෆ௨ • ΄ͱΜͲ؃աͯ͠Α͍ • ೔ຖ ສ΄ͲΠϕϯτ্͕͕ͬͯ͘Δ • Ұ࣌తʹωοτϫʔΫঢ়گ͕ѱ͘ͳΔɺλΠϜΞ΢τ • $IVOL-PBE&SSPS-PBEJOHDIVOLGBJMFE

    • 6ODBVHIU JOQSPNJTF 5ZQF&SSPS'BJMFEUPGFUDI ϒϥ΢βͷྫ֎ʹద੾ͳ 6* Λ
  49. 4FDVSJUZ&SSPSɿ+BWB4DSJQU͔Β JOTFDVSFͳૢ࡞ 4FDVSJUZ&SSPS'BJMFEUPSFBEUIFMPDBM4UPSBHFQSPQFSUZGSPN8JOEPX"DDFTTJTEFOJFEGPSUIJTEPDVNFOU ϒϥ΢βͷྫ֎ʹద੾ͳ 6* Λ

  50. %0.&YDFQUJPOʹ΋ֻ͔Βͳ͍૝ఆ֎ • ΤϥʔΠϕϯτ͕ൃੜ͠ͳ͍έʔε • ัଊͰ͖ͣʹՄࢹԽ͢Δ͜ͱ͕೉͍͠ • ྫɿ XJOEPXPQFO ʹΑΔϙοϓΞοϓϒϩοΫ ϒϥ΢βͷྫ֎ʹద੾ͳ

    6* Λ
  51. XJOEPXPQFO͸ BCVTF͞ΕΔϢʔεέʔε͕ଟ͍ ϢʔβʔମݧΛ޲্ͤ͞ΔͨΊͷ৽͍͠΢Οϯυ΢Λ։͘ͱ͍͏໨త͕͋Δʹ΋ؔΘ Βͣɺ޿ࠂΛ։ͨ͘Ίʹѱ༻͞Ε͍ͯΔɻϢʔβʔΠϕϯτͰ͋ΔΩʔԡԼɾϚ΢ε ΫϦοΫҎ֎Ͱཁٻ͞Εͨ৔߹͸ϒϩοΫ͞ΕΔ ϒϥ΢βͷྫ֎ʹద੾ͳ 6* Λ l 5IFXJOEPXPQFO

    "1*IBTCFFOBCVTFEUPPQFOJOUSVTJWFBEWFSUJTJOH XIJDI JTSFHSFUGVMTJODFUIFSFBSFMFHJUJNBUFSFBTPOTUPPQFOBOFXXJOEPXUIBU FOIBODFVTFSFYQFSJFODF5SBEJUJPOBMMZ QPQVQXJOEPXTBSFCMPDLFEXIFOUIFZ BSFOUFYQMJDJUMZSFRVFTUFECZBVTFSLFZQSFTTPSNPVTFDMJDLz IUUQTXXXDISPNJVNPSHEFWFMPQFSTEFTJHOEPDVNFOUTDPOTUSBJOFEQPQVQXJOEPXT
  52. υΩϡϝϯτʹ໌ࣔ͞Εͯͳ͍͜ͱ ϒϥ΢βͷྫ֎ʹద੾ͳ 6* Λ _⼈⼈⼈⼈⼈⼈⼈⼈⼈⼈⼈⼈⼈⼈⼈_ > ポップアップブロック!!! <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄

  53. ໨࣍  #''ʹকདྷతͳมߋ༰қੑΛ  ઓུϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳  ઓज़ϢʔεέʔεۦಈͰ։ൃ͢Δ  ΤϥʔΠϕϯτͱվળ 

    ΫϥΠΞϯτ ϒϥ΢βͷྫ֎ʹద੾ͳ 6* Λ  #''ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS  ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ  ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS
  54. ϦϦʔεޙ෼͔Δ͜ͱ͸ͨ͘͞Μ͋Δ ʮͣͬͱಉ͡λϒͰར༻͞ΕΔ૝ఆ͕ͩͬͨผλϒͰ΋։͘έʔε͕ଟͦ͏ʯ  ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS _⼈⼈⼈⼈⼈⼈⼈⼈⼈_ > 例外画⾯!!! <

     ̄Y^Y^Y^Y^Y^Y^Y^Y^ ̄
  55. ϦϦʔεޙ෼͔Δ͜ͱ͸ͨ͘͞Μ͋Δ ʮ"1* ͷϨεϙϯεʹԠͯ͡ద੾ͳϑΥʔϧόοΫ 6* ͕ඞཁʜʯ  ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS _⼈⼈⼈⼈⼈⼈⼈⼈⼈_

    > 例外画⾯!!! <  ̄Y^Y^Y^Y^Y^Y^Y^Y^ ̄
  56. (SBQI2-&SSPSͰద੾ͳϑΟʔυόοΫΛఏڙ͢Δ  ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS

  57. (SBQI2- &SSPS4QFD • FYUFOTJPOT • l5IJTFOUSZJTSFTFSWFEGPSJNQMFNFOUPSTUPBEE BEEJUJPOBMJOGPSNBUJPOUPFSSPSTIPXFWFSUIFZTFF GJU BOEUIFSFBSFOPBEEJUJPOBMSFTUSJDUJPOTPOJUT DPOUFOUTz

    • ϑΟʔϧυ௥Ճʹ੍ݶ͸ͳͦ͞͏ • ࠓճར༻͢Δͷ͸ FYUFOTJPOTDPEF  ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS IUUQTTQFDHSBQIRMPSHESBGUTFD&SSPST
  58. "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
  59. "QPMMPͰͷྫ֎ͷऔΓѻ͍ • SFTPMWFSҎԼͰى͖ͨྫ֎͸ϑϨʔϜϫʔΫ͕ัଊͯ͠ "QPMMP&SSPSଞʹ͓͖͔͑Δ • ΫΤϦ͕ JOWBMJEͰ͋Ε͹ΑΖ͘͠ 7BMJEBUJPO&SSPSΛૹग़ • 4QFDఆٛͷΤϥʔϨεϙϯεͷ૊Έཱͯ͸

    "QPMMP4FSWFS͕ΑΖ͘͠΍Δ  ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS
  60. ΫϥΠΞϯταΠυʹࣝผࢠʢDPEFʣΛૹΔ • ํ਑ • SFTPMWFSʹྫ֎ૹग़Λूத • ಺෦తͳྫ֎ΛัଊͰ͖Δ࢓૊ΈΛ༻ҙ  ΫϥΠΞϯτʹ࠷దͳ (SBQI2-

    &SSPS
  61. ΫϥΠΞϯταΠυͱ࿈ܞ  ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS ϓϩάϥϚϒϧͳ࿈ܞํ๏͕Ͱ͖ͳ͔ͬͨͨΊɺυΩϡϝϯτͰڞ༗

  62.  ΤϥʔΠϕϯτͱվળɺ·ͱΊ • ϒϥ΢βͰԿ͕ى͜Δ͔೺Ѳ͢Δ • ϥϯλΠϜΤϥʔɿ։ൃͷ੹຿Ͱ͖ͬͪΓ௵͍ͯͩ͘͠͞ • %0.&YDFQUJPOɿ·͋·͋ى͜ΓಘΔɺ౎౓൑அΛ • 8FCΞϓϦέʔγϣϯ͸ϒϥ΢β͕ΠϯλϑΣʔε

    • ॳظϦϦʔε࣌఺Ͱͷ 6*ͷ࡞ΓࠐΈ४උ • ΤϥʔʹΑͬͯ൑அ͢Δ޻෉Λࣄલʹ͓ͯ͘͠ͱྑͦ͞͏ • ػೳΛॆͨͤ͹ྑ͍Θ͚Ͱ͸ͳ͍ • ࢖͍৺஍΍རศੑΛߴΊΔ఺ʹ΋Ձ஋Λ ΤϥʔΠϕϯτͱվળ
  63. ໨࣍  #''ʹকདྷతͳมߋ༰қੑΛ  ઓུϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳  ઓज़ϢʔεέʔεۦಈͰ։ൃ͢Δ  ΤϥʔΠϕϯτͱվળ 

    ΫϥΠΞϯτ ϒϥ΢βͷྫ֎ʹద੾ͳ 6* Λ  #''ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS  ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ  ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ
  64. ఆظతͳϦϦʔεͷ࣮ݱɿϞϒϫʔΫ  ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ • ༏ઌ౓ͱνʔϜͷҙࢥܾఆΛΠϕϯτԽ  ࢪࡦ΍վળ͕ᷓΕ͔͑Δ  ༏ઌ౓Λ͚ͭΔ 

    ϞϒϫʔΫͱͯ͠νʔϜͰ߹ҙ  ༏ઌ౓͕ߴ͚Ε͹ཌ 4QSJOUʹ͸։ൃ  ͙͢ϦϦʔε • ଺ཹͤ͞ͳ͍࢓૊ΈΛνʔϜͰ࣋ͭ
  65. ఆظతͳϦϦʔεͷ࣮ݱɿ3FOPWBUF • ։ൃ؀ڥͷ݈શͷͨΊʹ 3FOPWBUF Λಋೖ • ४ͯ͡ຖिΞοϓσʔτ͞Εଓ͚Δ • ʮຍ࠿ʯͱνʔϜ಺ͰݺΜͰ͍Δ •

    ຍ࠿΋ϞϒϓϩͷҰ؀Ͱߦ͏  ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ
  66. ఆظతͳϦϦʔεͷ࣮ݱɿ਺஋ͷՄࢹԽ • νʔϜʹ͸σʔλΞφϦετ͕ ໊ࡏ੶ • %BUB4UVEJP ͰՄࢹԽ͍ͯ͠Δ • ঢ়گ͸σΠϦʔ༦ձͰ֬ೝ •

    τϐοΫͳͲΛڞ༗͍ͯ͠Δ  ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ
  67.  ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ ୭͔ͷܾఆ ʻ νʔϜͷ߹ҙɾҙࢥܾఆ ΞʔΩςΫνϟҰൠ࿦ ʻ νʔϜڞ௨ݴޠͷΞʔΩςΫνϟ ػೳͷఏڙ ʻ

    ػೳͱՁ஋ͷఏڙ  ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ νʔϜͰεϐʔυΛ࣋ͬͨҙࢥܾఆΛ܁Γฦ͢ͱ ຖिϦϦʔε͢ΔதͰվળ΍લਐ͕౰વʹͳͬͯ͘Δ
  68. ݱ৔Ͱಈ͍ͯΔਓ͕ͨͪҰ൪ଚ͍ ྑ͍νʔϜͰɺྑ͍ϓϩμΫτΛ