$30 off During Our Annual Pro Sale. View Details »

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

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

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

Satoshi Takeda

July 21, 2020
Tweet

More Decks by Satoshi Takeda

Other Decks in Technology

Transcript

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

    View Slide

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

    ,%%*גࣜձࣾͷ BVεϚʔτύεΛத৺ͱͨ͠
    BVؔ࿈αʔϏεӡӦͷଞɺ෯޿͍෼໺ͰαʔϏ
    εΛల։͠ɺϢʔβʔ͕ΠϯλʔωοτΛ௨͡
    ͯඞཁͳ࣌ʹඞཁͳ৘ใʹΞΫηεͰ͖Δ؀ڥ
    ͮ͘ΓͷͨΊͷαʔϏεΛఏڙ͍ͯ͠·͢ɻ

    View Slide

  3. ෢ా ་ !ULEO
    גࣜձࣾ NFEJCB։ൃ(
    ϑϩϯτΤϯυΤϯδχΞ
    ΫϥΠΞϯταΠυ #''ͷ։ൃΛ୲౰
    جຊతʹ͸ϒϥ΢β͕ओઓ৔
    ɿ໾ऀ
    ɿάϩʔεΤΫεύʔτφʔζגࣜձࣾ
    ɿάϩʔεɾΠϯΫגࣜձࣾ
    ɿגࣜձࣾ NFEJCB
    ࣗݾ঺հ

    View Slide

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

    View Slide

  5. ຊ୊ʹೖΔલʹ
    গ͚ͩ͠લఏɾഎܠͷ͓࿩

    View Slide

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

    View Slide

  7. ϓϩμΫτɿʮຖ೔ϙΠϯτʯ
    औΓר͘ঢ়گ
    • ݄ BV8"--&5ϙΠϯτ͔Β 1POUBϙΠϯτ΁
    • ΩϟογϡϨεܾࡁ BV1":
    • BV*%͸ΩϟϦΞϢʔβʔͷΈͳΒͣΦʔϓϯͳ *%
    ෆ࣮֬ͳཁૉ͕ଟ͍ɺ.71 .JOJNVN7JBCMF1SPEVDU

    • ϢʔβʔχʔζɾϙΠϯτͷೝ஌౓
    • Ͳ͏͍ͬͨػೳΛ௥Ճ͠श׳Խͯ͠΋Β͏͔
    • Ϣʔβʔ਺ΛͲͷ͘Β͍ݟࠐΉ͔
    ❌ ݕূͷͨΊͷ࡞Γࣺͯɾ࡞Γ௚͠
    ⭕ ͋Δఔ౓ͷਫ਼౓Λ্࣋ͬͨͰݕূ͠ͳ͕ΒҭͯΔ
    ϓϩμΫτͱഎܠ

    View Slide

  8. ϓϩδΣΫτͷഎܠɿ΋ͷͮ͘Γϓϩηε
    Ϣʔβʔத৺ͷʮ΋ͷͮ͘ΓΧϯύχʔʯͱͯ͠த௕ظతͳ੒
    ௕ઓུΛܝ࣮͛ݱ΁޲͚ͨ૊৫ମ੍Λཱ֬͢Δ
    IUUQXXXNFEJCBKQOFXT
    • ࡢ೥౓΋ͷͮ͘ΓϓϩηεΛ૑ੜ͢Δ෦ॺॴଐ
    • ༷ʑͳ৬छʹΑΔϓϩηεɾจԽৢ੒
    • ΑΓྑ͍ϫʔΫϑϩʔͷ໛ࡧ΍ࢼߦ
    ʮϓϩδΣΫτʹؔΘΔ ʹ ΋ͷͮ͘ΓΛ͢Δʯਓ
    ͨͪͷϓϩηεΛΑΓΑ͍΋ͷʹ͢ΔϩʔϧϞσ
    ϧͱͳΔɺॳΊͯͷ ͷϓϩδΣΫτ
    ϓϩμΫτͱഎܠ

    View Slide

  9. ϓϩδΣΫτͷഎܠɿϑϩϯτΤϯυͷڧԽ
    ະֶशྖҬʹ͓͚ΔνʔϜ\ֶश ϓϨΠ^ͱ͸
    !#*57"--&:*/4*%& 7PM
    • ೥݄ BV8FCϙʔλϧϦχϡʔΞϧ
    • /FYUKT Y(SBQI2-"1*
    • ϑϩϯτΤϯυڧԽͷͨΊνʔϜମ੍มߋ
    • ϑϩϯτΤϯυ։ൃऀͷ੹຿Λ૿΍͢
    • αʔόʔαΠυ։ൃऀͷεΩϧస׵
    • /PEFKT ʹΑΔϑϩϯταʔόʔӡ༻
    • 443 (SBQI2- "1*
    ϓϩμΫτͱഎܠ

    View Slide

  10. ͜͜·Ͱ͕લఏɾഎܠͷ͓࿩

    View Slide

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

    View Slide

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

    View Slide

  13. .71εϐʔυΛٻΊΒΕ͍ͯΔɺ͕͔͠͠
    ʮʓʓΛ΍Γ͍ͨʯ
    ʮ˚˚͸ࠓճͷείʔϓʹؚΊ͍ͨʯ
    ͱݴͬͯͨͳʜ֬ূ͸ͳ͍͕ʜ
    ॳظϦϦʔεʹඞཁͳ͜ͱʜʁ
    ԿΛٻΊΒΕ͍ͯͯԿΛ༏ઌ͢΂͖ʜʁ
    ೝࣝͷᴥᴪͬͯͳ͍͔ʜʁ
    ૬ޓʹೝ஌ͷ࿪Έ͕ͳ͍͔ʜʁ
    ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  19. ༏ઌ౓ɿ҆શੑɺকདྷੑͱεϐʔυ
    • ҆શੑ զʑ͸Ϣʔβʔࢿ࢈Λ༬͔͍ͬͯΔ
    • কདྷੑͱεϐʔυ ։ൃظؒͱϦϦʔεޙͷมߋ༰қੑΛߟ͑Δ
    ྫ͑͹ʜ
    • 3%4ͷςʔϒϧ͸࠷খߏ੒ কདྷతʹ͸ςʔϒϧ͕૿͑Δ͔΋͠Εͳ͍
    • ؅ཧը໘͸࡞Βͳ͍ ӡ༻͸ඞཁ͕ͩ·ͣ͸खӡ༻
    • ӡ༻Ͱ଱͑ΒΕΔม਺͸σʔλετϨʔδͰ؅ཧ
    • ΞϓϦέʔγϣϯ͸֎෦ετϨʔδͷ +40/ ϑΝΠϧΛࢀর͢Δ
    • ։࠵ظؒɺϙΠϯτɺίϯςϯπɺαʔϏε͕৳௕͔ͯ͠Β؅ཧը໘
    ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳

    View Slide

  20. ։ൃνʔϜ͸͢΂ͯϞϒϓϩ
    • ݸਓʹ஌͕ࣝுΓ෇͘͜ͱΛආ͚Δ
    • ϙδςΟϒͳҙຯͰૠ͛ସ͕͑Մೳͳঢ়ଶʹ͓ͯ͘͠
    • ͜Ε͸͋ͷਓ͔͠Ͱ͖ͳ͍Λపఈతʹආ͚Δ
    • ઃܭɾઃܭϨϏϡʔɾ࣮૷ɾ୯ମςετͷ΄ͱΜͲϞϒͰߦ͏
    • ։ൃޙ൒ͷ௥্͍͛
    • όοΫΤϯυαʔϏε։ൃʢ(Pʣͷϝϯόʔʹ 5ZQF4DSJQU Πϯετʔϧ
    • εϓϦϯτͰҰॹʹ૸ͬͯ࣍εϓϦϯτͰλεΫΛרऔΓ
    ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳

    View Slide

  21. ։ൃ͸ॱௐɻ͕ͩɺԶ͸஌ͬͯΔΜͩʜ
    ࠷ॳͷಉظ͔ΒঃʑʹζϨʜ
    ૯߹ςετதʹόάͱ͸ແؔ܎ͳ࿩ʜ
    ʮͬͯ͜͜͜͏͡Όͳ͔ͬͨΜͰ͚ͨͬ͠ʁʯ
    ʮʓʓ͕͜ͷ΄͏͕ྑ͍ͱݴͬͨͷͰม͍͑ͯͩ͘͞ʯ
    ͋ΘΘΘ͋ΘΘΘΘΘΘΘΘͬΘΘΘͬΘΘΘΘΘ͋͋
    ϞϒͰ߹ҙɾҙࢥܾఆ͢Δश׳

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  26. ϢʔεέʔεۦಈͰ։ൃ͢Δʁ
    6TFDBTF%SJWFO OPU.PEFM%SJWFO
    ΫϦʔϯΞʔΩςΫνϟಉ৺ԁͷΤϯςΟςΟ͸
    υϝΠϯۦಈઃܭͷதͰϞσϧΛத৺ʹͨ͠։ൃख๏ͰޠΒΕΔ
    ࠓճ͸ϞσϧͰ͸ͳ͘ϢʔεέʔεۦಈͰ։ൃ͍ͯ͠Δ
    ϢʔεέʔεۦಈͰ։ൃ͢Δ

    View Slide

  27. #'' #BDLFOE'PS'SPOUFOE
    (SBQI2-
    • ΫϥΠΞϯταΠυϝϦοτ
    • ⭕ ΫϥΠΞϯτ͔Βͷը໘ʹରͯ͠ඞཁͳϦΫΤετޮ཰͕޲্
    • ΫϥΠΞϯτ͕ϢʔεέʔεʹԠͯ͡ΫΤϦΛ૊ΈཱͯΔ͜ͱ͕Մೳ
    • ࠓճ͸ෳࡶͳϩδοΫΛΫϥΠΞϯτʹدͤͨ͘͸ͳ͍
    • #'' ϝϦοτ
    • ރΕͯάϩʔεର৅Ͱ͸ͳ͍طଘ "1*ΛΞάϦήʔτ͠৽ن "1*ͱͯ͠࠶ར༻
    • ΫϥΠΞϯταΠυɾ#'' ڞ௨ͷϝϦοτ
    • ⭕ εΩʔϚʹΑͬͯ΋ͨΒ͞ΕΔ૒ํϑϨϯυϦʔͳ։ൃମ੍ߏங
    ϢʔεέʔεۦಈͰ։ൃ͢Δ

    View Slide

  28. &YQSFTT "QPMMP 4FSWFS
    ϢʔεέʔεۦಈͰ։ൃ͢Δ

    View Slide

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

    View Slide

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

    View Slide

  31. εϐʔυײΛอͪͳ͕Βมߋ༰қੑΛ࣋ͯΔ࠷దղ
    • ٻΊΒΕ͍ͯΔ΋ͷ
    • νʔϜͰ߹ҙͨ͠ڞ௨ͷݴޠͱϢʔεέʔε
    • ϓϩμΫτͷ৳௕Λߟྀͨ͠มߋ༰қੑ
    • σʔλϕʔεɺετϨʔδɺΩϟογϡͳͲ઀ଓઌ͕มΘΔՄೳੑ
    • มߋΛ͙͢ʹٻΊΒΕΔ͜ͱ
    • Ձ஋ݕূ΍ϢʔβϏϦςΟςετͰมߋ͕ଟ͘૸Δͷ͸ϒϥ΢βͷ (6*
    • #'' ͕໨ࢦ͍ͨ͠ͱ͜Ζ
    • ΫϥΠΞϯταΠυͰͷϢʔεέʔεΛϕʔεʹͨ͠ "1*
    ϢʔεέʔεۦಈͰ։ൃ͢Δ

    View Slide

  32. ϢʔεέʔεΛத৺ʹ͢Δ
    l༏ΕͨΞʔΩςΫνϟ͸ϢʔεέʔεΛத৺ʹ͍ͯ͠
    ΔͨΊɺϑϨʔϜϫʔΫɺπʔϧɺ؀ڥʹґଘ͢Δ͜ͱ
    ͳ͘ɺϢʔεέʔεΛαϙʔτ͢Δߏ଄Λ໰୊ͳ͘આ໌
    Ͱ͖Δz
    $MFBO"SDIJUFDUVSFୈ ষ ڣͿΞʔΩςΫνϟ
    ϢʔεέʔεۦಈͰ։ൃ͢Δ
    • νʔϜ͕࣋ͭಉ͡ޠኮ Ϣʔεέʔε
    • ϢʔεέʔεΛʮํ਑ʯͱͯ͠த৺ʹਾ͑Δ
    • ΫϦʔϯΞʔΩςΫνϟͷத৺ʹ͋ΔΤϯςΟςΟ͸ͳ͍

    View Slide

  33. SFTPMWFS͸ϢʔεέʔεΛ࣮ߦ
    ϢʔεέʔεۦಈͰ։ൃ͢Δ

    View Slide

  34. มߋ༰қੑ
    lιʔείʔυͷґଘੑ͸ɺ಺ଆʢ্ҐϨϕϧͷํ਑ʣͩ
    ͚ʹ޲͔͍ͬͯͳ͚Ε͹͍͚ͳ͍ɻz
    $MFBO"SDIJUFDUVSF ୈ ষ ΫϦʔϯΞʔΩςΫνϟ ґଘੑͷϧʔϧ
    ϢʔεέʔεۦಈͰ։ൃ͢Δ
    • ࠶ܝ
    ϓϩμΫτͷ৳௕Λߟྀͨ͠มߋ༰қੑ
    • σʔλϕʔεɺετϨʔδɺΩϟογϡͳͲ઀
    ଓઌ͕༰қʹมߋɾૠ͛ସ͑Ͱ͖ͳ͍
    • Ϣʔεέʔε͸֎෦઀ଓʹؔ৺͕͋Δঢ়ଶ

    View Slide

  35. ґଘͷํ޲͸ඞ্ͣҐϨϕϧʹͷΈ޲͔͏
    • ͭͷΤοηϯε͚ͩΛநग़
    • ґଘؔ܎ٯసͷ๏ଇ %*1
    • ੹຿ͷ෼཭ɺద੾ͳϨΠϠϦϯά
    • ӈԼͷͪ͜Όͪ͜Όͨ͠΍ͭ͸ࠓճআ֎
    ϢʔεέʔεۦಈͰ։ൃ͢Δ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  39. "EBQUPS ΋ίϯετϥΫλͰ %*
    ϢʔεέʔεۦಈͰ։ൃ͢Δ
    ϥΠϒϥϦ΁ͷؔ৺Λ֎΁
    • )551ϦΫΤετ͍ͨ͠
    • ྫ
    OPEFGFUDI
    • 03.࢖͍͍ͨ
    • ྫ
    5ZQF03.
    • ۩ମతʹओுͨ͘͠ͳ͍
    ୯ମςετΛॻ͖΍͍͢
    • ґଘΛ໛฿͢Δܕߏ଄Λ஫ೖ
    ͢Δ͚ͩ

    View Slide

  40. *OGSBTUSVDUVSF
    • ͱʹ͔͘஌ࣝΛ࣋ͨͤͳ͍
    • ϥΠϒϥϦ΍ϑϨʔϜϫʔΫ͕ఏ
    ڙ͢Δ΋ͷΛ७๿ʹ഑ஔ
    ϢʔεέʔεۦಈͰ։ൃ͢Δ

    View Slide

  41. &OUJUJFT ʁʁʁ
    &OUFSQSJTF#VTJOFTT3VMFT&OUJUJFTʁ
    ϢʔεέʔεۦಈͰ։ൃ͢Δ
    • $MFBO "SDIJUFDUVSF த৺ʹΤϯςΟςΟΛਾ͑ͨ
    Ϟσϧۦಈ։ൃͰ͸ͳ͍
    • νʔϜڞ௨ݴޠͱϢʔεέʔεΛϕʔεʹͨ͠
    Ϣʔεέʔεۦಈͷ։ൃ
    • ϏδωεϧʔϧͳͲ͸ࣗͣͱΤϯςΟςΟʢϞσϧʣʹ

    View Slide

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

    View Slide

  43. զʑͷ #'' ઓུɾઓज़·ͱΊ
    • εϐʔυΛٻΊΒΕΔέʔεͰ΋߹ྲྀ஍఺Λ
    • ઓ͏΂͖͸૬ޓͷೝࣝᴥᴪͰ͸ͳ͍
    • ઓ͏΂͖͸ϏδωεΛࠓޙ৳௕͍ͯ͘͠ʹ͋ͨͬͯͷෆ࣮֬ੑ
    • ͦͷͨΊʹઌਓͷ࢒ͨ͠ΞʔΩςΫνϟͷΤοηϯε͕͋Δ͸ͣ
    • νʔϜڞ௨ͷݴޠͰ໨ઢͷߴ͞Λ߹Θ͓ͤͯ͘
    • ಉ͡໨ઢͰର࿩Ͱ͖Δ಺༰͕ίʔυʹసࣸ͞Ε͍ͯΔ
    #''ʹকདྷతͳมߋ༰қੑΛ

    View Slide

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

    View Slide

  45. ϒϥ΢βͷྫ֎
    3FGFSFODF&SSPS
    4ZOUBY&SSPS
    5ZQF&SSPS
    ϒϥ΢βͷྫ֎ʹద੾ͳ 6* Λ

    View Slide

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

    • ୺຤ͷ௨৴ෆ௨ʹΑΔΤϥʔ
    • ϒϥ΢βઃఆʹΑͬͯग़Δ͜ͱ΋͋ͬͨΓ
    ϒϥ΢βͷྫ֎ʹద੾ͳ 6* Λ

    View Slide

  47. ϦϦʔε౰ॳͷྫ֎ัଊ࣌ͷը໘
    • 3FBDU &SSPS#PVOEBSZ ͰϑΥϩʔ
    • ΤϥʔΠϕϯτૹ৴ͱϑΥʔϧόοΫ 6*ͷදࣔ
    ϒϥ΢βͷྫ֎ʹద੾ͳ 6* Λ

    View Slide

  48. /FUXPSL&SSPSɿωοτϫʔΫͷෆ௨
    • ΄ͱΜͲ؃աͯ͠Α͍
    • ೔ຖ ສ΄ͲΠϕϯτ্͕͕ͬͯ͘Δ
    • Ұ࣌తʹωοτϫʔΫঢ়گ͕ѱ͘ͳΔɺλΠϜΞ΢τ
    • $IVOL-PBE&SSPS-PBEJOHDIVOLGBJMFE
    • 6ODBVHIU JOQSPNJTF
    5ZQF&SSPS'BJMFEUPGFUDI
    ϒϥ΢βͷྫ֎ʹద੾ͳ 6* Λ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  54. ϦϦʔεޙ෼͔Δ͜ͱ͸ͨ͘͞Μ͋Δ
    ʮͣͬͱಉ͡λϒͰར༻͞ΕΔ૝ఆ͕ͩͬͨผλϒͰ΋։͘έʔε͕ଟͦ͏ʯ
    ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS
    _⼈⼈⼈⼈⼈⼈⼈⼈⼈_
    > 例外画⾯!!! <
     ̄Y^Y^Y^Y^Y^Y^Y^Y^ ̄

    View Slide

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

    View Slide

  56. (SBQI2-&SSPSͰద੾ͳϑΟʔυόοΫΛఏڙ͢Δ
    ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS

    View Slide

  57. (SBQI2- &SSPS4QFD
    • FYUFOTJPOT
    • l5IJTFOUSZJTSFTFSWFEGPSJNQMFNFOUPSTUPBEE
    BEEJUJPOBMJOGPSNBUJPOUPFSSPSTIPXFWFSUIFZTFF
    GJU BOEUIFSFBSFOPBEEJUJPOBMSFTUSJDUJPOTPOJUT
    DPOUFOUTz
    • ϑΟʔϧυ௥Ճʹ੍ݶ͸ͳͦ͞͏
    • ࠓճར༻͢Δͷ͸ FYUFOTJPOTDPEF
    ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS
    IUUQTTQFDHSBQIRMPSHESBGUTFD&SSPST

    View Slide

  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

    View Slide

  59. "QPMMPͰͷྫ֎ͷऔΓѻ͍
    • SFTPMWFSҎԼͰى͖ͨྫ֎͸ϑϨʔϜϫʔΫ͕ัଊͯ͠ "QPMMP&SSPSଞʹ͓͖͔͑Δ
    • ΫΤϦ͕ JOWBMJEͰ͋Ε͹ΑΖ͘͠ 7BMJEBUJPO&SSPSΛૹग़
    • 4QFDఆٛͷΤϥʔϨεϙϯεͷ૊Έཱͯ͸ "QPMMP4FSWFS͕ΑΖ͘͠΍Δ
    ΫϥΠΞϯτʹ࠷దͳ (SBQI2- &SSPS

    View Slide

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

    View Slide

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

    View Slide

  62. ΤϥʔΠϕϯτͱվળɺ·ͱΊ
    • ϒϥ΢βͰԿ͕ى͜Δ͔೺Ѳ͢Δ
    • ϥϯλΠϜΤϥʔɿ։ൃͷ੹຿Ͱ͖ͬͪΓ௵͍ͯͩ͘͠͞
    • %0.&YDFQUJPOɿ·͋·͋ى͜ΓಘΔɺ౎౓൑அΛ
    • 8FCΞϓϦέʔγϣϯ͸ϒϥ΢β͕ΠϯλϑΣʔε
    • ॳظϦϦʔε࣌఺Ͱͷ 6*ͷ࡞ΓࠐΈ४උ
    • ΤϥʔʹΑͬͯ൑அ͢Δ޻෉Λࣄલʹ͓ͯ͘͠ͱྑͦ͞͏
    • ػೳΛॆͨͤ͹ྑ͍Θ͚Ͱ͸ͳ͍
    • ࢖͍৺஍΍རศੑΛߴΊΔ఺ʹ΋Ձ஋Λ
    ΤϥʔΠϕϯτͱվળ

    View Slide

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

    View Slide

  64. ఆظతͳϦϦʔεͷ࣮ݱɿϞϒϫʔΫ
    ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ
    • ༏ઌ౓ͱνʔϜͷҙࢥܾఆΛΠϕϯτԽ
    ࢪࡦ΍վળ͕ᷓΕ͔͑Δ
    ༏ઌ౓Λ͚ͭΔ
    ϞϒϫʔΫͱͯ͠νʔϜͰ߹ҙ
    ༏ઌ౓͕ߴ͚Ε͹ཌ 4QSJOUʹ͸։ൃ
    ͙͢ϦϦʔε
    • ଺ཹͤ͞ͳ͍࢓૊ΈΛνʔϜͰ࣋ͭ

    View Slide

  65. ఆظతͳϦϦʔεͷ࣮ݱɿ3FOPWBUF
    • ։ൃ؀ڥͷ݈શͷͨΊʹ 3FOPWBUF Λಋೖ
    • ४ͯ͡ຖिΞοϓσʔτ͞Εଓ͚Δ
    • ʮຍ࠿ʯͱνʔϜ಺ͰݺΜͰ͍Δ
    • ຍ࠿΋ϞϒϓϩͷҰ؀Ͱߦ͏
    ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ

    View Slide

  66. ఆظతͳϦϦʔεͷ࣮ݱɿ਺஋ͷՄࢹԽ
    • νʔϜʹ͸σʔλΞφϦετ͕ ໊ࡏ੶
    • %BUB4UVEJP ͰՄࢹԽ͍ͯ͠Δ
    • ঢ়گ͸σΠϦʔ༦ձͰ֬ೝ
    • τϐοΫͳͲΛڞ༗͍ͯ͠Δ
    ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ

    View Slide

  67. ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ
    ୭͔ͷܾఆ ʻ νʔϜͷ߹ҙɾҙࢥܾఆ
    ΞʔΩςΫνϟҰൠ࿦ ʻ νʔϜڞ௨ݴޠͷΞʔΩςΫνϟ
    ػೳͷఏڙ ʻ ػೳͱՁ஋ͷఏڙ
    ·ͱΊɿ҆ఆͨ͠ఆظతͳϦϦʔεͷ࣮ݱ
    νʔϜͰεϐʔυΛ࣋ͬͨҙࢥܾఆΛ܁Γฦ͢ͱ
    ຖिϦϦʔε͢ΔதͰվળ΍લਐ͕౰વʹͳͬͯ͘Δ

    View Slide

  68. ݱ৔Ͱಈ͍ͯΔਓ͕ͨͪҰ൪ଚ͍
    ྑ͍νʔϜͰɺྑ͍ϓϩμΫτΛ

    View Slide