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

質の高いAPIを作るための7つの習慣

 質の高いAPIを作るための7つの習慣

今までのやり方を1つずつ改めて、どうやったら品質の高いAPIを素早く作れるのか。
受託を専門とする会社で、実際の仕事の中で改善していった取り組みについてお話します。
なるべくモダンなやり方で品質を落とさずにビジネスサイドからの要求に応えるにはどうしたら良いのか?

Ryo Tomidokoro

November 03, 2016
Tweet

More Decks by Ryo Tomidokoro

Other Decks in Technology

Transcript

  1. ࣭ͷߴ͍"1*Λ࡞ΔͨΊͷ
    ͭͷश׳
    1)1ΧϯϑΝϨϯε
    !IBOIBO

    View Slide

  2. ‣ !IBOIBO
    ‣ 8FC"QQMJDBUJPO
    &OHJOFFS
    ‣ :PLPIBNB/PSUI؅ཧਓ
    "CPVUNF

    View Slide

  3. wडୗ։ൃձࣾʹ͓͚Δ஌ݟ
    w3FTU"1*ͷ඼࣭ΛߴΊΔҝʹ΍͍ͬͯΔࣄ
    wΤϯδχΞ͔Βͷࢹ఺
    "CPVUUIJTUBML

    View Slide

  4. $POUFOU
    ։ൃલͷ஫ҙ఺
    ᶃ ܖ໿ͷ֬ೝ
    ᶄ ݟੵͷ֬ೝ
    ᶅ νʔϜମ੍
    "1*։ൃͷͭͷश׳
    ᶃ ઃܭجૅ஌ࣝΛ਎ʹ͚ͭΔ
    ᶄ σʔλʹ஫໨͢Δ
    ᶅ ৗ༻ͷઃܭπʔϧΛ࣋ͭ
    ᶆ APPઃܭࢥ૝Λ৺ʹࠁΉ
    ᶇ ద੾ͳWAFΛબ୒͢Δ
    ᶈ ςετϑΝʔετͰ࡞Δ
    ᶉ CIͱࣗಈϦϦʔεΛߦ͏

    View Slide

  5. $POUFOU
    ։ൃલͷ஫ҙ఺
    ᶃ ܖ໿ͷ֬ೝ
    ᶄ ݟੵͷ֬ೝ
    ᶅ νʔϜମ੍
    "1*։ൃͷͭͷश׳
    ᶃ ઃܭجૅ஌ࣝΛ਎ʹ͚ͭΔ
    ᶄ σʔλʹ஫໨͢Δ
    ᶅ ৗ༻ͷઃܭπʔϧΛ࣋ͭ
    ᶆ APPઃܭࢥ૝Λ৺ʹࠁΉ
    ᶇ ద੾ͳWAFΛબ୒͢Δ
    ᶈ ςετϑΝʔετͰ࡞Δ
    ᶉ CIͱࣗಈϦϦʔεΛߦ͏

    View Slide

  6. ։ൃલͷ஫ҙ఺

    View Slide

  7. w ೳྗͷߴ͍ΤϯδχΞ͕඼࣭ͷߴ͍"1*Λ࡞ΕΔͱ
    ͸ඞͣ͠΋ݶΒͳ͍ɻ
    w ೳྗΛൃش͢ΔͨΊͷ࠷௿ݶͷ৚݅ΛٻΊ͍ͯ͘ඞ
    ཁ͕͋Δɻ

    View Slide

  8. ᶃ ܖ໿ͷ֬ೝ

    View Slide

  9. ੥ෛܖ໿Ͱೲظ͸ܾ·͍ͬͯΔ͚Ͳ…
    w ΍Δ͜ͱ͸ܾ·ͬͯͳ͍
    w ҰମԿΛ੥͚ෛͬͨʁ

    View Slide

  10. ࠶ݟੵ͕ܭըʹೖͬͯͳ͍
    w ࢓༷͸มԽ͢Δ
    w ΍Δ͜ͱ΋มΘΔ
    w ݟੵ͚ͩมΘΒͳ͍ʁ

    View Slide

  11. ੥ෛɾ४ҕ೚ͳͷʹࢦشݖ͕ແ͍
    w ٳՋͷ࿈བྷઌฉ͔ΕͨΓ
    w ૬खͷ෰຿نఔʹԊ͏ʁ
    w ҧ๏ͳΜ͡Όɾɾɾ

    View Slide

  12. w ܖ໿಺༰͸࠷ޙͷࡆͱͯ͠कͬͯ͘ΕΔ६
    w ΤϯδχΞ͔ͩΒؔ܎ͳ͍ɾɾɾ͸/(
    w ࣾ಺Ͱܖ໿ͷΨΠυϥΠϯΛ࡞ΔͳͲͯ͠
    ๷೾అΛ࡞͓ͬͯ͘
    খ·ͱΊ

    View Slide

  13. ᶄ ݟੵͷ֬ೝ

    View Slide

  14. ݟੵͷ਺ࣈ͸ίϛοτϝϯτʹͳΔ
    w ਺ࣈ͚͕ͩҰਓา͖͍ͯ͘͠
    w ॳظͷݟੵ͕ਖ਼͍͠ͱ͍͏ؒҧͬͨղऍ
    w ݴͬͨऀෛ͚ͷੈք

    View Slide

  15. ܭը͕มΘͬͯ΋ݟੵ͕มΘΒͳ͍
    w ೲظʹ߹Θͤͯݟੵ͕ॖখ͢Δոݱ৅
    w ಾͷΤΫηϧද͕ര஀
    w ϦϦʔε೔͸ෆಈ

    View Slide

  16. νʔϜ಺Ͱ΋ݟੵͷղऍ͕ҟͳ͍ͬͯΔ
    w Ӧۀ͸Ӧۀͷղऍ
    w 1.͸1.ͷղऍ
    w ΤϯδχΞ͸ݟੵ͕͍͍Ճݮͳ͜ͱΛ஌͍ͬͯΔ

    View Slide

  17. w νʔϜ಺ͰݟੵͷษڧձΛ͢Δ
    w ಾղऍ͕ߦΘΕͳ͍Α͏ʹৗʹҙࣝ߹Θͤ
    w ݟੵ͸ઈ͑ͣมԽ͢Δ
    খ·ͱΊ

    View Slide

  18. w ໊ݴʮݟੵΓ͸ఱؾ༧ใʯ
    w ن໛Ͱݟੵɺ࣮੷Ͱ׬੒೔Λܭࢉ
    w ݟੵʹର͢Δਖ਼͍͠ೝࣝΛڭ͑ͯ͘ΕΔ
    ࢀߟਤॻ
    ΞδϟΠϧͳ
    ݟੵΓͱܭըͮ͘Γ

    View Slide

  19. ᶅ νʔϜମ੍ͷ֬ೝ

    View Slide

  20. ϓϩάϥϚͷϚϧνλεΫ͸ېࢭ
    w ௐ੔͠ͳ͕Β֎஫͠ͳ͕Βɺ։ൃ͢Δͷ͸ແཧ
    w ਓؒ͸Ұ౓ʹҰͭͷ͜ͱ͔͠ग़དྷͳ͍
    w ࡞ۀऀ͕͖ͪΜͱ̍ਓ೔೔ΛऔΕΔνʔϜମ੍

    View Slide

  21. νʔϜମ੍ʹ·ͭΘΔόζϫʔυ
    w ϓϨΠϯάϚωʔδϟʔ
    w ϑϧελοΫΤϯδχΞ
    w ͣͬͱ࠾༻׆ಈ͍ͯ͠ΔΑ͏ͳձࣾʹଟ͍৬छ

    View Slide

  22. w ࡞ۀ͕࣌ؒऔΕΔνʔϜମ੍
    w ҆৺ײ͕ແ͍νʔϜͰ͸։ൃͮ͠Β͍
    খ·ͱΊ

    View Slide

  23. $POUFOU
    ։ൃલͷ஫ҙ఺
    ᶃ ܖ໿ͷ֬ೝ
    ᶄ ݟੵͷ֬ೝ
    ᶅ νʔϜମ੍
    "1*։ൃͷͭͷश׳
    ᶃ ઃܭجૅ஌ࣝΛ਎ʹ͚ͭΔ
    ᶄ σʔλʹ஫໨͢Δ
    ᶅ ৗ༻ͷઃܭπʔϧΛ࣋ͭ
    ᶆ APPઃܭࢥ૝Λ৺ʹࠁΉ
    ᶇ ద੾ͳWAFΛબ୒͢Δ
    ᶈ ςετϑΝʔετͰ࡞Δ
    ᶉ CIͱࣗಈϦϦʔεΛߦ͏

    View Slide

  24. "1*։ൃͷͭͷश׳

    View Slide

  25. ᶃ ઃܭجૅ஌ࣝΛ਎ʹ͚ͭΔ

    View Slide

  26. RestAPIͷઃܭ͸؁͘ΈΒΕ͕ͪ
    w 8FCαΠτͷϊϦͰ࡞ΒΕͯ͠·͏
    w +40/ฦͯ͠Ε͹ͦΕͰ0,
    w 63-͔ΒಡΈऔΕΔ৘ใ͕গͳ͍

    View Slide

  27. ཈͑ͯཉ͍͠ઃܭࢥ૝΍צॴ
    w -46%WT44,%
    w ར༻ऀʹ෼͔Γ΍͍͢63-ઃܭ
    w )551ͷ࢓૊ΈΛ্खʹར༻͢Δ

    View Slide

  28. w "1*ઃܭͷڭయ
    w खࠒͳϖʔδ਺Ͱแׅతʹֶ΂Δ
    w ؤுΕ͹೔ͰಡΊ·͢
    ࢀߟਤॻ
    8FC"1*
    5IF(PPE1BSUT
    ਫ໺و໌ ஶ
    ※͜ΕҰ࡭ಡΉ͚ͩͰ͔ͳΓҧ͍͕Ͱ·͢

    View Slide

  29. ᶄ σʔλʹ஫໨͢Δ

    View Slide

  30. APIΛઃܭ͢Δͱ͖͸·ͣσʔλ͔Β
    w "1*͸σʔλΛར༻ऀʹఏڙ͢Δ࢓૊Έ
    w ٧·Δॴ͸42-͕ϝΠϯ
    w σʔλϞσϧ͔Β"1*࢓༷ΛܾΊ͍ͯ͘

    View Slide

  31. σʔλɾϞσϧ͔Β൑அͰ͖Δ͜ͱ
    w ࢓༷ͷແཧΛચ͍ग़ͤΔ
    w σʔλ͕୯७Ͱ͋Ε͹"1*Λ࡞Βͳ͍ܾஅ΋ɻ
    w #BB4Ͱ։ൃͷόοΫΤϯυ

    View Slide

  32. σʔλɾϞσϧͷઃܭํ๏
    w ݄ฒΈ͚ͩͲཁ݅ఆٛ
    w ݄ฒΈ͚ͩͲ֎෦ઃܭ 6*69ઃܭ

    w ίπίπͱ&3ਤΛ࡞Δ

    View Slide

  33. w σʔλϞσϦϯάೳྗ͸"1*ͷ඼࣭ʹ௚݁
    w ৔߹ʹΑͬͯ͸"1*Λ࡞Βͳ͍൑அ

    View Slide

  34. w ϦϨʔγϣφϧϞσϧͷཧ࿦Λֶ΂Δ
    w ͳΜͱͳ͘ɾɾɾͷཧ۶͕෼͔Δ
    w ಡΉͷ͸݁ߏେม
    ࢀߟਤॻ
    ཧ࿦͔ΒֶͿ
    σʔλϕʔε࣮ફೖ໳
    Ԟ໺װ໵ ஶ

    View Slide

  35. w ύϑΥʔϚϯεΛҙࣝͨ͠42-
    w %#.4ͷ࣮ߦܭըʹର͢Δཧղ
    ࢀߟਤॻ
    42-࣮ફೖ໳
    ϛοΫ ஶ

    View Slide

  36. ᶅ ৗ༻ͷઃܭπʔϧΛ࣋ͭ

    View Slide

  37. खʹೃછΜͩઃܭπʔϧ͸ๅ෺
    w ઃܭ੒Ռ෺ͱͯ͠&3ਤɺ"1*࢓༷ॻ͕ඞཁ
    w ϙΠϯτΛ཈͍͑ͯΕ͹ɺͲΕͰ΋ߏΘͳ͍ɻ

    View Slide

  38. ERਤ࡞੒ͷπʔϧબఆϙΠϯτ
    w ಛʹແ͠ɻ
    w ݟ΍ͯ͘͢ɺӡ༻ָ͕ͳΒԿͰ΋͍͍ɻ

    View Slide

  39. w .BDͰಈ͘ʂ
    w 1%'ग़ྗ͕͋Δ
    w ૢ࡞ੑ΋·͋·͋Ͱݟͨ໨΋0,
    ࢀߟπʔϧ
    .Z42-8PSLCFODI

    View Slide

  40. API࢓༷ॻ࡞੒ͷπʔϧબఆϙΠϯτ
    w ࢓༷ॻʹϒϥ΢βͰΞΫηεͰ͖Δ
    w มߋͨ͠࢓༷ॻͷߋ৽Λ$*ܦ༝Ͱߦ͑Δ

    View Slide

  41. w +40/PSZBNMͰฤू0,
    w ϒϥ΢βͰӾཡՄೳ
    w %PDLFSͰ؆୯ʹߏஙՄೳ
    w ؔ࿈πʔϧ΋ॆ࣮
    ࢀߟπʔϧ
    4XBHHFS6*

    View Slide

  42. w खʹೃછΉઃܭπʔϧΛ୳͓ͯ͘͠
    w "1*࢓༷ॻ͸"1*ར༻ऀͷҝʹ΋

    ࠷৽ͷঢ়ଶΛΩʔϓ͠қ͍πʔϧΛબͿ

    View Slide

  43. ᶆ APPઃܭࢥ૝Λ৺ʹࠁΉ

    View Slide

  44. GBDUPSBQQ
    IUUQTGBDUPSOFU

    View Slide

  45. Մ༻ੑͷߴ͍ΞϓϦέʔγϣϯͷઃܭࢥ૝
    w ͱΓ͋͑ͣಡΜͲ͘
    w ϞμϯͳΞϓϦͷઃܭࢥ૝͕٧·͍ͬͯΔ
    w ࠷ۙ͸ී௨ʹҙࣝ͞Ε͍ͯΔؾ΋͢Δ

    View Slide

  46. ᶇ ద੾ͳWAFΛબ୒͢Δ

    View Slide

  47. ΦϨΦϨϑϨʔϜϫʔΫ͸΍Ί͓ͯ͜͏
    w ޙͷਓͷ͜ͱΛߟ͑Α͏ ੾࣮

    w ͍ͭ࠷ۙ΋ා͍ͷΛݟͨ
    w ՈͰ΍Ζ͏ʂ

    View Slide

  48. WAFબఆϙΠϯτ
    w .JHSBUJPO
    w ςετπʔϧ
    w ίϚϯυϥΠϯ
    w ΤϥʔϋϯυϦϯά

    View Slide

  49. w -BSBWFM੡ͷܰྔ8"'
    w ଎͍ˍࢀߟ৘ใ͕ଟ͍
    w ઌͷબߟϙΠϯτ͸શͯΫϦΞ
    ࢀߟ8"'
    -VNFO
    https://lumen.laravel.com/

    View Slide

  50. w ඞཁͳػೳΛ࣋ͬͨ8"'Λ஌͓ͬͯ͘
    w ΦϨΦϨ͸΍ΊΑ͏ɻ
    w ϚΠΫϩϑϨʔϜϫʔΫXJUIDPNQPTFS
    ΋ྑ͍ͱ͸ࢥ͏ɻ

    View Slide

  51. ᶈ ςετϑΝʔετͰ࡞Δ

    View Slide

  52. +VTU%P*U

    View Slide

  53. ࣮͸API͸͘͢͝ςετ͠΍͍͢
    w "1*࢓༷ॻͰ*0͕ܾ·͍ͬͯΔ
    w 63-୯ҐͰ࡞Ε͹͍͍ͷͰ෼͔Γ΍͍͢
    w ΍Βͳ͍ͳΜͯ໪ମແ͍ʂ

    View Slide

  54. w ΍Βͳ͍બ୒ࢶ͸ແ͍ɻ
    w ಛʹ࢓༷มߋ΍όάमਖ਼࣌ʹҖྗΛൃش
    w શମͱͯ͠͸։ൃ଎౓্͕͕Δɻ

    View Slide

  55. w -VNFOʹ΋σϑΥͰ૊ΈࠐΜͰ͋Δ
    w આ໌ෆཁͷ༗໊ςετπʔϧ
    ࢀߟςετπʔϧ
    1)16OJU
    https://phpunit.de/

    View Slide

  56. w #%%ͷςετπʔϧ
    w &&ςετͰΑ͘࢖͏
    w ڈ೥ͷ๻ͷൃද͸#FIBUۦಈ։ൃ
    ࢀߟςετπʔϧ
    #FIBU
    http://behat.org/en/latest/

    View Slide

  57. ᶉ CIͱࣗಈϦϦʔεΛߦ͏

    View Slide

  58. CI΍ࣗಈϦϦʔε͸։ൃʹઐ೦͢Δҝ
    w ҰʑϦϦʔε࡞ۀ͢Δͷ໘౗͍͘͞
    w ςετͷ࣮ߦ΋໘౗͍͘͞
    w ଵଦͷ݁থ͕ࣗಈϦϦʔε

    View Slide

  59. CI΍ࣗಈϦϦʔεΛଓ͚ΔϙΠϯτ
    w ແཧ͠ͳ͍
    w ͭͶʹ࠷௿ݶͷ͜ͱΛ͢Δ
    w ༨༟͕ग़དྷͨΒ߽՚ʹ͍ͯ͘͠

    View Slide

  60. w ແྉ Ϗϧυίϯςφ

    w 1SJWBUF3FQPTJUPSZ΋࢖͑Δ
    w %PDLFSίϯςφͷCVJMEʹ΋ରԠ
    w ࢿྉ΋ॆ࣮ͯͯ͠࢖͍΍͍͢
    ࢀߟ$*πʔϧ
    $JSDMF$*
    https://circleci.com/

    View Slide

  61. w ແྉ
    w 1SJWBUF3FQPTJUPSZ΋࢖͑Δ
    w Ϗϧυ؀ڥʹ%PDLFSίϯςφ͕࢖͑Δ
    w ݹ͍ࢿྉ͕ଟ͍ͷ͕গ͠೉఺
    ࢀߟ$*πʔϧ
    8FSDLFS
    http://wercker.com/

    View Slide

  62. w ϦϦʔε࡞ۀ͸ػցʹ೚ͤΑ͏
    w εϞʔϧελʔτͰ࢝Ί·͠ΐ͏
    w ৭Μͳ$*πʔϧ͋ΔͷͰࢼͯ͠ݟΑ͏

    View Slide

  63. 'JO

    View Slide