Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Railsの
システムテスト解剖学

Yusuke Iwaki
October 22, 2021

 Railsの
システムテスト解剖学

Kaigi on Rails 2021 Day1 14:00-14:30 @YusukeIwaki
「Railsの
システムテスト解剖学」の発表資料です

Yusuke Iwaki

October 22, 2021
Tweet

More Decks by Yusuke Iwaki

Other Decks in Technology

Transcript

  1. 3BJMTͷ

    γεςϜςετղ๤ֶ
    !:VTVLF*XBLJ,BJHJPO3BJMT

    View Slide

  2. ࣗݾ঺հ
    !:VTVLF*XBLJ
    w ෱Ԭࡏॅɻ
    w 3BJMTΛ࢖ͬͨ8FCαʔϏε։ൃͷ͓࢓ࣄɻ
    w 3VCZ͔Βϒϥ΢βࣗಈૢ࡞͢ΔͨΊͷબ୒ࢶΛ૿΍͢׆ಈதɻ
    w ϒϥ΢βΛࣗಈૢ࡞͢Δ1VQQFUFFS΍1MBZXSJHIUʹυϋϚϦதɻ

    View Slide

  3. lγεςϜςετղ๤ֶz
    ຊ೔ͷ͓୊

    View Slide

  4. 🙋Έͳ͞Μ🙋
    ςετॻ͍ͯ·͔͢ʁ

    View Slide

  5. 3BJMTͱςετ
    PEFM
    JFX
    POUSPMMFS
    .
    7
    $
    .PEFMTQFD
    ϏδωεϩδοΫΛ٧ΊࠐΜͰɺ୯ମࢼݧ͠Α͏
    ͳΔ΂͘ബ͘ɻ
    ϦμΠϨΫτͷڍಈͳͲ͸$POUSPMMFSTQFDͰɻ
    "1*Ͱ͋Ε͹3FRVFTUTQFDΛ࢖͓͏ɻ
    ʁʁʁ

    View Slide

  6. +BWB4DSJQUΛ;ΜͩΜʹ࢖ͬͨ7JFXͷςετ
    ˠʮԿ΋ͯ͠ͳ͍ͷʹյΕͨʂʂʯ
    ˠʮͳ͔ͥɺͱ͖Ͳ͖ɺΑ͘$*མͪΔʯ
    ˠ୯ମςετ͸͖͋ΒΊɻ
    ɹϒϥ΢βΛ࣮ࡍʹಈ͔͢γεςϜςετͰ୅༻ɻ
    ͋ʔɺ͜ΕམͪΔςετͳɻ
    ϦτϥΠɹΆͪͬ

    View Slide

  7. View Slide

  8. View Slide

  9. γεςϜςετʹର͢Δੈͷதͷঢ়گ
    ʮ˓˓ͨ͠΄͏͕͍͍Αʯ
    ʮ˓˓͠ͳ͍΄͏͕͍͍Αʯ
    (PPHMFݕࡧ͢Ε͹ɺ
    ৘ใ͸ͨ͘͞Μग़ͯ͘Δ
    3BJMTͷγεςϜςετͷߏ੒ཁૉ͸ʁ
    ͲͷλΠϛϯάͰԿ͕ಈ͘ʁ
    ιʔεΛಡ·ͳ͍ͱΘ͔Βͳ͍
    ͜ͱ͕ଟ͍
    3BJMTͷγεςϜςετΛɺϒϥοΫϘοΫεͳ··ٞ࿦Λ͍ͯ͠·ͤΜ͔ʁ

    View Slide

  10. lγεςϜςετղ๤ֶz

    View Slide

  11. ͜ͷϓϨθϯͷΰʔϧ
    ʮ˓˓ͨ͠΄͏͕͍͍Αʯ
    ʮ˓˓͠ͳ͍΄͏͕͍͍Αʯ
    3BJMTͷγεςϜςετͷߏ੒ཁૉ͸ʁ
    ͲͷλΠϛϯάͰԿ͕ಈ͘ʁ
    ϕετϓϥΫςΟε
    ΛӏವΈʹͤͣʹ
    3BJMTγεςϜςετͷதͷ࢓૊Έ
    Λཧղͯ͠
    ՝୊෼ੳɾղܾΛ͠Α͏ɻ
    ෭࣍తͳޮՌͱͯ͠


    ͜ΕͰɺ$BQZCBSB͕͋Δ೔ಥવͳ͘ͳͬͯ΋ɺ͋ͳͨͷνʔϜͰ͸γεςϜςετΛଓ͚͍͚ͯΔʂ

    View Slide

  12. ղ๤։࢝
    3BJMTγεςϜςετ

    View Slide

  13. 3BJMTγεςϜςετͷੜཱ͍ͪ
    IUUQTHJUIVCDPNSBJMTSBJMTQVMM

    View Slide

  14. 3BJMTγεςϜςετͷཁૉᶃ
    ࡶʹҙ༁͢Δͱɾɾɾ
    γεςϜड͚ೖΕςετΛ3BJMTʹಋೖ͍͕ͨ͠
    $BQZCBSB΍4FMFOJVN͸ηοτΞοϓ͕໘౗ɻ
    3BJMTͱͯ͠σϑΥϧτઃఆΛ༻ҙͯ͠ɺ
    αοͱ࢖͍࢝ΊΒΕΔΑ͏ʹ͍ͨ͠ΑͶɻ

    View Slide

  15. 3BJMTγεςϜςετͷཁૉᶄ
    ࡶʹҙ༁͢Δͱɾɾɾ
    ςετϥϯφʔͱ8FCαʔόʔͷεϨου͕෼͔Ε͍ͯΔ͜ͱͰɺ
    5SBOTBDUJPOBM'JYUVSFʢ'BDUPSZ#PUͷςετσʔλͳͲʣ
    ͕ظ଴௨Γʹಈ͔ͳ͍໰୊͋ͬͨΑͶɻ
    %BUBCBTF$MFBOFS͕͜Ε·Ͱ࢖ΘΕ͖͚ͯͨͲɺ
    3BJMTͷ"DUJWF3FDPSEΛमਖ਼͢Δ͜ͱͰղܾ͠Α͏Αɻ

    View Slide

  16. 3BJMTγεςϜςετ
    4IBSJOH%#DPOOFDUJPO
    ʴ
    $BQZCBSBJOUFHSBUJPO
    'BDUPSZ#PUͳͲͰ࡞ͬͨςετσʔλΛɺ
    ಛผͳ(FNͳͲΛඞཁͱͤͣʹ
    ϒϥ΢β͔ΒݟΔ͜ͱ͕Ͱ͖ΔΑ͏ʹͨ͠
    $BQZCBSBΛॳظઃఆͳ͠Ͱ΋
    ͋Δఔ౓͸࢖͑ΔΑ͏ʹͨ͠

    View Slide

  17. 4IBSJOH%#DPOOFDUJPO
    3BJMT·Ͱى͖͍ͯͨ͜ͱ
    'BDUPSZ#PUͳͲͰ࡞ͬͨςετσʔλΛɺ
    ϒϥ΢β͔ΒݟΔ͜ͱ͕Ͱ͖ͳ͍

    View Slide

  18. 4IBSJOH%#DPOOFDUJPO

    View Slide

  19. 4IBSJOH%#DPOOFDUJPO

    View Slide

  20. 4IBSJOH%#DPOOFDUJPO
    3BJMT γεςϜςετಋೖ
    Ҏ߱͸
    'BDUPSZ#PUͳͲͰ࡞ͬͨςετσʔλΛɺ
    ϒϥ΢β͔ΒݟΔ͜ͱ͕Ͱ͖ΔΑ͏ʹͳͬͨ

    View Slide

  21. 4IBSJOH%#DPOOFDUJPO
    w "DUJWF3FDPSE5FTU'JYUVSFTʹमਖ਼͕ೖ͓ͬͯΓɺ

    ҟͳΔεϨου͔ΒͷΞΫηεͰ΋%#ίωΫγϣϯΛڞ༗͢Δɻ
    w ʮϢʔβ͕ਓ͍Δঢ়ଶʯΛ'BDUPSZ#PUͰ࡞Ε͹

    ϒϥ΢β͔Β΋ͦΕΛഈΊΔΑ͏ʹͳͬͨʂ
    w τϥϯβΫγϣϯɾϩʔϧόοΫͳͷͰɺ

    ʢ*/4&35536/$"5&ʹൺ΂Δͱʣಈ࡞͕ߴ଎ʂ
    w ҟͳΔzϓϩηεzͰ8FCαʔόʔ͕ىಈ͍ͯ͠Δ৔߹ʹ͸

    %#ίωΫγϣϯ͸ผͳͷͰɺ͜ͷػೳ͕࢖͑ͳ͍ɻ
    %BUBCBTF$MFBOFSͷUSVODBUJPOετϥςδ

    View Slide

  22. %&.0
    ϩάΠϯϢʔβ໊
    ͓͠ΒͤҰཡ "KBY

    ɾ'BDUPSZ#PUͰ࡞ͬͨσʔλΛϒϥ΢β͔ΒݟΕΔʁ
    ɾCVOEMFFYFDSBJMTDͰ'BDUPSZ#PUͷσʔλ͸ݟ͑Δʜʁ
    ɾ΋͠1VNBΛΫϥελϞʔυͰىಈ͢Δͱʜ

    View Slide

  23. 3BJMTγεςϜςετ
    4IBSJOH%#DPOOFDUJPO
    ʴ
    $BQZCBSBJOUFHSBUJPO
    'BDUPSZ#PUͳͲͰ࡞ͬͨςετσʔλΛɺ
    ಛผͳ(FNͳͲΛඞཁͱͤͣʹ
    ϒϥ΢β͔ΒݟΔ͜ͱ͕Ͱ͖ΔΑ͏ʹͨ͠
    $BQZCBSBΛॳظઃఆͳ͠Ͱ΋
    ͋Δఔ౓͸࢖͑ΔΑ͏ʹͨ͠

    View Slide

  24. 3BJMTγεςϜςετ
    4IBSJOH%#DPOOFDUJPO
    ʴ
    $BQZCBSBJOUFHSBUJPO
    'BDUPSZ#PUͳͲͰ࡞ͬͨςετσʔλΛɺ
    ಛผͳ(FNͳͲΛඞཁͱͤͣʹ
    ϒϥ΢β͔ΒݟΔ͜ͱ͕Ͱ͖ΔΑ͏ʹͨ͠
    $BQZCBSBΛॳظઃఆͳ͠Ͱ΋
    ͋Δఔ౓͸࢖͑ΔΑ͏ʹͨ͠

    View Slide

  25. $BQZCBSB
    w ड͚ೖΕςετ༻ͷςετϑϨʔϜϫʔΫ
    w ֤ςετϥϯφʔ༻ͷΞαʔγϣϯɺTFUVQUFBSEPXO
    w 3BJMTαʔόʔΛඞཁʹԠͯ͡ىಈ
    w ϒϥ΢βࣗಈૢ࡞ͷͨΊͷ%4-

    View Slide

  26. $BQZCBSBίʔυྫ

    View Slide

  27. $BQZCBSBͷηοτΞοϓ

    View Slide

  28. $BQZCBSBͷηοτΞοϓ

    View Slide

  29. $BQZCBSBͷηοτΞοϓ

    View Slide

  30. $BQZCBSBͷηοτΞοϓ

    View Slide

  31. $BQZCBSBͷηοτΞοϓ

    View Slide

  32. $BQZCBSBͷηοτΞοϓ
    ηοτΞοϓ͕݁ߏͨ͘͞Μඞཁ

    View Slide

  33. 3BJMTʹΑΔ$BQZCBSBઃఆ
    ʢ$ISPNF%SJWFSΛΠϯετʔϧ͍ͯ͠Ε͹ʣ
    ͙͢ʹγεςϜςετΛॻ͘ಈ͔͢͜ͱ͕Ͱ͖ΔΑ͏ʹ͠Α͏ʂ

    View Slide

  34. 3BJMTʹΑΔ$BQZCBSBઃఆ

    View Slide

  35. 3BJMTʹΑΔ$BQZCBSBઃఆ

    View Slide

  36. 3BJMTʹΑΔ$BQZCBSBઃఆ

    View Slide

  37. 3BJMTʹΑΔ$BQZCBSBઃఆ

    View Slide

  38. 3BJMTʹΑΔ$BQZCBSBઃఆ
    ʢ$ISPNF%SJWFSΛΠϯετʔϧ͍ͯ͠Ε͹ʣ
    ͙͢ʹʢ͋Δఔ౓ͷʣγεςϜςετΛॻ͘ಈ͔͢͜ͱ͕Ͱ͖Δ

    View Slide

  39. 3BJMTγεςϜςετͷੜཱ͍ͪ
    4IBSJOH%#DPOOFDUJPO
    ʴ
    $BQZCBSBJOUFHSBUJPO
    'BDUPSZ#PUͳͲͰ࡞ͬͨςετσʔλΛɺ
    ಛผͳ(FNͳͲΛඞཁͱͤͣʹ
    ϒϥ΢β͔ΒݟΔ͜ͱ͕Ͱ͖ΔΑ͏ʹͨ͠
    $BQZCBSBΛॳظઃఆͳ͠Ͱ΋
    ͋Δఔ౓͸࢖͑ΔΑ͏ʹͨ͠

    View Slide

  40. ͜ͷϓϨθϯͷΰʔϧʢ࠶ܝʣ
    ʮ˓˓ͨ͠΄͏͕͍͍Αʯ
    ʮ˓˓͠ͳ͍΄͏͕͍͍Αʯ
    3BJMTͷγεςϜςετͷߏ੒ཁૉ͸ʁ
    ͲͷλΠϛϯάͰԿ͕ಈ͘ʁ
    ϕετϓϥΫςΟε
    ΛӏವΈʹͤͣʹ
    3BJMTγεςϜςετͷதͷ࢓૊Έ
    Λཧղͯ͠
    ՝୊෼ੳɾղܾΛ͠Α͏ɻ

    View Slide

  41. $BQZCBSB͸ʮηοτΞοϓ͕ϥΫʹͳͬͨΑʯ
    ͚ͩͰ͸ͳ͘ɺத਎ͷཧղΛਂΊΔඞཁ͕͋Δʁ
    $BQZCBSB*OUFHSBUJPO
    4IBSJOH%#DPOOFDUJPO

    View Slide

  42. ղ๤։࢝
    $BQZCBSB

    View Slide

  43. $BQZCBSBͷओͳ໾ׂ
    w ֤छςετϥϯφʔͷηοτΞοϓΛ͢Δ
    w DBQZCBSBSTQFD DBQZCBSBNJOJUFTU DBQZCBSBDVDVNCFS
    w )551αʔόʔΛىಈ͢Δ
    w DBQZCBSBSBJMT $BQZCBSB4FSWFS
    w ϒϥ΢βΛࣗಈૢ࡞͢Δ
    w $BQZCBSB%4- $BQZCBSB%SJWFS

    View Slide

  44. ςετϥϯφʔͷηοτΞοϓ

    View Slide

  45. ςετϥϯφʔͷηοτΞοϓ
    w ຊདྷͷґଘؔ܎͸

    ςετϥϯφʔ͕$BQZCBSBΛɹηοτΞοϓ

    View Slide

  46. ςετϥϯφʔͷηοτΞοϓ
    IUUQTHJUIVCDPNSTQFDSTQFDSBJMTCMPCWMJCSTQFDSBJMTWFOEPSDBQZCBSBSC
    STQFDSBJMTͷίʔυ
    ඍົʹґଘ
    ґଘ

    View Slide

  47. ςετϥϯφʔͷηοτΞοϓ
    DBQZCBSBSTQFD
    ༨ܭͳॲཧ

    BGUFS FBDI
    Ͱ
    $BQZCBSB಺෦ঢ়ଶΛϦηοτ

    View Slide

  48. ςετϥϯφʔͷηοτΞοϓ
    DBQZCBSBNJOJUFTU
    .JOJUFTU޲͚ʹ͸ηοτΞοϓϔϧύʔͳ͠ɻ
    Ϣʔβ͕खಈͰ
    ɾ%4-ͱ"TTFSUJPOTΛJODMVEFͨ͠Γ
    ɾUFBSEPXOͰঢ়ଶΛϦηοτͨ͠Γ
    ͕ඞཁ
    Ͱ΋3BJMTҎ߱͸
    4ZTUFN5FTU$BTF͕
    ͥΜͿ΍ͬͯ͘ΕΔ

    View Slide

  49. ςετϥϯφʔͷηοτΞοϓ
    34QFDͷ৔߹
    UFBSEPXO࣌ͷ಺෦ঢ়ଶϦηοτʴЋΛ
    ςετϥϯφʔʹ΍ͬͯ΋Β͏ͨΊͷ
    ϔϧύʔϞδϡʔϧΛఏڙ
    .JOJ5FTUͷ৔߹
    Ξαʔγϣϯͷϝιουఆ͚ٛͩఏڙ

    View Slide

  50. )551αʔόʔͷىಈ

    View Slide

  51. )551αʔόʔͷىಈ
    w $BQZCBSBBQQʹࢦఆ͞Εͨ3BDLΞϓϦέʔγϣϯΛ

    $BQZCBSBTFSWFSʹࢦఆ͞Εͨ3BDLαʔόʔΛ࢖ͬͯىಈ͢Δ

    View Slide

  52. )551αʔόʔͷىಈ
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBTFSWFSSC
    SBDLVQʢ3BDL4FSWFSTUBSUʣʹࣅͨɺಠࣗͷϩδοΫͰαʔόʔΛىಈ͢Δ

    View Slide

  53. $BQZCBSB͕࢓ࠐΜͩϛυϧ΢ΣΞ
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBTFSWFSNJEEMFXBSFSC
    ىಈ֬ೝ༻ΤϯυϙΠϯτ
    ΞΫςΟϒͳϦΫΤετ਺
    ͷ؅ཧ
    $BQZCBSB಺෦ঢ়ଶϦηοτ࣌ʹ
    HSFBDFGVMʹϦηοτ͢ΔͨΊ

    View Slide

  54. )551αʔόʔͷىಈλΠϛϯά
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBTFTTJPOSC
    $ bundle exec ruby run.rb


    [1] pry(main)> Capybara.current_sessio
    n

    Capybara starting Puma..
    .

    * Version 5.5.0 , codename: Zawgy
    i

    * Min threads: 0, max threads:
    4

    * Listening on http://127.0.0.1:4918
    9

    => #
    $BQZCBSB4FTTJPOJOJUJBMJ[F
    [email protected]ͷॳճࢀর࣌
    ʹ$BQZCBSB4FTTJPO͕࡞ΒΕͯɺ
    ͦ͜Ͱ)551αʔόʔ͕ىಈ͢Δ

    View Slide

  55. )551αʔόʔͷىಈ
    ɾSBDLVQʹࣅͨಠࣗͷϩδοΫͰ
    ɹ3BDLαʔόʔΛىಈ
    ɾ[email protected]ॳճࢀর࣌ʹ
    ɹαʔόʔىಈϓϩηε͕૸Δ
    ɾ3BDLΞϓϦΛಠࣗͷϛυϧ΢ΣΞͰϥοϓͯ͠
    ɹ)551ૄ௨֬ೝ଴ͪɺHSFBDFGVMͳϦηοτ
    ɹΛ࣮ݱ͍ͯ͠Δ

    View Slide

  56. ϒϥ΢βͷࣗಈૢ࡞

    View Slide

  57. ϒϥ΢βͷࣗಈૢ࡞
    $BQZCBSB͕ఏڙ͢Δ%4-Λ࢖ͬͯ
    ϒϥ΢βΛࣗಈૢ࡞͢Δ

    View Slide

  58. View Slide

  59. $BQZCBSB%4-ͷ࣮ମ
    $BQZCBSBͷ%4-ͷϝιου͸શͯ
    [email protected]ʹ
    εϧʔύε͢Δ͚ͩ
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBETMSC

    View Slide

  60. )551αʔόʔͷىಈλΠϛϯάʢ࠶ܝʣ
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBTFTTJPOSC
    $BQZCBSB4FTTJPOJOJUJBMJ[F
    [email protected]ͷॳճࢀর࣌
    ʹ$BQZCBSB4FTTJPO͕࡞ΒΕͯɺ
    ͦ͜Ͱ)551αʔόʔ͕ىಈ͢Δ ͋Δ͍͸ɺ
    $BQZCBSBͷ%4-ΛॳΊͯ࢖͏λΠϛϯά

    View Slide

  61. )551αʔόʔͷىಈλΠϛϯάʢ࠶ܝʣ
    ͜͜Ͱ)551αʔόʔ͕ىಈ͢Δ

    View Slide

  62. $BQZCBSB%4-ͱυϥΠό
    $BQZCBSB%4-
    WJTJU DMJDL ʜ
    [email protected]ʜ
    ૢ࡞಺༰Λهड़͢Δ͚ͩɻ
    ϒϥ΢βͷૢ࡞ํ๏͸஌Βͳ͍ɻ

    View Slide

  63. $BQZCBSB%4-ͱυϥΠό
    $BQZCBSB%4-
    WJTJU DMJDL ʜ
    [email protected]ʜ
    $BQZCBSBυϥΠό͕
    ϒϥ΢βͷૢ࡞ํ๏Λఆٛ͢Δ

    View Slide

  64. $BQZCBSBυϥΠό
    ˞Ұ෦লུ͍ͯ͠Δ෦෼͕͋Γ·͢

    View Slide

  65. $BQZCBSBυϥΠόͷ༗໊Ͳ͜Ζ
    4FMFOJVN
    w 4FMFOJVN8FC%SJWFSΛར༻ͯ͠ϒϥ΢βΛࣗಈૢ࡞ɻ

    ར༻ϒϥ΢β͝ͱʹɺผ్8FCυϥΠόʔΛΠϯετʔϧ͢Δඞཁ͋Γɻ
    $VQSJUF
    w $ISPNF%FW5PPMT1SPUPDPMΛར༻ͨ͠'FSSVNͱ͍͏ϥΠϒϥϦΛར༻ͯ͠

    &EHF΍$ISPNFΛࣗಈૢ࡞ɻ
    1PMUFSHFJTU DBQZCBSBXFCLJU
    w 1IBOUPN+4΍2U8FC,JUͳͲΛϕʔεʹࣗಈૢ࡞ɻ

    ࠓ͸΋͏ϝϯς͞Ε͍ͯͳ͍

    View Slide

  66. $BQZCBSBυϥΠόͷ࣮૷
    IUUQT[FOOEFWZVTVLFJXBLJTDSBQTBBCGBF
    ͢Έ·ͤΜɺ࿩͢ͱ͔ͳΓ௕͘ͳΔͷͰɺҎԼͷ[FOOͷهࣄΛಡΜͰ͍ͩ͘͞ɾɾɾʢ׼

    View Slide

  67. $BQZCBSBʹΑΔࣗಈૢ࡞ͷॲཧৄࡉ
    $BQZCBSB͕಺෦ͰͲ͏͍͏ॲཧΛ͍ͯ͠Δͷ͔
    ۩ମతͳϢʔεέʔεΛྫʹɺιʔείʔυΛಡΜͰΈ·͠ΐ͏ʂ
    ɾ%0.ཁૉͷऔಘ
    ɾJOQVUϑΥʔϜ΁ͷจࣈೖྗ
    :VTVLF*XBLJ
    Ϣʔβʔ໊
    ύεϫʔυ
    ର৅Ϣʔεέʔε
    %"4)#0"3%
    ͜Μʹͪ͸:VTVLF*XBLJ͞Μ
    HSFFUJOH

    View Slide

  68. %0.ཁૉͷऔಘ
    ˠ$BQZCBSB4FTTJPO
    fi
    OE
    ɹ$BQZCBSB4FTTJPOBMM

    View Slide

  69. %0.ཁૉͷऔಘ
    ˠ$BQZCBSB4FTTJPO
    fi
    OE
    ɹ$BQZCBSB4FTTJPOBMM
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBTFTTJPOSC
    fi
    OE΍DMJDLͳͲ͸ɺ
    υΩϡϝϯτϧʔτ/PEFʹର͢Δ
    ϝιουݺͼग़͠

    View Slide

  70. %0.ཁૉͷऔಘ
    ˠ$BQZCBSB4FTTJPO
    fi
    OE
    ɹ$BQZCBSB4FTTJPOBMM
    ˠ$BQZCBSB/PEF#BTF
    fi
    OE
    ɹ$BQZCBSB/PEF#BTFBMM
    RVFSZ4FMFDUPS"MMతͳಈ࡞Λ͢Δ΋ͷ
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBOPEF
    fi
    OEFSTSC

    View Slide

  71. %0.ཁૉͷऔಘ
    ˠ$BQZCBSB4FTTJPO
    fi
    OE
    ɹ$BQZCBSB4FTTJPOBMM
    ˠ$BQZCBSB/PEF#BTF
    fi
    OE
    ɹ$BQZCBSB/PEF#BTFBMM
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBOPEF
    fi
    OEFSTSC
    RVFSZ4FMFDUPS"MMతͳΫΤϦΛ࣮ߦ
    ̎ݸҎ্ͩͬͨΓ̌ݸͩͬͨΓͨ͠ΒSBJTF
    ώοτͨ̍͜͠Λฦ͢

    View Slide

  72. %0.ཁૉͷऔಘ
    ˠ$BQZCBSB4FTTJPO
    fi
    OE
    ɹ$BQZCBSB4FTTJPOBMM
    ˠ$BQZCBSB/PEF#BTF
    fi
    OE
    ɹ$BQZCBSB/PEF#BTFBMM
    ࡉ͔͍Φϓγϣϯͷॲཧ
    RVFSZ4FMFDUPS"MMతͳಈ࡞Λ͢Δ΋ͷ
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBOPEF
    fi
    OEFSTSC
    RVFSZ4FMFDUPS"MMతͳΫΤϦΛ࣮ߦ
    ࡉ͔͍Φϓγϣϯͷॲཧ

    ࡉ͔͍Φϓγϣϯͷॲཧ

    ݁ՌΛશ෦ฦ͢

    View Slide

  73. %0.ཁૉͷऔಘ
    ˠ$BQZCBSB4FTTJPO
    fi
    OE
    ɹ$BQZCBSB4FTTJPOBMM
    ˠ$BQZCBSB/PEF#BTF
    fi
    OE
    ɹ$BQZCBSB/PEF#BTFBMM
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBOPEF
    fi
    OEFSTSC
    ˠTZODISPOJ[F\EPDVNFOURVFSZ4FMFDUPS"MMతͳ
    fi
    STU^
    ɹTZODISPOJ[F\EPDVNFOURVFSZ4FMFDUPS"MMతͳBMM^

    View Slide

  74. %0.ཁૉͷऔಘ
    υϥΠό͕RVFSZ4FMFDUPS"MMతͳಈ࡞Λ࣮૷

    View Slide

  75. %0.ཁૉͷऔಘ
    ˠ$BQZCBSB4FTTJPO
    fi
    OE
    ɹ$BQZCBSB4FTTJPOBMM
    ˠ$BQZCBSB/PEF#BTF
    fi
    OE
    ɹ$BQZCBSB/PEF#BTFBMM
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBOPEF
    fi
    OEFSTSC
    ˠTZODISPOJ[F\EPDVNFOURVFSZ4FMFDUPS"MMతͳ
    fi
    STU^
    ɹTZODISPOJ[F\EPDVNFOURVFSZ4FMFDUPS"MMతͳBMM^
    ͜Ε͸Կʁ

    View Slide

  76. TZODISPOJ[F
    ɾ+BWBͷΑ͏ʹεϨουഉଞॲཧΛ΍ΔΞϨͰ͸ͳ͍
    ɾ໊લʹ൓ͯ͠ɺʮ৚݅Λຬͨ͢·Ͱ଴ͭʯ໾ׂΛ΋ͭϝιου
    ɾʮը໘ભҠ͙ͯͩ͢͠ͱɺͦ͜ʹ%0.ཁૉ͕ͳ͍͔΋͠Εͳ͍ʯ

    ɹʮ͖ͬ͞·Ͱ͋ͬͨ%0.ཁૉ͕ͳ͘ͳͬͯΔ͔΋͠Εͳ͍ʯ

    ɹͷΑ͏ͳέʔεΛɺڞ௨తʹέΞ͢Δ

    View Slide

  77. TZODISPOJ[F
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBOPEFCBTFSC

    View Slide

  78. TZODISPOJ[F
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBOPEFCBTFSC
    TZODISPOJ[F\ʜ^ϒϩοΫͷதʹTZODISPOJ[F͕͋Δ৔߹ʹ͸ɺ
    ωετ͍ͯ͠Δ৔߹ʹ͸
    Ұ൪֎ଆͷTZODISPOJ[F͚ͩ༗ޮɻ

    View Slide

  79. TZODISPOJ[F
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBOPEFCBTFSC
    λΠϚʔʢσϑΥϧτ̎ඵɺΧελϚΠζՄʣΛ༻ҙ
    ༩͑ΒΕͨϒϩοΫͷॲཧΛ࣮ߦ
    ϦτϥΠʂ
    ྫ֎͕ൃੜͨ͠ͱͯ͠΋ɾɾɾ
    ඵ଴͔ͬͯΒ
    ࣍ϖʔδͰಡΈղ͘
    ʢ࣍ϖʔδͰಡΈղ͘ʣ

    View Slide

  80. TZODISPOJ[F
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBOPEFCBTFSC
    αʔόʔىҼͷྫ֎͸ͦͷ··SBJTF
    λΠϚʔ੾ΕͩͬͨΒͦͷ··SBJTF
    ʮ%0.ཁૉ͕ݟ͔ͭΒͳ͍ʯҎ֎Ͱ͋Ε͹ͦͷ··SBJTF

    View Slide

  81. TZODISPOJ[F
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBOPEFCBTFSC
    λΠϚʔʢσϑΥϧτ̎ඵɺΧελϚΠζՄʣΛ༻ҙ
    ༩͑ΒΕͨϒϩοΫͷॲཧΛ࣮ߦ
    ϦτϥΠʂ
    ྫ֎͕ൃੜͨ͠ͱͯ͠΋ɾɾɾ
    ඵ଴͔ͬͯΒ
    ʮ%0.ཁૉ͕ݟ͔ͭΒͳ͍ʯ৔߹ʹ͸
    λΠϚʔ͕੾Ε͍ͯͳ͚Ε͹

    View Slide

  82. %0.ཁૉͷऔಘ
    ˠ$BQZCBSB4FTTJPO
    fi
    OE
    ɹ$BQZCBSB4FTTJPOBMM
    ˠ$BQZCBSB/PEF#BTF
    fi
    OE
    ɹ$BQZCBSB/PEF#BTFBMM
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBOPEF
    fi
    OEFSTSC
    ˠ࠷େ̎ඵ͸ϙʔϦϯά\EPDVNFOURVFSZ4FMFDUPS"MMతͳ
    fi
    STU^
    ɹ࠷େ̎ඵ͸ϙʔϦϯά\EPDVNFOURVFSZ4FMFDUPS"MMతͳBMM^

    View Slide

  83. %0.ཁૉͷऔಘ
    %0.ཁૉ͕ݱΕΔ·Ͱ
    ϙʔϦϯά֬ೝ

    View Slide

  84. %0.ཁૉͷऔಘʹݟΔ$BQZCBSBͷऑ఺
    $BQZCBSB͕ࣗલͰ
    υϥΠόͷछྨʹΑΒͣ

    ͘͝·ΕʹඵεϦʔϓͷؒʹح੻͕ى͖ͯɺ
    %0.มߋݕ஌Λಀͯ͠λΠϜΞ΢τΤϥʔʹͳΔ
    ͜ͱ͕͋Δʢ͔΋ʜܦݧଇͰɺཪ͸औΕ͍ͯͳ͍ʣ
    ࠷ۙͷࣗಈૢ࡞Τϯδϯʢ1MBZXSJHIUͳͲʣ͸
    %0.ཁૉ͕ݱΕΔ·Ͱಈ͔ͳ͘ͳΔ·Ͱ
    ࣗಈͰ଴ͬͯ͘ΕΔ͕ɺͦͷಛੑΛ׆͔ͤͳ͍ʜ
    %0.ཁૉ͕ݱΕΔ·Ͱ
    ϙʔϦϯά֬ೝ

    View Slide

  85. จࣈೖྗ
    ˠ$BQZCBSB4FTTJPO
    fi
    [email protected]
    fill_in('name’, with: 'YusukeIwaki')

    View Slide

  86. จࣈೖྗ
    ˠ$BQZCBSB4FTTJPO
    fi
    [email protected]
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBOPEFBDUJPOTSC
    fill_in('name’, with: 'YusukeIwaki')
    ˠ$BQZCBSB/PEF#BTF
    fi
    [email protected]
    $BQZCBSBυϥΠόͷ/PEFTFUϝιουΛݺͿ͚ͩ
    %0.ཁૉΛ
    fi
    OEͰ୳ͯ͠

    View Slide

  87. จࣈೖྗ
    ˠ$BQZCBSB4FTTJPO
    fi
    [email protected]
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBOPEFBDUJPOTSC
    fill_in('name’, with: 'YusukeIwaki')
    ˠ$BQZCBSB/PEF#BTF
    fi
    [email protected]
    fi
    [email protected]
    fi
    FMEͰbOBNF`ʹ֘౰͢Δ%0.ݕࡧ
    ˠ
    fi
    OE
    fi
    [email protected]
    fi
    FME bOBNF`

    TFU b:VTVLF*XBLJ`

    View Slide

  88. จࣈೖྗ
    ˠ$BQZCBSB4FTTJPO
    fi
    [email protected]
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBTFMFDUPSEF
    fi
    OJUJPO
    fi
    [email protected]
    fi
    FMESC
    fill_in('name’, with: 'YusukeIwaki')
    ˠ$BQZCBSB/PEF#BTF
    fi
    [email protected]
    ˠ
    fi
    [email protected] lEFTDFOEBOU

    View Slide

  89. จࣈೖྗ
    IUUQTHJUIVCDPNUFBNDBQZCBSBDBQZCBSBCMPCNBTUFSMJCDBQZCBSBOPEFBDUJPOTSC
    ΋ͷ͍͢͝91BUIΫΤϦ

    View Slide

  90. ϒϥ΢βͷࣗಈૢ࡞
    ɾ$BQZCBSB%4-ʜૢ࡞ํ๏Λهड़͢Δ͚ͩ
    ɹ$BQZCBSBυϥΠόʜϒϥ΢βࣗಈૢ࡞ͷ࣮૷෦෼
    ɾ$BQZCBSB%4-ͷϕʔε࣮૷Ͱɺ
    ɹʮඵͷεϦʔϓΛͭͭ͠࠷େ̎ඵ଴ͭʯ
    ɹͱ͍͏ಠࣗͷϙʔϦϯάϩδοΫ͕͋Δɻ
    ɾ
    fi
    [email protected]ͳͲҰ෦ͷࣗಈૢ࡞Ͱ͸ɺ

    ɹෳࡶոحͳ91BUIΫΤϦͰ%0.ݕࡧ͍ͯ͠Δɻ

    View Slide

  91. 3BJMTγεςϜςετ
    $BQZCBSB*OUFHSBUJPO
    4IBSJOH%#DPOOFDUJPO

    View Slide

  92. ͜ͷϓϨθϯͷΰʔϧʢ࠶ܝʣ
    ʮ˓˓ͨ͠΄͏͕͍͍Αʯ
    ʮ˓˓͠ͳ͍΄͏͕͍͍Αʯ
    3BJMTͷγεςϜςετͷߏ੒ཁૉ͸ʁ
    ͲͷλΠϛϯάͰԿ͕ಈ͘ʁ
    ϕετϓϥΫςΟε
    ΛӏವΈʹͤͣʹ
    3BJMTγεςϜςετͷதͷ࢓૊Έ
    Λཧղͯ͠
    ՝୊෼ੳɾղܾΛ͠Α͏ɻ

    View Slide

  93. த਎Λগ͠Θ͔ͬͨͱ͜ΖͰɺ
    3BJMTͷγεςϜςετͷվળ͸Ͳ͏͢Ε͹ʜ
    $BQZCBSB*OUFHSBUJPO
    4IBSJOH%#DPOOFDUJPO

    View Slide

  94. ࣏ྍ։࢝
    3BJMTγεςϜςετ

    View Slide

  95. ࣮ࡍͷςετӡ༻ͷ՝୊
    w ࣗಈૢ࡞ͷӡ༻Ͱେมͳͷ͸ʮෆ҆ఆͳςετʯ
    w ͦ΋ͦ΋զʑ3BJMT։ൃऀ͕΍Γ͍ͨͷ͸

    2"؍఺ͷϒϥοΫϘοΫεςετͰ͸ͳ͘

    Ϗϡʔͷ୯ମ౷߹ࢼݧ
    ๯಄ͷεϥΠυˠ

    View Slide

  96. ϒϥοΫϘοΫεςετͱ։ൃऀͷςετ
    ؅ཧऀϩάΠϯͨ͠Βɺ
    μογϡϘʔυʹભҠ͠ɺ
    ͓஌Β͕ͤදࣔ͞ΕΔ͜ͱ
    ͨͱ͑͹ɾɾɾ
    MPDBMIPTUMPHJO
    :VTVLF*XBLJ
    -PHJO

    %"4)#0"3%
    8IBU`TOFX
    ͓͠Β͕ͤ͋Γ·͢

    View Slide

  97. ϒϥοΫϘοΫεςετͱ։ൃऀͷςετ
    MPDBMIPTUMPHJO
    :VTVLF*XBLJ
    -PHJO

    %"4)#0"3%
    8IBU`TOFX
    ͓͠Β͕ͤ͋Γ·͢
    %"4)#0"3%
    8IBU`TOFX
    -PBEJOHʜ
    MPDBMIPTUEBTICPBSE
    2"తͳ؍఺
    3BJMT։ൃऀ͕஌͍ͬͯΔ͜ͱ
    MPDBMIPTUMPHJO
    :VTVLF*XBLJ
    -PHJO

    63-ભҠ
    ॳظඳը͸-PBEJOH
    %"4)#0"3%
    8IBU`TOFX
    ͓͠Β͕ͤ͋Γ·͢
    (&5OFXT +40/
    [email protected]
    ·Εʹඵ͘Β͍͔͔Δ
    ·Εʹඵ͘Β͍͔͔Δ
    JOQVUUZQFUFYU
    OBNFVTFSOBNF
    ࡉ͔͍࣮૷͸ؾʹ͠ͳ͍
    ௨ৗͰ͋Ε͹ඵ͘Β͍ͰऴΘΔ͸ͣɻ
    શମΛ௨ͯ͠ඵ΋͔͔ͬͨΒɺͳʹ͔͓͔͍͠
    ΋͠ଞͷ৔ॴʹ
    ͓஌Β͕ͤग़͍ͯΔͱ͢Ε͹
    ͦΕ͸ෆ۩߹

    View Slide

  98. ϒϥοΫϘοΫεςετͱ։ൃऀͷςετ
    MPDBMIPTUMPHJO
    :VTVLF*XBLJ
    -PHJO

    %"4)#0"3%
    8IBU`TOFX
    ͓͠Β͕ͤ͋Γ·͢
    %"4)#0"3%
    8IBU`TOFX
    -PBEJOHʜ
    MPDBMIPTUEBTICPBSE
    2"తͳ؍఺
    3BJMT։ൃऀ͕஌͍ͬͯΔ͜ͱ
    MPDBMIPTUMPHJO
    :VTVLF*XBLJ
    -PHJO

    63-ભҠ
    ॳظඳը͸-PBEJOH
    %"4)#0"3%
    8IBU`TOFX
    ͓͠Β͕ͤ͋Γ·͢
    (&5OFXT +40/
    [email protected]
    ·Εʹඵ͘Β͍͔͔Δ
    ·Εʹඵ͘Β͍͔͔Δ
    JOQVUUZQFUFYU
    OBNFVTFSOBNF
    ࡉ͔͍࣮૷͸ؾʹ͠ͳ͍
    ௨ৗͰ͋Ε͹ඵ͘Β͍ͰऴΘΔ͸ͣɻ
    શମΛ௨ͯ͠ඵ΋͔͔ͬͨΒɺͳʹ͔͓͔͍͠
    ΋͠ଞͷ৔ॴʹ
    ͓஌Β͕ͤग़͍ͯΔͱ͢Ε͹
    ͦΕ͸ෆ۩߹

    View Slide

  99. ੈͷதͷϕετϓϥΫςΟε͸୭ͷͨΊͷ΋ͷ͔ʁ
    w ͨͱ͑͹

    ʮ*%ࢦఆͷϩέʔλࢦఆ͸ྑ͘ͳ͍ʯ

    ʮϢʔβ͕ݟ͑Δ΋ͷΛϕʔεʹࣗಈૢ࡞͢ΔΑ͏ʹ͠Α͏ʯ


    ˢ͜ΕΒ͸ϒϥοΫϘοΫεςετͷϕετϓϥΫςΟε

    ɹʢ2"؍఺ͷςετࣗಈԽͰɺյΕʹ͍͘ςετΛॻͨ͘Ίͷʣ

    View Slide

  100. $BQZCBSB͸୭ͷͨΊͷ΋ͷ͔ʁ
    w $BQZCBSB͸"DDFQUBODFUFTUGSBNFXPSL ड͚ೖΕςετ'8

    ࣮ࡍͷϢʔβͷΞΫγϣϯΛγϛϡϨʔτ
    $BQZCBSB͸
    2"؍఺ʢϒϥοΫϘοΫεςετʣͷ໾ʹཱͭπʔϧ

    View Slide

  101. $BQZCBSBͷςετ؍఺ࢥ૝
    MPDBMIPTUMPHJO
    :VTVLF*XBLJ
    -PHJO

    %"4)#0"3%
    8IBU`TOFX
    ͓͠Β͕ͤ͋Γ·͢
    %"4)#0"3%
    8IBU`TOFX
    -PBEJOHʜ
    MPDBMIPTUEBTICPBSE
    2"తͳ؍఺
    MPDBMIPTUMPHJO
    :VTVLF*XBLJ
    -PHJO

    63-ભҠ
    ॳظඳը͸-PBEJOH
    %"4)#0"3%
    8IBU`TOFX
    ͓͠Β͕ͤ͋Γ·͢
    (&5OFXT +40/
    [email protected]
    ·Εʹඵ͘Β͍͔͔Δ
    ·Εʹඵ͘Β͍͔͔Δ
    JOQVUUZQFUFYU
    OBNFVTFSOBNF
    ࡉ͔͍࣮૷͸ؾʹ͠ͳ͍
    ௨ৗͰ͋Ε͹ඵ͘Β͍ͰऴΘΔ͸ͣɻ
    શମΛ௨ͯ͠ඵ΋͔͔ͬͨΒɺͳʹ͔͓͔͍͠
    ΋͠ଞͷ৔ॴʹ
    ͓஌Β͕ͤग़͍ͯΔͱ͢Ε͹
    ͦΕ͸ෆ۩߹
    fill_in('name’, with: 'YusukeIwaki')
    $BQZCBSBΛ࢖ͬͨίʔυ
    3BJMT։ൃऀ͕஌͍ͬͯΔ͜ͱ
    ίϯτϩʔϥ΍ϑΥʔϜΦϒδΣΫτͷ࣮૷͕มΘΒͳ͍ݶΓ

    OBNFଐੑ͸มΘΒͳ͍͠ɺ

    OBNFଐੑ͕มΘΔͳΒผʹ$*͕མͪͯ͘Ε͍͍ͯ
    ແବʹDIFDLCPY΍SBEJPϘλϯΛ୳͠ʹߦͬͯ΄͘͠ͳ͍ɻ
    JOQVU

    View Slide

  102. $BQZCBSBͷςετ؍఺ࢥ૝
    MPDBMIPTUMPHJO
    :VTVLF*XBLJ
    -PHJO

    %"4)#0"3%
    8IBU`TOFX
    ͓͠Β͕ͤ͋Γ·͢
    %"4)#0"3%
    8IBU`TOFX
    -PBEJOHʜ
    MPDBMIPTUEBTICPBSE
    2"తͳ؍఺
    MPDBMIPTUMPHJO
    :VTVLF*XBLJ
    -PHJO

    63-ભҠ
    ॳظඳը͸-PBEJOH
    %"4)#0"3%
    8IBU`TOFX
    ͓͠Β͕ͤ͋Γ·͢
    (&5OFXT +40/
    [email protected]
    ·Εʹඵ͘Β͍͔͔Δ
    ·Εʹඵ͘Β͍͔͔Δ
    JOQVUUZQFUFYU
    OBNFVTFSOBNF
    ࡉ͔͍࣮૷͸ؾʹ͠ͳ͍
    ௨ৗͰ͋Ε͹ඵ͘Β͍ͰऴΘΔ͸ͣɻ
    શମΛ௨ͯ͠ඵ΋͔͔ͬͨΒɺͳʹ͔͓͔͍͠
    ΋͠ଞͷ৔ॴʹ
    ͓஌Β͕ͤग़͍ͯΔͱ͢Ε͹
    ͦΕ͸ෆ۩߹
    fill_in('name’, with: 'YusukeIwaki')
    $BQZCBSBΛ࢖ͬͨίʔυ
    3BJMT։ൃऀ͕஌͍ͬͯΔ͜ͱ
    ίϯτϩʔϥ΍ϑΥʔϜΦϒδΣΫτͷ࣮૷͕มΘΒͳ͍ݶΓ

    OBNFଐੑ͸มΘΒͳ͍͠ɺ

    OBNFଐੑ͕มΘΔͳΒผʹ$*͕མͪͯ͘Ε͍͍ͯ
    ෳࡶͳ91BUIΫΤϦͰɺҙਤ͠ͳ͍΋ͷΛरͬͯ΄͘͠ͳ͍ɻ
    JOQVU

    View Slide

  103. $BQZCBSBͷςετ؍఺ࢥ૝
    MPDBMIPTUMPHJO
    :VTVLF*XBLJ
    -PHJO

    %"4)#0"3%
    8IBU`TOFX
    ͓͠Β͕ͤ͋Γ·͢
    %"4)#0"3%
    8IBU`TOFX
    -PBEJOHʜ
    MPDBMIPTUEBTICPBSE
    2"తͳ؍఺
    MPDBMIPTUMPHJO
    :VTVLF*XBLJ
    -PHJO

    63-ભҠ
    ॳظඳը͸-PBEJOH
    %"4)#0"3%
    8IBU`TOFX
    ͓͠Β͕ͤ͋Γ·͢
    (&5OFXT +40/
    [email protected]
    ·Εʹඵ͘Β͍͔͔Δ
    ·Εʹඵ͘Β͍͔͔Δ
    JOQVUUZQFUFYU
    OBNFVTFSOBNF
    ࡉ͔͍࣮૷͸ؾʹ͠ͳ͍
    ௨ৗͰ͋Ε͹ඵ͘Β͍ͰऴΘΔ͸ͣɻ
    શମΛ௨ͯ͠ඵ΋͔͔ͬͨΒɺͳʹ͔͓͔͍͠
    ΋͠ଞͷ৔ॴʹ
    ͓஌Β͕ͤग़͍ͯΔͱ͢Ε͹
    ͦΕ͸ෆ۩߹
    3BJMT։ൃऀ͕஌͍ͬͯΔ͜ͱ
    click_button(‘Login')
    expect(page).to have_text('͓͠Βͤ)
    $BQZCBSBΛ࢖ͬͨίʔυ

    View Slide

  104. 3BJMT։ൃऀʹͱͬͯඞཁͳػೳ
    MPDBMIPTUMPHJO
    :VTVLF*XBLJ
    -PHJO

    %"4)#0"3%
    8IBU`TOFX
    ͓͠Β͕ͤ͋Γ·͢
    %"4)#0"3%
    8IBU`TOFX
    -PBEJOHʜ
    MPDBMIPTUEBTICPBSE
    2"తͳ؍఺
    MPDBMIPTUMPHJO
    :VTVLF*XBLJ
    -PHJO

    63-ભҠ
    ॳظඳը͸-PBEJOH
    %"4)#0"3%
    8IBU`TOFX
    ͓͠Β͕ͤ͋Γ·͢
    (&5OFXT +40/
    [email protected]
    ·Εʹඵ͘Β͍͔͔Δ
    ·Εʹඵ͘Β͍͔͔Δ
    ࡉ͔͍࣮૷͸ؾʹ͠ͳ͍
    ௨ৗͰ͋Ε͹ඵ͘Β͍ͰऴΘΔ͸ͣɻ
    શମΛ௨ͯ͠ඵ΋͔͔ͬͨΒɺͳʹ͔͓͔͍͠
    3BJMT։ൃऀ͕஌͍ͬͯΔ͜ͱ
    $BQZCBSBΛ࢖ͬͨίʔυ
    ݻఆͰ࠷େ˓ඵɺΈ͍ͨͳͷ͸ࠔΔɻ
    ௨৴ʹ·Εʹ͔͔࣌ؒΔ͔΋͠Εͳ͍ͷ͔ͩΒɺ
    ʮ˓˓͕׬ྃ͢Δ·Ͱ଴ͭʯͬͯॻ͖ํΛ͍ͨ͠ɻ

    View Slide

  105. 3BJMT։ൃऀʹͱͬͯඞཁͳػೳ
    MPDBMIPTUMPHJO
    :VTVLF*XBLJ
    -PHJO

    %"4)#0"3%
    8IBU`TOFX
    ͓͠Β͕ͤ͋Γ·͢
    %"4)#0"3%
    8IBU`TOFX
    -PBEJOHʜ
    MPDBMIPTUEBTICPBSE
    2"తͳ؍఺
    MPDBMIPTUMPHJO
    :VTVLF*XBLJ
    -PHJO

    63-ભҠ
    ॳظඳը͸-PBEJOH
    %"4)#0"3%
    8IBU`TOFX
    ͓͠Β͕ͤ͋Γ·͢
    (&5OFXT +40/
    [email protected]
    ·Εʹඵ͘Β͍͔͔Δ
    ·Εʹඵ͘Β͍͔͔Δ
    ࡉ͔͍࣮૷͸ؾʹ͠ͳ͍
    ௨ৗͰ͋Ε͹ඵ͘Β͍ͰऴΘΔ͸ͣɻ
    શମΛ௨ͯ͠ඵ΋͔͔ͬͨΒɺͳʹ͔͓͔͍͠
    3BJMT։ൃऀ͕஌͍ͬͯΔ͜ͱ
    $BQZCBSBΛ࢖ͬͨίʔυ
    ݻఆͰ࠷େ˓ඵɺΈ͍ͨͳͷ͸ࠔΔɻ
    ௨৴ʹ·Εʹ͔͔࣌ؒΔ͔΋͠Εͳ͍ͷ͔ͩΒɺ
    ʮ˓˓͕׬ྃ͢Δ·Ͱ଴ͭʯͬͯॻ͖ํΛ͍ͨ͠ɻ
    click_button(‘Login’)
    ը໘ભҠ͢Δ·Ͱ଴ͭ
    << GET /news ͷϨεϙϯε͕ऴΘΔ·Ͱ଴ͭ >>
    << div#news_container ͷLoading͕ফ͑Δ·Ͱ଴ͭ >>
    expect(<< div#news_container >>).to have_text('͓͠Βͤ)
    Ͱ΋$BQZCBSB%4-ʹ
    ͦͷػೳ͕ແ͍ΑͶʔ

    View Slide

  106. 3BJMTγεςϜςετ͸ϒϥοΫϘοΫεςετʹ޲͍͍ͯΔ
    w ࣗಈૢ࡞ͷӡ༻Ͱେมͳͷ͸ʮෆ҆ఆͳςετʯ
    w ͦ΋ͦ΋զʑ3BJMT։ൃऀ͕΍Γ͍ͨͷ͸

    2"؍఺ͷϒϥοΫϘοΫεςετͰ͸ͳ͘

    Ϗϡʔͷ୯ମ౷߹ࢼݧ
    ͦΕɺπʔϧͷબఆϛε͡ΌΜʁ
    3BJMTͷγεςϜςετͳΒ
    $BQZCBSB͕͙͢ʹ࢖͑ͯ
    ศརɺศརʙ̇

    View Slide

  107. $BQZCBSB%4-Λ࢖Θͣʹࣗಈૢ࡞
    click_button(‘Login’)
    ը໘ભҠ͢Δ·Ͱ଴ͭ
    << GET /news ͷϨεϙϯε͕ऴΘΔ·Ͱ଴ͭ >>
    << div#news_container ͷLoading͕ফ͑Δ·Ͱ଴ͭ >>
    expect(<< div#news_container >>).to have_text('͓͠Βͤ)
    $BQZCBSB%4-࢖ΘͣʹͲ͏΍ͬͯϒϥ΢βΛಈ͔ͤ͹͍͍ͷʁ

    View Slide

  108. $BQZCBSB%4-Λ࢖Θͣʹࣗಈૢ࡞
    click_button(‘Login’)
    ը໘ભҠ͢Δ·Ͱ଴ͭ
    << GET /news ͷϨεϙϯε͕ऴΘΔ·Ͱ଴ͭ >>
    << div#news_container ͷLoading͕ফ͑Δ·Ͱ଴ͭ >>
    expect(<< div#news_container >>).to have_text('͓͠Βͤ)
    4FMFOJVNΛ௚઀࢖͑͹͍͍͡ΌΜɻ
    ͋ͱ͸ɺ1VQQFUFFS΍1MBZXSJHIUͳͲɺ
    ࠷ۙͷπʔϧͩͬͨΒ΋ͬͱ؆୯ʹॻ͚ΔΑɻ
    XBJU'PS/BWJHBUJPO
    XBJU'PS3FTQPOTF
    XBJU'PS4FMFDUPS

    View Slide

  109. $BQZCBSB%4-Λ࢖Θͣʹࣗಈૢ࡞
    click_button(‘Login’)
    ը໘ભҠ͢Δ·Ͱ଴ͭ
    << GET /news ͷϨεϙϯε͕ऴΘΔ·Ͱ଴ͭ >>
    << div#news_container ͷLoading͕ফ͑Δ·Ͱ଴ͭ >>
    expect(<< div#news_container >>).to have_text('͓͠Βͤ)
    Ͱ΋ɺ͢ͰʹҎ্ͷςετ࡞ͬͪΌͬͯΔΑʁʁ
    ҰؾʹҠߦ͢Δͷ͠ΜͲ͍ʔʔ
    XBJU'PS/BWJHBUJPO
    XBJU'PS3FTQPOTF
    XBJU'PS4FMFDUPS

    View Slide

  110. $BQZCBSB%4-Λ࢖Θͣʹࣗಈૢ࡞
    click_button(‘Login’)
    ը໘ભҠ͢Δ·Ͱ଴ͭ
    << GET /news ͷϨεϙϯε͕ऴΘΔ·Ͱ଴ͭ >>
    << div#news_container ͷLoading͕ফ͑Δ·Ͱ଴ͭ >>
    expect(<< div#news_container >>).to have_text('͓͠Βͤ)
    ҰؾʹҠߦ͢ΔඞཁͳΜͯແ͍ɻ
    ෆ҆ఆͳςετ͔Βॱʹɺஈ֊తʹҠߦ͠Α͏
    XBJU'PS/BWJHBUJPO
    XBJU'PS3FTQPOTF
    XBJU'PS4FMFDUPS
    4UFQෆ҆ఆͳςετͷෆ҆ఆͳ෦෼͚ͩิڧ͢Δ
    4UFQෆ҆ఆͳςετ͚ͩɺ$BQZCBSB%4-Λ࢖Θͳ͘͢Δ
    4UFQ׬શʹ$BQZCBSBΛ࢖Θͳ͘͢Δ

    View Slide

  111. 4UFQɿऑ͍ͱ͜ΖΛϐϯϙΠϯτͰิڧ͢Δ
    1VQQFUFFSΛ࢖ͬͯࣗಈૢ࡞
    $BQZCBSBͰΞαʔγϣϯ
    34QFDͰ͍͏ͱɺͭͷJUͷதʹ
    1VQQFUFFSͱ$BQZCBSBͷ྆ํ͕ڞଘ
    IUUQTHJUIVCDPN:VTVLF*[email protected]@[email protected]@[email protected]

    View Slide

  112. 4UFQɿऑ͍ͱ͜ΖΛϐϯϙΠϯτͰิڧ͢Δ
    click_button(‘Login’)
    ը໘ભҠ͢Δ·Ͱ଴ͭ
    << GET /news ͷϨεϙϯε͕ऴΘΔ·Ͱ଴ͭ >>
    << div#news_container ͷLoading͕ফ͑Δ·Ͱ଴ͭ >>
    expect(<< div#news_container >>).to have_text('͓͠Βͤ)
    puppeteer_page.wait_for_navigation do
    end
    puppeteer_page.wait_for_request(‘/news.json’)
    puppeteer_page.wait_for_selector(‘div#news_container’)
    ෆ҆ఆͳςετͷෆ҆ఆͳ෦෼͚ͩิڧ͢Δ

    View Slide

  113. 4UFQɿऑ͍ͱ͜ΖΛϐϯϙΠϯτͰิڧ͢Δ
    w QVQQFUFFSSVCZΛ࢖͏ͱɺैདྷͷߏ੒Λ΄ͱΜͲม͑ͣʹ

    ऑ͍෦෼ʹ͚ͩհೖ͢ΔܗͰࣗಈૢ࡞͕Ͱ͖Δ
    IUUQTTQFBLFSEFDLDPNZVTVLFJXBLJTFMFOJVNQMVTDBQZCBSBEFCVBOEJOHOBUFTVUPXPQVQQFUFFSEFCVRJBOHTJUFNJSV

    View Slide

  114. 4UFQɿऑ͍ͱ͜ΖΛϐϯϙΠϯτͰิڧ͢Δ
    1VQQFUFFS͔Βͷ઀ଓ༻ʢ$%1ʣϙʔτ
    Λ։͚ͯ4FMFOJVN$ISPNFىಈ
    IUUQTHJUIVCDPN:VTVLF*[email protected]@[email protected]@[email protected]
    $BQZCBSBυϥΠόͷઃఆͰɺ

    View Slide

  115. 4UFQɿऑ͍ͱ͜ΖΛϐϯϙΠϯτͰิڧ͢Δ
    ิڧ͍ͨ͠ςετͷTFUVQUFBSEPXOͰ
    1VQQFUFFS͔Βͷ઀ଓ༻ʢ$%1ʣϙʔτ
    ʹ઀ଓ੾அ
    IUUQTHJUIVCDPN:VTVLF*[email protected]@[email protected]@[email protected]

    View Slide

  116. 4UFQɿऑ͍ͱ͜ΖΛϐϯϙΠϯτͰิڧ͢Δ
    1VQQFUFFSΛ࢖ͬͯࣗಈૢ࡞
    $BQZCBSBͰΞαʔγϣϯ
    1VQQFUFFSͷ1BHF"1*Λ࢖༻ͯ͠
    ਫ਼౓ͷߴ͍ࣗಈૢ࡞ΛϐϯϙΠϯτʹߦ͏
    IUUQTHJUIVCDPN:VTVLF*[email protected]@[email protected]@[email protected]

    View Slide

  117. 4UFQҰ෦ͷςετ߲໨͚ͩ$BQZCBSB%4-Λ࢖Θͳ͍
    1MBZXSJHIUΛ࢖༻͢Δ
    $BQZCBSB%4-Λ࢖༻͢Δ
    ෆ҆ఆͳςετ͚ͩɺ$BQZCBSB%4-Λ࢖Θͳ͘͢Δ
    34QFDͰ͍͏ͱɺ
    JU͝ͱʹ$BQZCBSBΛ࢖͏ͷ͔

    1MBZXSJHIUΛ࢖͏ͷ͔Λม͑ΒΕΔ

    View Slide

  118. 4UFQҰ෦ͷςετ߲໨͚ͩ$BQZCBSB%4-Λ࢖Θͳ͍
    IUUQT[FOOEFWZVTVLFJXBLJBSUJDMFTBECGB
    ࣗಈૢ࡞ܥͷ࣮૷ΛԿ΋࣋ͨͳ͍$BQZCBSBυϥΠό
    ʢԾশɿOVMMυϥΠόʣ

    View Slide

  119. 4UFQҰ෦ͷςετ߲໨͚ͩ$BQZCBSB%4-Λ࢖Θͳ͍
    IUUQT[FOOEFWZVTVLFJXBLJBSUJDMFTBECGB
    ࣗಈૢ࡞ܥͷ࣮૷ΛԿ΋࣋ͨͳ͍$BQZCBSBυϥΠό
    ʢԾশɿOVMMυϥΠόʣ
    [email protected] ͕USVF͡Όͳ͍ͱ
    αʔόʔىಈͯ͘͠Εͳ͍

    View Slide

  120. 4UFQҰ෦ͷςετ߲໨͚ͩ$BQZCBSB%4-Λ࢖Θͳ͍
    IUUQT[FOOEFWZVTVLFJXBLJBSUJDMFTBECGB
    ςετ߲໨ʹESJWFSOVMMࢦఆ͕͋Δ৔߹ʹ͸ɺ
    TFUVQUFBSEPXOͰɺ
    1VQQFUFFS΍1MBZXSJHIUʹΑΔ
    ࣗಈૢ࡞Λ͢ΔΑ͏ʹઃఆ

    View Slide

  121. 4UFQҰ෦ͷςετ߲໨͚ͩ$BQZCBSB%4-Λ࢖Θͳ͍
    w ESJWFSOVMMΛ͚ͭͨ΋ͷ͚ͩ1VQQFUFFSͰࢼݧ͕࣮ߦ͞ΕΔɻ
    w $BQZCBSB%4-Λ࢖Θͳ͍ঢ়ଶʹγʔϜϨεʹҠߦͰ͖Δɻ
    $BQZCBSB%4-Λ࢖༻͢Δ
    1VQQFUFFSΛ࢖༻͢Δ

    View Slide

  122. 4UFQҰ෦ͷςετ߲໨͚ͩ$BQZCBSB%4-Λ࢖Θͳ͍
    w 4UFQ̎ͰશͯͷςετέʔεʹESJWFSOVMM͕෇͚͹ɺ

    $BQZCBSB͸αʔόʔΛىಈ͢Δ͚ͩͷ໾ׂʹͳΔɻ
    αʔόʔΛىಈ͢Δͱ͜Ζ͸
    $BQZCBSBΛͦͷ··ར༻
    ࣗಈૢ࡞ʹ͸1MBZXSJHIU
    ͳͲΛ௚઀࢖͏ͷͰɺ
    ۭ࣮૷ͷυϥΠόʹ͢Δɻ
    $BQZCBSB%4-͸࢖Θͳ͍

    View Slide

  123. 4UFQ̏׬શʹ$BQZCBSBΛ࢖Θͳ͘͢Δ
    w ͢ͳΘͪʮ3BJMTγεςϜςετΛ࢖Θͳ͘͢Δʯ
    IUUQT[FOOEFWZVTVLFJXBLJBSUJDMFTBB

    View Slide

  124. 4UFQ̏׬શʹ$BQZCBSBΛ࢖Θͳ͘͢Δ
    IUUQT[FOOEFWZVTVLFJXBLJBSUJDMFTBB
    $BQZCBSBΛ࢖Θͳ͍ͷͰෆཁ
    $BQZCBSBͷ୅ΘΓʹ
    3BDL4FSWFSTUBSUͳͲͰ
    αʔόʔΛىಈ͢Δ
    ࣗಈૢ࡞ʹ͸1MBZXSJHIU
    ͳͲΛ௚઀࢖͏
    ඞཁͳͷ͸ɺ3BJMTαʔόʔΛʢςετϥϯφʔͱผεϨουͰʣىಈ͢Δ͜ͱ͚ͩ

    View Slide

  125. 4UFQ̏׬શʹ$BQZCBSBΛ࢖Θͳ͘͢Δ
    IUUQMPDBMIPTUͰىಈͤ͞Δ͚ͩͳΒɺ
    ࣮͸ͱͯ΋͔ΜͨΜ
    IUUQT[FOOEFWZVTVLFJXBLJBSUJDMFTBB

    View Slide

  126. 4UFQ̏׬શʹ$BQZCBSBΛ࢖Θͳ͘͢Δ
    IUUQT[FOOEFWZVTVLFJXBLJBSUJDMFTBB
    TFUVQUFBSEPXOͰɺ
    1VQQFUFFS΍1MBZXSJHIUʹΑΔ
    ࣗಈૢ࡞Λ͢ΔΑ͏ʹઃఆ

    View Slide

  127. 4UFQ̏ɿ׬શʹ$BQZCBSBΛ࢖Θͳ͘͢Δ
    IUUQT[FOOEFWZVTVLFJXBLJBSUJDMFTBB
    1MBZXSJHIUΛ௚઀࢖ͬͯࣗಈૢ࡞

    View Slide

  128. $BQZCBSB%4-Λ࢖Θͣʹࣗಈૢ࡞
    ҰؾʹҠߦ͢ΔඞཁͳΜͯແ͍ɻ
    ݱ࣮తʹ͸ɺ4UFQ·Ͱ͍͚͍ͯΕ͹े෼
    4UFQෆ҆ఆͳςετͷෆ҆ఆͳ෦෼͚ͩิڧ͢Δ
    4UFQෆ҆ఆͳςετ͚ͩɺ$BQZCBSB%4-Λ࢖Θͳ͘͢Δ
    4UFQ׬શʹ$BQZCBSBΛ࢖Θͳ͘͢Δ

    View Slide

  129. ·ͱΊ
    w &&ςετಋೖΛΧϯλϯʹͯ͘͠ΕΔͷ͕3BJMTͷγεςϜςετ
    w "DUJWF3FDPSEͷ%#ίωΫγϣϯͷڞ༗ʹΑΔվળ΋૬·ͬͯ

    ʮ+BWB4DSJQUΛ;ΜͩΜʹ࢖ͬͨϏϡʔʯ΋͋Δఔ౓ࢼݧͰ͖Δɻ

    View Slide

  130. ·ͱΊ
    w ෆ҆ఆͳςετʹ೰·͞Ε࢝ΊͨΒɺ

    ϕετϓϥΫςΟεΛӏವΈʹ͢Δલʹɺ

    ʮͦ΋ͦ΋Ͳ͏͍͏؍఺ͷςετ͕͔ͨͬͨ͠ͷ͔ʯجຊʹཱͪฦΖ͏ʂ

    View Slide

  131. ·ͱΊ
    w $BQZCBSB%4-͸಺෦࣮૷ΛΈͯΈΔͱ

    2"؍఺ʢϒϥοΫϘοΫεςετʣΛαϙʔτͯ͘͠ΕΔ܏޲͕ڧ͍ɻ
    w 3BJMT։ൃऀ؍఺ͷࢼݧΛ͍ͨ͠ͳΒɺ$BQZCBSB%4-ʹґଘͤͣ

    ߴਫ਼౓ͳ1MBZXSJHIUͳͲΛ෦෼తஈ֊తʹಋೖͯ͠ΈΑ͏ʂ
    w

    View Slide

  132. ͍͞͝ʹ
    w 3VCZʹΑΔϒϥ΢βͷࣗಈૢ࡞ʹɺ4FMFOJVNҎ֎ͷબ୒ࢶΛ࡞Γ͍ͨ
    w 1VQQFUFFSͱ1MBZXSJHIUΛ3VCZ͔Β࢖͑ΔΑ͏

    (FN։ൃ͍ͯ͠·͢ɻ
    ͥͻ࢖ͬͯΈ͍ͯͩ͘͞ˍ࣮ӡ༻Ͱվળ఺͕͋Ε͹ͲΜͲΜཁ๬͍ͩ͘͞ʂ

    View Slide

  133. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide