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

平静を保ち、コードを生成せよ 〜 OpenAPI Generator誕生の背景と軌跡 〜 / gunmaweb34

平静を保ち、コードを生成せよ 〜 OpenAPI Generator誕生の背景と軌跡 〜 / gunmaweb34

Gunma.web #34 スキーマ駆動開発で発表した資料です!
https://gunmaweb.connpass.com/event/113974/

(追記)
OpenAPI Generatorの電子書籍をリリースしましたのでぜひチェックしてください!

REST API のためのコード生成入門 (OpenAPI Generator)
https://gumroad.com/l/openapi_generator_ebook_jp
(/追記)

発表時から下記修正を加えました。
* サブタイトルをつけ忘れていたのを修正しました
* 一部の画面キャプチャを非表示にしました (非表示にした理由はスライドに記載しています)

Akihito Nakano

February 02, 2019
Tweet

More Decks by Akihito Nakano

Other Decks in Programming

Transcript

  1. ʙ0QFO"1*(FOFSBUPS஀ੜͷഎܠͱي੻ʙ
    த໺ڿਓΞεΫϧגࣜձࣾ
    (VONBXFCεΩʔϚۦಈ։ൃ
    ฏ੩ΛอͪɺίʔυΛੜ੒ͤΑ

    View Slide

  2. 8FCΞϓϦέʔγϣϯΤϯδχΞ
    த໺ڿਓ!/","/[email protected]"LJIJUP
    ܈അݝ༢ָ܊༢ָொग़਎
    IUUQTBDLJOUPTIHJUIVCJPBCPVU

    View Slide

  3. ܈അݝ༢ָ܊༢ָொग़਎
    IUUQTXXXUPXOPSBHVONBKQ

    View Slide

  4. View Slide

  5. 044׆ಈ
    w0QFO"1*(FOFSBUPS
    wIUUQTHJUIVCDPN0QFO"1*5PPMTPQFOBQJHFOFSBUPS
    w(BOFTIB Ψωʔγϟ

    wIUUQTHJUIVCDPNBDLJOUPTIHBOFTIB
    w4OJEFM εφΠσϧ

    wIUUQTHJUIVCDPNBDLJOUPTITOJEFM

    View Slide

  6. 8%#13&447PM
    ಛू
    >εΩʔϚۦಈ8FC"1*։ൃ
    ষޙ൒ʙষΛࣥච͍͖ͤͯͨͩ͞·͠
    ͨ!ײँ

    View Slide

  7. Gunma.web #34
    εΩʔϚۦಈ։ൃ

    View Slide

  8. ໨࣍
    wεΩʔϚۦಈ։ൃ
    w lεΩʔϚۦಈ։ൃzͷىݯɺಛ௃
    w0QFO"1*
    w 0QFO"1*஀ੜͷྺ࢙ɺه๏ɺ4XBHHFS5PPMT
    w0QFO"1*(FOFSBUPS
    w ஀ੜͷഎܠɺجຊૢ࡞
    w ΧελϚΠζํ๏ɺΞϯνύλʔϯ
    εΩʔϚۦಈ։ൃ΍0QFO"1*
    ʹ͍ͭͯ֓؍ͨ͋͠ͱɺ
    ࢲͷಘҙ෼໺Ͱ͋Δ
    ίʔυੜ੒ʹ͍ͭͯ۷ΓԼ͛
    ͓ͯ࿩͍͖ͯ͠·͢

    View Slide

  9. εΩʔϚۦಈ։ൃ

    View Slide

  10. εΩʔϚۦಈ։ൃͱ͸
    w໌֬ͳఆ͕ٛ͋ΔΘ͚Ͱ͸ͳ͍
    w8%#13&44ͷಛूͰ͸POL͞ΜͷԼهͷϒϩάண૝Λಘͯ

    zεΩʔϚۦಈ։ൃzͱ͍͏λΠτϧΛ͚ͭͨ
    wεΩʔϚϑΝʔετ։ൃͷεεϝ
    [email protected]@EFWFMPQNFOU

    View Slide

  11. εΩʔϚۦಈ։ൃͱ͸։ൃͷྲྀΕͷҧ͍
    Ҿ༻[email protected]@EFWFMPQNFOU
    API هड़ݴޠҎલͷੈք:
    API هड़ݴޠҎޙͷੈք:

    View Slide

  12. εΩʔϚۦಈ։ൃͱ͸։ൃͷྲྀΕͷҧ͍
    API هड़ݴޠҎલͷੈք:
    API هड़ݴޠҎޙͷੈք:
    Ҿ༻[email protected]@EFWFMPQNFOU

    View Slide

  13. εΩʔϚۦಈ։ൃͱ͸εΩʔϚͱ͸
    wԿ͔͠Βͷߏ଄Λఆٛͯ͠ɺ͋ΔఆΊΒΕͨܗࣜͰهड़ͨ͠΋ͷ
    wྫσʔλϕʔεεΩʔϚ%%-
    w8FC"1*Ͱ͍͏ͱʜ
    wͲͷΤϯυϙΠϯτ͕
    wͲΜͳϦΫΤετΛड෇͚Δͷ͔
    wͲΜͳϨεϙϯεΛฦ͢ͷ͔

    View Slide

  14. εΩʔϚۦಈ։ൃͱ͸ͭ·Γ
    w͸͡ΊʹΈΜͳͰ૬ஊ͠ͳ͕ΒεΩʔϚΛܾΊͯɺ
    wͦΕΛ΋ͱʹฒߦͯ͠։ൃ͢Δ͜ͱ
    ։ൃνʔϜશମͷϫʔΫϑϩʔ
    Ͱ͋Δɻ
    ͭ·Γ

    View Slide

  15. εΩʔϚۦಈ։ൃ৽͍͠։ൃख๏ͱ͍͏Θ͚Ͱ͸ͳ͍
    wίϯτϥΫτϑΝʔετ
    wσβΠϯϑΝʔετ
    Ͱ͸εΩʔϚۦಈ։ൃΛಛ௃͚ͮΔ΋ͷͱ͸ʜ
    ʢಉ͡ࢥ૝ͷ։ൃϑϩʔʣ
    εΩʔϚͰ։ൃΛۦಈ͢Δ͜ͱ
    8FC"1*ͷ࢓༷Λهड़͠
    ֤छπʔϧΛ׆༻ͯ͠։ൃΛޮ཰Խ͢Δ͜ͱ

    View Slide

  16. 8%#13&447PM
    8%#13&447PMͷಛूͰ͸ɺ
    εΩʔϚۦಈ։ൃͷελΠϧ͕ొ৔͢Δ
    લ͔Βͷ։ൃख๏ͷભҠΛஈ֊తʹ͝঺
    հ͍ͯ͠·͢ɻ
    εΩʔϚͰۦಈ͢Δ։ൃͷྑ͞΍ɺͦͷ
    ඞཁੑΛΑΓਂ͘஌Δ͜ͱ͕Ͱ͖·͢
    IUUQTHJIZPKQNBHB[JOFXEQSFTTBSDIJWFWPM

    View Slide

  17. εΩʔϚۦಈ։ൃͱ͸εΩʔϚͱ͸ ࠶

    wԿ͔͠Βͷߏ଄Λఆٛͯ͠ɺ͋ΔఆΊΒΕͨܗࣜͰهड़ͨ͠΋ͷ
    wྫσʔλϕʔεεΩʔϚ
    w8FC"1*Ͱ͍͏ͱʜ
    wͲͷΤϯυϙΠϯτ͕
    wͲΜͳϦΫΤετΛड෇͚Δͷ͔
    wͲΜͳϨεϙϯεΛฦ͢ͷ͔

    View Slide

  18. εΩʔϚۦಈ։ൃεΩʔϚΛهड़͢ΔϑΥʔϚοτ
    w0QFO"1*TQFDJpDBUJPO چ4XBHHFSTQFDJpDBUJPO

    w"1*#MVFQSJOU
    w3".-
    8FC"1* 3&45"1*
    ͷεΩʔϚΛهड़͢ΔϑΥʔϚοτ

    View Slide

  19. OpenAPI

    View Slide

  20. 0QFO"1*֓ཁ
    IUUQTHJUIVCDPN0"*0QFO"1*4QFDJpDBUJPO
    The OpenAPI Specification
    w0QFO"1* 0QFO"1*TQFDJpDBUJPO

    wچ4XBHHFSTQFDJpDBUJPO
    w3&45"1*ͷ࢓༷Λهड़͢ΔϑΥʔϚοτ
    w0QFO"1**OJUJBUJWF
    w0QFO"1*ͷϑΥʔϚοτΛਪਐ͢Δஂମ
    w.JDSPTPGUɺ(PPHMFɺ*#.ɺ4NBSU#FBSͳͲ͕
    ࢀՃ

    View Slide

  21. w೥݄0QFO"1**OJUJBUJWF݁੒
    w೥݄4XBHHFSTQFDJpDBUJPO͕0QFO"1**OJUJBUJWFʹدଃ͞ΕΔ
    w4XBHHFSTQFDJpDBUJPO͕0QFO"1*TQFDJpDBUJPOʹϦωʔϜ͞
    ΕΔ
    w೥݄0QFO"1*TQFDJpDBUJPOϦϦʔε
    w೥݄ݱࡏͷόʔδϣϯ͸0QFO"1*TQFDJpDBUJPO
    0QFO"1*ྺ࢙
    4XBHHFSϓϩδΣΫτ 0QFO"1**OJUJBUJWF
    0QFO"1*TQFD
    4XBHHFSTQFD
    4XBHHFSUPPMT

    View Slide

  22. 0QFO"1*༻ޠʹ͍ͭͯͷ஫ҙࣄ߲
    w0QFO"1*ͷϑΥʔϚοτͷ໊শ͸ɺݫີʹ͸l0QFO"1*4QFDJpDBUJPOz
    w௕͍ͷͰ0QFO"1*Ͱݺ͹ΕΔɻ0"4ͱུ͢͜ͱ΋͋Δ
    w0QFO"1*ͷੈքͰ͸ɺ0QFO"1*Ͱॻ͔Εͨ΋ͷΛz0QFO"1*υΩϡϝϯτzͱ
    ݺͿ
    w IUUQTHJUIVCDPN0"*0QFO"1*4QFDJpDBUJPOCMPCNBTUFSWFSTJPOTNEPQFOBQJEPDVNFOU
    w"1*ͷߏ଄Λఆٛ͢ΔʮεΩʔϚʯͱɺʮ0QFO"1*υΩϡϝϯτʯ͸ಉ͡
    ΋ͷΛࢦ͢

    View Slide

  23. 8%#13&447PM
    εΩʔϚۦಈ։ൃ͸։ൃશମͷϫʔΫϑ
    ϩʔͰ͢ͷͰɺ4XBHHFS0QFO"1*΍
    3&45ͱ͍ͬͨಛఆͷπʔϧ܈΍ύϥμΠ
    Ϝʹݶͬͨ΋ͷͰ͸͋Γ·ͤΜɻ
    ಛूͰ͸ɺ(SBQI2-ʹΑΔεΩʔϚۦಈ
    ։ൃ΋঺հ͍ͯ͠·͢
    IUUQTHJIZPKQNBHB[JOFXEQSFTTBSDIJWFWPM

    View Slide

  24. 0QFO"1*ϑΥʔϚοτ
    IUUQTCMPHSFBENFJPBOFYBNQMFpMMFEHVJEFUPTXBHHFS

    View Slide

  25. 0QFO"1*ϑΥʔϚοτ ϝλ৘ใ

    IUUQTCMPHSFBENFJPBOFYBNQMFpMMFEHVJEFUPTXBHHFS

    View Slide

  26. 0QFO"1*ϑΥʔϚοτ ΤϯυϙΠϯτ

    IUUQTCMPHSFBENFJPBOFYBNQMFpMMFEHVJEFUPTXBHHFS

    View Slide

  27. 0QFO"1*ϑΥʔϚοτ ίϯϙʔωϯτ

    IUUQTCMPHSFBENFJPBOFYBNQMFpMMFEHVJEFUPTXBHHFS

    View Slide

  28. 8%#13&447PM
    8%#13&447PMͷಛूͰ͸ɺ
    0QFO"1*υΩϡϝϯτΛߏ੒͢Δ༷ʑͳ
    ΦϒδΣΫτΛৄࡉʹղઆ͍ͯ͠·͢ɻ
    ۩ମతͳه๏ɾ஫ҙ఺΍هड़ͨ͠
    0QFO"1*υΩϡϝϯτͷ؅ཧํ๏ͳͲΛ
    ஌Δ͜ͱ͕Ͱ͖·͢
    IUUQTHJIZPKQNBHB[JOFXEQSFTTBSDIJWFWPM

    View Slide

  29. εΩʔϚۦಈ։ൃͱ͸ ࠶

    w͸͡ΊʹΈΜͳͰ૬ஊ͠ͳ͕ΒεΩʔϚΛܾΊͯɺ
    wͦΕΛ΋ͱʹฒߦͯ͠։ൃ͢Δ͜ͱ
    ։ൃνʔϜશମͷϫʔΫϑϩʔ
    Ͱ͋Δɻ
    ͭ·Γ
    πʔϧͷࢧԉ͕ඞཁ

    View Slide

  30. Swagger Tools

    View Slide

  31. 0QFO"1*4XBHHFS5PPMT
    w4XBHHFS&EJUPS
    w0QFO"1*υΩϡϝϯτ εΩʔϚ
    ͷهड़Λࢧԉ
    wIUUQTFEJUPSTXBHHFSJP
    w4XBHHFS6*
    w"1*࢓༷Λࢹ֮ԽɺΠϯλϥΫςΟϒͳ"1*ૢ࡞
    wIUUQTQFUTUPSFTXBHHFSJP
    w4XBHHFS$PEFHFO
    w0QFO"1*υΩϡϝϯτ͔ΒιʔείʔυΛࣗಈੜ੒

    View Slide

  32. 0QFO"1*εΩʔϚۦಈ։ൃͱ4XBHHFS5PPMT
    [email protected]@EFWFMPQNFOU
    API هड़ݴޠҎޙͷੈք
    0QFO"1*υΩϡϝϯτͷهड़
    ࢓༷ͷڞ༗ɾ֬ೝ
    ελϒੜ੒ػೳΛར༻ͨ͠εΩϟϑΥʔϧσΟϯά
    ੜ੒ͨ͠ελϒΛར༻ͨ͠ฏߦ։ൃ
    ੜ੒ͨ͠ΫϥΠΞϯτΛར༻ͨ͠޻਺࡟ݮ
    ςετίʔυͷࣗಈੜ੒
    Swagger Editor
    Swagger UI
    Swagger Codegen

    View Slide

  33. 0QFO"1*υΩϡϝϯτͷهड़
    ࢓༷ͷڞ༗ɾ֬ೝ
    Swagger Editor
    Swagger UI
    0QFO"1*ίʔυੜ੒ͷԸܙ͸େ͖͍
    [email protected]@EFWFMPQNFOU
    API هड़ݴޠҎޙͷੈք
    ελϒੜ੒ػೳΛར༻ͨ͠εΩϟϑΥʔϧσΟϯά
    ੜ੒ͨ͠ελϒΛར༻ͨ͠ฏߦ։ൃ
    ੜ੒ͨ͠ΫϥΠΞϯτΛར༻ͨ͠޻਺࡟ݮ
    ςετίʔυͷࣗಈੜ੒
    Swagger Codegen

    View Slide

  34. OpenAPI Generator

    View Slide

  35. 0QFO"1*(FOFSBUPS֓ཁ
    w೥݄ʹ஀ੜ
    w4XBHHFS$PEFHFOW͔ΒϑΥʔΫ
    wαϙʔτ͢ΔݴޠɾϑϨʔϜϫʔΫ͸Ҏ্
    w0QFO"1*ʹରԠ
    w0QFO"1**OJUJBUJWFͱ͸ؔ܎ͳ͍
    w 0"*഑ԼͷϓϩδΣΫτͩͱؒҧΘΕΔ͜ͱ͕͋Δ

    IUUQTPQFOBQJHFOFSBUPSUFDI

    View Slide

  36. OpenAPI Generator
    ϑΥʔΫͷഎܠͱ͜Ε·Ͱͷي੻

    View Slide

  37. 0QFO"1*(FOFSBUPSϑΥʔΫͷഎܠ 4NBSU#FBSࣾͷίϛϡχςΟܰࢹ

    w4XBHHFS$PEFHFOͷ։ൃ͸4NBSU#FBS͕ࣾओಋ͍ͯ͠Δ
    w೥ʹ4XBHHFSϓϩδΣΫτͷεϙϯαʔγοϓΛ4NBSU#FBS͕ࣾҾ
    ͖ܧ͍ͩ
    w IUUQTRJJUBDPNSJOBYTVNPNPJUFNTCFFFBFFEDG
    w೥݄ʹ0QFO"1*͕ϦϦʔε͞Εɺ֤044ϓϩδΣΫτ΍༗ঈαʔ
    Ϗε͸ͦͷରԠʹணख
    w͔͠͠ɺ4XBHHFS$PEFHFO͸೥ॳΊʹͳͬͯ΋ରԠ͕ਐΜͰ͓Βͣڝ
    ߹͔Β஗ΕΛͱ͍ͬͯͨ
    wʹ΋ؔΘΒͣ4NBSU#FBSࣾ͸0QFO"1*ରԠͱ͸ؔ܎ແ͍େ͖ͳվमΛlಠ
    அͰzߦ͏

    View Slide

  38. wϦϙδτϦͷ෼ׂ
    0QFO"1*(FOFSBUPSϑΥʔΫͷഎܠ ಠஅͰߦΘΕͨେ͖ͳվम

    TXBHHFSDPEFHFO
    TXBHHFSDPEFHFOHFOFSBUPST

    View Slide

  39. 0QFO"1*(FOFSBUPSϑΥʔΫͷഎܠ ίϛϡχςΟʹ޿͕Δෆ৴ײ

    wಠஅͰਐΜͰ͍͘։ൃํ਑ʹ͍ͭͯɺίϛϡχςΟ͔Β੠্͕͕Δ͕ɺฉ͖ೖ
    ΕΒΕͳ͍
    ൃද࣌͸ɺ౰࣌ͷঢ়گΛΑΓϦΞϧʹ఻͑ΔͨΊʹJTTVFͳͲͷ
    ը໘ΩϟϓνϟΛ͜͜ʹೖΕ͍ͯ·͕ͨ͠ɺ
    ಛఆͷݸਓ΁ͷ൷൑ʹܨ͕Γ͔Ͷͳ͍ͨΊɺެ։͢ΔεϥΠυͰ͸߇͍͖͑ͤͯͨͩ͞·͢

    View Slide

  40. wϨϏϡʔΛ௨ͣ͞ʹςετίʔυΛҰؾʹແޮԽ
    0QFO"1*(FOFSBUPSϑΥʔΫͷഎܠ ίϛϡχςΟʹ޿͕Δෆ৴ײ

    ൃද࣌͸ɺ౰࣌ͷঢ়گΛΑΓϦΞϧʹ఻͑ΔͨΊʹJTTVFͳͲͷ
    ը໘ΩϟϓνϟΛ͜͜ʹೖΕ͍ͯ·͕ͨ͠ɺ
    ಛఆͷݸਓ΁ͷ൷൑ʹܨ͕Γ͔Ͷͳ͍ͨΊɺެ։͢ΔεϥΠυͰ͸߇͍͖͑ͤͯͨͩ͞·͢

    View Slide

  41. ೥ʹ4NBSU#FBS͕ࣾεϙϯαʔγοϓΛҾ͖ܧ͍ͩͱ͖ͷهࣄ
    w 5POZ5BNࢯ 4XBHHFSϓϩδΣΫτ૑࢝ऀͷͻͱΓ
    ͕4NBSU#FBSࣾΛબΜͩཧ༝
    Λޠ͍ͬͯΔ
    IUUQTXXXJOGPRDPNOFXTTXBHHFSGPVOEFSXIBUTOFYU
    ൴Β 4NBSU#FBS
    ͕

    ࣗݾརӹͷͨΊ͚ͩʹ
    4XBHHFSΛར༻͢Δ͜ͱ͸ͳ͍
    ͱ֬৴͍ͯ͠Δ
    ݱࡏͷৼΔ෣͍͔Β͸
    ͦͷΑ͏ʹ͸ײ͡ΒΕͳ͘
    ͳ͍ͬͯΔ

    View Slide

  42. ։ൃίϛϡχςΟ͸
    4NBSU#FBSࣾͷϏδωεʹແঈͰߩݙ͢Δ
    ϘϥϯςΟΞͰ͸ͳ͍

    View Slide

  43. w4NBSU#FBSࣾͷ։ൃίϛϡχςΟΛܰࢹͨ͠ಈ͖ʹɺࠞཚͨ͠Γٙ໰Λ๊͘։
    ൃऀ͕ͨͪग़ͯ͘Δ
    w͜ͷঢ়گΛվળ͢ΔͨΊʹ8JMMJBN τοϓίϯτϦϏϡʔλ
    ͕4NBSU#FBSࣾ
    ͱ࿩͠߹͍ΛॏͶΔ
    w͕ɺ4NBSU#FBSࣾ͸શ͘ฉ͖ೖΕͳ͔ͬͨ
    w8JMMJBN͸4NBSU#FBSࣾͷઆಘΛఘΊɺࠓޙʹ͍ͭͯ։ൃίϛϡχςΟͱ࿩͠
    ߹ͬͨ
    4XBHHFS$PEFHFOΛϑΥʔΫͯ͠ผͷϓϩδΣΫτͱͯ͠
    ίϛϡχςΟɾυϦϒϯͳ։ൃΛਐΊΔ͜ͱΛܾΊΔ
    William(@wing328)
    (2018೥3݄ࠒ)
    0QFO"1*(FOFSBUPSϑΥʔΫͷഎܠ ৽ϓϩδΣΫτͷελʔτ

    View Slide

  44. w8JMMJBNͷݺͼ͔͚Ͱू·ͬͨਓҎ্ͷίϯτϦϏϡʔλʹΑͬͯ0QFO"1*
    (FOFSBUPSͷॳظ։ൃ͕ߦΘΕͨ
    wϓϩδΣΫτͷެ։·Ͱ͸ϓϥΠϕʔτϦϙδτϦͰ։ൃ
    w0QFO"1*ରԠͷͨΊʹҎ্ͷϓϧϦΫΤετ͕ग़͞Εͨ
    wܞΘͬͨϝϯόʔ͸3&"%.&ʹ'PVOEJOH.FNCFSͱͯ͠ܝࡌ͞Ε͍ͯΔ
    w IUUQTHJUIVCDPN0QFO"1*5PPMTPQFOBQJHFOFSBUPSGPVOEJOHNFNCFSTBMQIBCFUJDBMPSEFS
    w0QFO"1*ͷରԠ͕Ұ௨Γ׬ྃ͠ɺ೥݄೔ʹϕʔλ൛ͱͯ͠ެ։
    0QFO"1*(FOFSBUPSॳظ։ൃΛܦͯϕʔλ൛Λެ։

    View Slide

  45. ϦϙδτϦΛެ։
    ࠷ॳͷ҆ఆ൛ΛϦϦʔε

    View Slide

  46. 0QFO"1*(FOFSBUPSೝ஌౓ͷߴ·Γ
    ϒϩά ٕज़ܥϝσΟΞ
    ެࣜ5XJUUFSΞΧ΢ϯτ
    (JU)VCελʔ਺

    View Slide

  47. w-JOPEFࣾ
    w0QFO"1*(FOFSBUPS0OMJOFΛϗετ͍ͯ͠
    ΔαʔόʔΛ-JOPEF͔ࣾΒఏڙ͍͍ͯͨͩ͠
    ͍ͯΔ
    w63-IUUQBQJPQFOBQJHFOFSBUPSUFDI
    w ˞0QFO"1*(FOFSBUPS0OMJOF
    w ίʔυੜ੒αʔόʔͷػೳ
    w IUUQTHJUIVCDPN0QFO"1*5PPMTPQFOBQJHFOFSBUPSCMPCNBTUFS
    EPDTPOMJOFNE
    0QFO"1*(FOFSBUPSاۀ͔Βͷαϙʔτ
    IUUQTXXXMJOPEFDPN

    View Slide

  48. 0QFO"1*(FOFSBUPSϢʔβʔͷ֦େ
    IUUQTPQFOBQJHFOFSBUPSUFDIVTFSTIUNM
    w׆༻͍͍͍ͯͨͩͯ͠ΔاۀΛ

    υΩϡϝϯταΠτʹܝࡌ
    w΢ν΋࢖ͬͯΔΑʂͱ͍͏͔ͨ͸
    ͥͻϓϧϦΫΤετΛ͍ͩ͘͞
    wl&EJUUIJTQBHFzͷϦϯΫ͔Β

    ϓϧϦΫΤετΛग़ͤ·͢ʂ

    View Slide

  49. 0QFO"1*(FOFSBUPSఆظతͳϦϦʔε
    wύονϦϦʔεִि
    wޙํޓ׵ੑͷ͋Δมߋ
    wϚΠφʔϦϦʔεִ݄
    wޙํޓ׵ੑͷͳ͍มߋ
    w Φϓγϣϯ౳ͰҎલͷڍಈΛ࠶ݱՄ

    wϝδϟʔϦϦʔε൒೥ຖ
    wޙํޓ׵ੑͷͳ͍มߋ
    IUUQTHJUIVCDPN0QFO"1*5PPMTPQFOBQJHFOFSBUPSXJLJ(JU#SBODIFT

    View Slide

  50. 0QFO"1*(FOFSBUPS։ൃίϛϡχςΟ
    w 3&"%.&l"CPVUVTzIUUQTHJUIVCDPN0QFO"1*5PPMTPQFOBQJHFOFSBUPSBCPVUVT
    w5FNQMBUF$SFBUPS
    wݴޠɺϑϨʔϜϫʔΫͳͲͷςϯϓϨʔτΛ࡞੒ͨ͠ਓͨͪ
    w5FDIOJDBM$PNNJUUFF
    wಛఆͷݴޠ޲͚ͷJTTVFɾ13ͷϨϏϡʔͳͲΛߦ͏ਓͨͪ
    w$PSF5FBN
    wϓϩδΣΫτʹϓϥεʹͳΔͰ͋Ζ͏ࣄΛ΍Δਓͨͪ
    wϚʔδݖݶ͋Γ

    View Slide

  51. 0QFO"1*(FOFSBUPSΑΓڧ͍ίϛϡχςΟ΁
    w0QFO"1*(FOFSBUPS͸lίϛϡχςΟओମzͷϓϩδΣΫτ
    w΋ͬͱͨ͘͞Μͷ։ൃऀʹؔΘ͍͖͍ͬͯͨͩͨ
    w৽͍͠໾ׂΛ৽ઃͯ͠ɺΞΫςΟϒʹ׆ಈ͞Ε͍ͯΔํʹϚʔδݖݶΛ౉ͯ͠
    ͍͘ࢼΈ͕Ұ෦ࢼݧతʹ࢝·͍ͬͯΔ
    ϓϩδΣΫτͷԣ΁ͷ޿͕Γ͚ͩͰͳ͘
    ؔ৺ͷߴ͍։ൃऀ͸ΑΓਂؔ͘Θ͍͚ͬͯΔΑ͏ॎͷ޿͕Γ΋࡞͍ͬͯ͘

    View Slide

  52. 0QFO"1*(FOFSBUPSΑΓڧ͍ίϛϡχςΟ΁
    ಺෦ߏ଄ͷϦϑΝΫλϦϯά
    ৽͍͠δΣωϨʔλͷ࣮૷
    0QFO"1*ରԠͷڧԽ
    ։ൃͷϩʔυϚοϓ

    View Slide

  53. ,&&1$"-.
    BOE
    (&/&3"5&$0%&

    View Slide

  54. 0QFO"1*υΩϡϝϯτͷهड़
    ࢓༷ͷڞ༗ɾ֬ೝ
    Swagger Editor
    Swagger UI
    0QFO"1*(FOFSBUPSͰίʔυੜ੒͢Δ
    [email protected]@EFWFMPQNFOU
    API هड़ݴޠҎޙͷੈք
    ελϒੜ੒ػೳΛར༻ͨ͠εΩϟϑΥʔϧσΟϯά
    ੜ੒ͨ͠ελϒΛར༻ͨ͠ฏߦ։ൃ
    ੜ੒ͨ͠ΫϥΠΞϯτΛར༻ͨ͠޻਺࡟ݮ
    ςετίʔυͷࣗಈੜ੒
    OpenAPI Generator

    View Slide

  55. OpenAPI Generator
    ͸͡Ί͔ͨ

    View Slide

  56. υΩϡϝϯταΠτ
    5IBOLT!KJNTDIVCFSU✨
    IUUQTPQFOBQJHFOFSBUPSUFDI
    ࠷ۙυΩϡϝϯταΠτ͕Ͱ͖·ͨ͠ʂ

    View Slide

  57. 0QFO"1*(FOFSBUPSͷ͸͡Ί͔ͨଟ༷ͳΠϯλʔϑΣʔε
    wίϚϯυ
    w)PNFCSFXɺOQNɺ%PDLFSΠϝʔδɺKBSϑΝΠϧ
    wϏϧυπʔϧͷϓϥάΠϯ
    w.BWFOɺ(SBEMF
    w0QFO"1*(FOFSBUPS0OMJOF
    wίʔυੜ੒༻ͷ)551αʔόʔΛࣾ಺౳ʹཱͯΔػೳ

    View Slide

  58. 0QFO"1*(FOFSBUPSͷ͸͡Ί͔ͨجຊίϚϯυ
    αϒίϚϯυ
    0QFO"1*υΩϡϝϯτͷύε
    δΣωϨʔλ໊ ੜ੒͢ΔݴޠɾϑϨʔϜϫʔΫͳͲ

    ग़ྗઌ

    View Slide

  59. 0QFO"1*(FOFSBUPSͷ͸͡Ί͔ͨੜ੒͞ΕΔϑΝΠϧͷྫ
    ྫ1)1ΫϥΠΞϯτ

    "1* Ϟσϧ
    υΩϡϝϯτ
    ੜ੒͞Εͨ"1*ΫϥΠΞϯτ΍Ϟσϧͷ࢓༷͕

    ϚʔΫμ΢ϯͰॻ͔ΕͨυΩϡϝϯτ

    View Slide

  60. 0QFO"1*(FOFSBUPSͷ͸͡Ί͔ͨੜ੒͞ΕΔϑΝΠϧͷྫ
    ྫ1)1ΫϥΠΞϯτ

    "1*ΫϥΠΞϯτΫϥε

    View Slide

  61. 0QFO"1*(FOFSBUPSͷ͸͡Ί͔ͨੜ੒͞ΕΔϑΝΠϧͷྫ
    ྫ1)1ΫϥΠΞϯτ

    Ϟσϧ

    View Slide

  62. 0QFO"1*(FOFSBUPSͷ͸͡Ί͔ͨੜ੒͞ΕΔϑΝΠϧͷྫ
    ྫ1)1ΫϥΠΞϯτ

    ςετ
    1)16OJUΛ࢖ͬͨςετίʔυ

    ͷΨϫ͚͕ͩੜ੒͞ΕΔ
    ɹɹɹɹɹ

    View Slide

  63. 0QFO"1*(FOFSBUPSͷ͸͡Ί͔ͨجຊίϚϯυ
    ͲΜͳαϒίϚϯυ͕͋Δͷ͔஌Γ͍ͨͱ͖
    ɹˠlIFMQzαϒίϚϯυ
    αϒίϚϯυʹࢦఆͰ͖ΔΦϓγϣϯΛ஌Γ͍ͨͱ͖
    ɹˠzIFMQ\αϒίϚϯυ^z

    View Slide

  64. 0QFO"1*(FOFSBUPSͷ͸͡Ί͔ͨجຊίϚϯυ
    δΣωϨʔλݻ༗ͷΦϓγϣϯΛ஌Γ͍ͨͱ͖ ྫ1)1ΫϥΠΞϯτ

    ɹˠlDPOpHIFMQzαϒίϚϯυ
    ͲΜͳδΣωϨʔλ HΦϓγϣϯͷ஋
    ͕͋Δͷ͔஌Γ͍ͨͱ͖
    ɹˠҾ਺ΛԿ΋ࢦఆ͠ͳ͍

    View Slide

  65. OpenAPI Generator
    ͷग़ྗΛΧελϚΠζ͢Δ

    View Slide

  66. 0QFO"1*(FOFSBUPSύοέʔδ໊Λࢦఆ͢Δ
    wŠBQJQBDLBHF
    wŠNPEFMQBDLBHF

    View Slide

  67. 0QFO"1*(FOFSBUPSੜ੒͢ΔϑΝΠϧΛݶఆ͢Δ
    wϞσϧ͚ͩੜ੒͢Δ৔߹l%NPEFMTz
    wͦͷଞ
    w%BQJTɺ%TVQQPSUJOH'JMFT
    wςετ͸ཁΒͳ͍৔߹
    w%NPEFM5FTUTGBMTFɺ%BQJ5FTUTGBMTF

    View Slide

  68. 0QFO"1*(FOFSBUPSੜ੒͢ΔܕΛࢦఆ͢Δ
    wŠUZQFNBQQJOHTͰܕͷϚοϐϯάΛࢦఆ͢Δ
    ྫ೔࣌Λѻ͏ΫϥεͰ͸-PDBM%BUF5JNFΛ࢖͍͍ͨ৔߹

    View Slide

  69. 0QFO"1*(FOFSBUPSΠϯϥΠϯͰఆٛͨ͠Ϟσϧͷ໊લΛࢦఆ͢Δ
    ࣗಈతʹ෇༩͞ΕΔϞσϧ໊͕ඍົͳͱ͖͸ʜ

    View Slide

  70. 0QFO"1*(FOFSBUPSΠϯϥΠϯͰఆٛͨ͠Ϟσϧͷ໊લΛࢦఆ͢Δ
    ˠεοΩϦʂ
    w $PNNVOJUZϞσϧͷlNFNCFSTzϓϩύςΟʹ
    w l.FNCFSzϞσϧͷ഑ྻΛ࣋ͭΑ͏ʹͳΔ
    0QFO"1*υΩϡϝϯτͷlUJUMFzଐੑΛࢦఆ͢Δ͜ͱͰɺ

    View Slide

  71. OpenAPI Generator
    ͦͷଞ΋Ζ΋Ζ

    View Slide

  72. 0QFO"1*(FOFSBUPSੜ੒࣌ͷϩά͕͏Δ͍͞ͱ͖
    l%MPHMFWFMzͰϩάϨϕϧΛࢦఆ͢Δ

    View Slide

  73. 0QFO"1*(FOFSBUPS্ॻ͖ͷڍಈΛ੍ޚ͍ͨ͠ͱ͖
    wҰ཯Ͱ্ॻ͖ͨ͘͠ͳ͍৔߹͸lŠTLJQPWFSXSJUFzΦϓγϣϯ
    w͜·੍͔͘ޚ͍ͨ͠৔߹͸PQFOBQJHFOFSBUPSJHOPSFϑΝΠϧΛ࢖͏
    wHJUJHOPSFͱಉ͡Α͏ͳจ๏
    ͢΂ͯͷCVJMETI
    ϧʔτͷCVJMETI
    EPDT഑Լ͢΂ͯ
    EPDT6TFS"QJNE͸্ॻ͖͢Δ
    TSD഑Լͷ"QJ͸্ॻ͖͠ͳ͍

    View Slide

  74. 0QFO"1*(FOFSBUPS0QFO"1*υΩϡϝϯτͷόϦσʔγϣϯ
    εΩʔϚۦಈ։ൃΛ࣮ફ͢Δ͜ͱͰ։ൃͷޮ཰্͕͕ͬͨʂ࠷ߴʂ
    Ͱ΋ɺ0QFO"1*υΩϡϝϯτΛϛεͳ͘ॻ͘ͷ͸େมʜɻ
    ϨϏϡʔͰຖճ4XBHHFS&EJUPSΛ࢖ͬͯΤϥʔ͕ͳ͍͔֬ೝ͢Δ
    ͷ͸໘౗ͩ͠ɻྑ͍ํ๏͕ͳ͍͔ͳ͊ʜ

    lWBMJEBUFzαϒίϚϯυΛ࢖͑͹
    0QFO"1*υΩϡϝϯτͷจ๏νΣοΫΛ$*Ͱग़དྷ·͢

    View Slide

  75. 0QFO"1*(FOFSBUPS0QFO"1*υΩϡϝϯτͷόϦσʔγϣϯ
    wσϑΥϧτͰɺίʔυੜ੒࣌ʹ΋όϦσʔγϣϯ͕૸͍ͬͯΔ
    wlWBMJEBUFzαϒίϚϯυ͸!UBYQPO͞Μ͕࣮૷ͯͩͬͨ͘͠͞!ײँ
    ิ଍

    ࣮ߦྫඞਢͷϑΟʔϧυ͕ൈ͚͍ͯͨͱ͖
    !UBYQPO

    View Slide

  76. ίʔυੜ੒࣌ʹࢦఆ͢Δ৭ʑͳΦϓγϣϯͷψέ΍ϒϨ͕ͳ͍Α͏
    ʹ౷Ұ͍ͨ͠ɻ͋ͱ࢖͏0QFO"1*(FOFSBUPSͷόʔδϣϯ΋ɻ
    8JOEPXT΍Β.BD΍ΒϝϯόʔʹΑͬͯ৭ʑ͔ͩΒͦͷ΁Μ΋ߟྀ
    ͠ͳ͍ͱʜ

    0QFO"1*(FOFSBUPS։ൃϝϯόʔ಺Ͱॾʑ౷Ұ͍ͨ͠

    View Slide

  77. wΦϓγϣϯΛ+40/ϑΝΠϧʹ·ͱΊ͓͍ͯͯɺzDzΦϓγϣϯͰύεΛ౉͢
    w+40/ϑΝΠϧ͸όʔδϣϯ؅ཧ͢Δ
    w.BWFOɺ(SBEMFΛ࢖͍ͬͯΔϓϩδΣΫτͳΒɺϓϥάΠϯΛ࢖͏ͷ͕Ұ൪
    ྑͦ͞͏
    wΦϓγϣϯ΋ϏϧυπʔϧͷઃఆϑΝΠϧʹॻ͚Δ
    ࢦఆ͢ΔΦϓγϣϯͷψέɾϒϨΛ๷ࢭ
    0QFO"1*(FOFSBUPSͷόʔδϣϯΛ౷Ұ
    0QFO"1*(FOFSBUPS։ൃϝϯόʔ಺Ͱॾʑ౷Ұ͍ͨ͠

    View Slide

  78. "1*αʔόʔͷιʔείʔυʹॻ͍ͨΞϊςʔγϣϯ͔Β0QFO"1*υ
    ΩϡϝϯτΛੜ੒͢Δํ๏΋͋ΔΈ͍ͨɻ
    0QFO"1*υΩϡϝϯτΛઌʹهड़͢Δํ๏ͱɺͲ͕͍͍ͬͪͷʁ

    εΩʔϚۦಈ։ൃΛߦ͏ͳΒ͹ɺ
    0QFO"1*υΩϡϝϯτ εΩʔϚ
    Λઌʹهड़͠·͠ΐ͏
    αʔόʔͷίʔυ͔ΒυΩϡϝϯτΛੜ੒͢Δํ๏΋͋Δ͚Ͳʁ

    View Slide

  79. w͸͡ΊʹεΩʔϚΛΈΜͳͰ૬ஊ͠ͳ͕ΒܾΊͯɺͦΕΛ΋ͱʹαʔόʔͱΫ
    ϥΠΞϯτΛฒߦͯ͠։ൃ͢Δ͜ͱͰޮ཰Λ্͛Δͷ͕εΩʔϚۦಈ։ൃ
    wͳͷͰɺ0QFO"1*υΩϡϝϯτΛઌʹهड़͢Δ
    wαʔόʔͱΫϥΠΞϯτͷ։ൃ͕෼཭͍ͯ͠Δ৔߹
    wྫ,VCFSOFUFTͷ3&45"1*
    wl,VCFSOFUFTͷ։ൃzͱl,VCFSOFUFT ͷ3&45"1*
    Λ࢖͏ΫϥΠΞϯτz
    ͷ։ൃϑϩʔ͸෼཭͍ͯ͠Δ
    w IUUQTHJUIVCDPNLVCFSOFUFTDPNNVOJUZCMPCNBTUFSDPOUSJCVUPSTEFWFMTJHBQJNBDIJOFSZHFOFSBUJOHDMJFOUTFUNE
    ҰํͰɺ"1*αʔόʔͷίʔυ͔Β0QFO"1*υΩϡϝϯτΛੜ੒ͨ͠ํ͕ྑ͍৔߹ͱ͸ʁ
    αʔόʔͷίʔυ͔ΒυΩϡϝϯτΛੜ੒͢Δํ๏΋͋Δ͚Ͳʁ

    View Slide

  80. ͦ͏͍͑͹ੜ੒ͨ͠ίʔυͷϥΠηϯεͬͯͲ͏ͳΔͷʁ

    0QFO"1*(FOFSBUPSੜ੒ͨ͠ίʔυͷϥΠηϯε͸ʁ
    ੜ੒ͨ͠ίʔυ͸Ϣʔβʔ͕ॴ༗͢Δ΋ͷͰ͋Γ

    ໨తʹԠͯࣗ͡༝ʹϥΠηϯεΛద༻͢Δ͜ͱ͕Ͱ͖·͢
    IUUQTHJUIVCDPN0QFO"1*5PPMTPQFOBQJHFOFSBUPSMJDFOTFJOGPSNBUJPOPOHFOFSBUFEDPEF

    View Slide

  81. ίʔυੜ੒
    Ξϯνύλʔϯ

    View Slide

  82. ίʔυੜ੒ͷΞϯνύλʔϯ
    wमਖ਼ͨ͠Օॴ͕࣍ճੜ੒࣌ʹ্ॻ͖͞Εͯ͠·͏
    wͱ͸͍͑ɺ্ॻ͖͠ͳ͍ͱ"1*ఆٛͱίʔυ͕ဃ཭ͯ͠͠·͏
    ੜ੒ͨ͠ίʔυʹखͰमਖ਼ΛՃ͑Δ

    View Slide

  83. (FOFSBUJPO(BQύλʔϯʹΑΔղܾ
    wࣗಈੜ੒͢Δίʔυ͸৮Βͳ͍
    wॲཧΛ௥Ճ͍ͨ͠৔߹͸ܧঝɾҕৡ౳Λ࢖͏
    (FOFSBUJPO(BQύλʔϯ
    IUUQTXXXIZVLJDPNEQEQJOGPIUNM(FOFSBUJPO(BQ
    0QFO"1*(FOFSBUPSͷ
    εΩϟϑΥʔϧυ༻్Ͱߟ͑ͨ৔߹ͷ
    ελϒαʔόʔੜ੒ػೳͰɺ
    (FOFSBUJPO(BQύλʔϯͷ࣮ફΛࢧԉ͢ΔࢼΈ͕͞Ε͍ͯΔͷͰ঺հ͠·͢

    View Slide

  84. w4MJN 1)1
    ͷ৔߹
    wW͔Β͸ɺίϯτϩʔϥ͸ந৅ΫϥεΛੜ੒͢ΔΑ͏ʹͳͬͨ
    wIUUQTHJUIVCDPN0QFO"1*5PPMTPQFOBQJHFOFSBUPSQVMM
    w4QSJOH +BWB
    ͷ৔߹
    wlJOUFSGBDF0OMZzͱ͍͏Φϓγϣϯ͕͋Δ
    wIUUQTHJUIVCDPN0QFO"1*5PPMTPQFOBQJHFOFSBUPSCMPCNBTUFS
    EPDTHFOFSBUPSTTQSJOHNE
    0QFO"1*(FOFSBUPS(FOFSBUJPO(BQύλʔϯΛద༻͢Δ

    View Slide

  85. 0QFO"1*(FOFSBUPS(FOFSBUJPO(BQύλʔϯΛద༻͢Δ
    w͜ͷΑ͏ͳػೳ͸δΣωϨʔλʹΑͬͯαϙʔτঢ়گ͕͞·͟·
    wΈͳ͞Μ͕ར༻͍ͨ͠δΣωϨʔλͰαϙʔτ͕ෆे෼ͳ৔߹͸ͥͻJTTVFΛ
    ্͛ͯΈ͍ͯͩ͘͞
    w΋ͪΖΜϓϧϦΫΤετ΋େ׻ܴͰ͢

    View Slide

  86. 0QFO"1*(FOFSBUPSϓϧϦΫνϟϯε͔΋
    wੜ੒ͨ͠ίʔυʹखΛೖΕͨ͘ͳͬͨͱ͖ɺ
    w΋͔ͨ͠͠Βͦͷमਖ਼͸0QFO"1*(FOFSBUPSࣗମʹೖΕͨํ͕ྑ͍ͷ͔΋͠
    Ε·ͤΜ
    wϓϧϦΫνϟϯε͔΋
    wࠃ಺ΤϯδχΞ޲͚ͷ(JUUFSνϟοτϧʔϜ͕͋Γ·͢ͷͰࠔΓ͝ͱ͕͋Ε
    ͹ͥͻؾܰʹ
    wIUUQTHJUUFSJNPQFOBQJHFOFSBUPSKBQBOFTF-PCCZ

    View Slide

  87. ίʔυੜ੒Λ׆༻ͯ͠
    ޮ཰తͳ։ൃΛʂ

    View Slide

  88. Έͳ͞Μͷ͝ࢀՃΛ͓଴͍ͪͯ͠·͢ʂ

    View Slide

  89. ,&&1$"-.
    BOE
    (&/&3"5&$0%&

    View Slide