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

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

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

F04982ad61107b5408ad139966596316?s=128

Ryo Tomidokoro

November 03, 2016
Tweet

Transcript

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

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

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

  4. $POUFOU ։ൃલͷ஫ҙ఺ ᶃ ܖ໿ͷ֬ೝ ᶄ ݟੵͷ֬ೝ ᶅ νʔϜମ੍ "1*։ൃͷͭͷश׳ ᶃ

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

    ઃܭجૅ஌ࣝΛ਎ʹ͚ͭΔ ᶄ σʔλʹ஫໨͢Δ ᶅ ৗ༻ͷઃܭπʔϧΛ࣋ͭ ᶆ APPઃܭࢥ૝Λ৺ʹࠁΉ ᶇ ద੾ͳWAFΛબ୒͢Δ ᶈ ςετϑΝʔετͰ࡞Δ ᶉ CIͱࣗಈϦϦʔεΛߦ͏
  6. ։ൃલͷ஫ҙ఺

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

  8. ᶃ ܖ໿ͷ֬ೝ

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

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

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

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

  13. ᶄ ݟੵͷ֬ೝ

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

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

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

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

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

  19. ᶅ νʔϜମ੍ͷ֬ೝ

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

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

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

  23. $POUFOU ։ൃલͷ஫ҙ఺ ᶃ ܖ໿ͷ֬ೝ ᶄ ݟੵͷ֬ೝ ᶅ νʔϜମ੍ "1*։ൃͷͭͷश׳ ᶃ

    ઃܭجૅ஌ࣝΛ਎ʹ͚ͭΔ ᶄ σʔλʹ஫໨͢Δ ᶅ ৗ༻ͷઃܭπʔϧΛ࣋ͭ ᶆ APPઃܭࢥ૝Λ৺ʹࠁΉ ᶇ ద੾ͳWAFΛબ୒͢Δ ᶈ ςετϑΝʔετͰ࡞Δ ᶉ CIͱࣗಈϦϦʔεΛߦ͏
  24. "1*։ൃͷͭͷश׳

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

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

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

  28. w "1*ઃܭͷڭయ w खࠒͳϖʔδ਺Ͱแׅతʹֶ΂Δ w ؤுΕ͹೔ͰಡΊ·͢ ࢀߟਤॻ 8FC"1* 5IF(PPE1BSUT ਫ໺و໌

    ஶ ※͜ΕҰ࡭ಡΉ͚ͩͰ͔ͳΓҧ͍͕Ͱ·͢
  29. ᶄ σʔλʹ஫໨͢Δ

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

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

  32. σʔλɾϞσϧͷઃܭํ๏ w ݄ฒΈ͚ͩͲཁ݅ఆٛ w ݄ฒΈ͚ͩͲ֎෦ઃܭ 6*69ઃܭ  w ίπίπͱ&3ਤΛ࡞Δ

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

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

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

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

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

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

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

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

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

  42. w खʹೃછΉઃܭπʔϧΛ୳͓ͯ͘͠ w "1*࢓༷ॻ͸"1*ར༻ऀͷҝʹ΋
 ࠷৽ͷঢ়ଶΛΩʔϓ͠қ͍πʔϧΛબͿ

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

  44. GBDUPSBQQ IUUQTGBDUPSOFU

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

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

  47. ΦϨΦϨϑϨʔϜϫʔΫ͸΍Ί͓ͯ͜͏ w ޙͷਓͷ͜ͱΛߟ͑Α͏ ੾࣮  w ͍ͭ࠷ۙ΋ා͍ͷΛݟͨ w ՈͰ΍Ζ͏ʂ

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

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

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

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

  52. +VTU%P*U

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

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

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

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

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

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

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

  60. w ແྉ Ϗϧυίϯςφ  w 1SJWBUF3FQPTJUPSZ΋࢖͑Δ w %PDLFSίϯςφͷCVJMEʹ΋ରԠ w ࢿྉ΋ॆ࣮ͯͯ͠࢖͍΍͍͢

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

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

  63. 'JO