Slide 1

Slide 1 text

த໺ڿਓΞεΫϧגࣜձࣾ 0QFO"1*(FOFSBUPS.FFUVQ 0QFO"1*(FOFSBUPS.FFUVQ ʙਓྨ૯ίϯτϦϏϡʔλԽܭըʙ

Slide 2

Slide 2 text

8FCΞϓϦέʔγϣϯΤϯδχΞ த໺ڿਓ IUUQTBDLJOUPTIHJUIVCJPBCPVU BDLJOUPTI /","/0@"LJIJUP

Slide 3

Slide 3 text

044׆ಈ w0QFO"1*(FOFSBUPS wIUUQTHJUIVCDPN0QFO"1*5PPMTPQFOBQJHFOFSBUPS w(BOFTIB Ψωʔγϟ wIUUQTHJUIVCDPNBDLJOUPTIHBOFTIB w4OJEFM εφΠσϧ wIUUQTHJUIVCDPNBDLJOUPTITOJEFM

Slide 4

Slide 4 text

OpenAPI Generator Meetup #1 https://openapi-generator-meetup.connpass.com/event/168187/

Slide 5

Slide 5 text

໨࣍ ͍ΖΜͳ಺༰͕ࠞͬͨ͟ ࡶଟͳൃදͰ͢ w Θͨ͠ͷ0QFO"1*(FOFSBUPS׆༻ঢ়گ w 0QFO"1*υΩϡϝϯτΛ࢖ͬͯࠓޙ΍Γ͍ͨ͜ͱ w 4QSJOH$MPVE$POUSBDU0QFO"1* w 0QFO"1*(FOFSBUPSͷ࠷ۙͷτϐοΫΛ͝঺հ w υΩϡϝϯταΠτ͕Ξοϓσʔτ w )BOEMFCBSTʹରԠ w ΧελϜςϯϓϨʔτΤϯδϯʹରԠ w PQFOBQJTUZMFWBMJEBUPSϦϙδτϦ w ,VCFSOBUFTͷ3&45"1*ΫϥΠΞϯτੜ੒πʔϧͱͯ͠࠾༻͕ਐΜͰ͍Δ w ͓ΘΓʹ

Slide 6

Slide 6 text

Θͨ͠ͷ OpenAPI Generator׆༻ঢ়گ

Slide 7

Slide 7 text

ͱ͋ΔγεςϜ ϑϩϯτ αʔό ഑ૹ ঎඼ ސ٬ ஫จ "1* ,PUMJO 4QSJOH#PPU 4QSJOH8FC'MVY ,PUMJO+BWB 4QSJOH#PPU 4QSJOH.7$ 0QFO"1* "1*࢓༷ ͦͷଞ

Slide 8

Slide 8 text

഑ૹ ঎඼ ސ٬ ஫จ ,PUMJO 4QSJOH#PPU 4QSJOH8FC'MVY ,PUMJO+BWB 4QSJOH#PPU 4QSJOH.7$ "1*࢓༷ ͦͷଞ "1* ͱ͋ΔγεςϜ0QFO"1*(FOFSBUPSͷ׆༻ঢ়گ ϑϩϯτ αʔό ϑϩϯταʔόͰ࢖͏ ϞσϧΫϥεͷੜ੒͚ͩ 0QFO"1*

Slide 9

Slide 9 text

໨࣍ w Θͨ͠ͷ0QFO"1*(FOFSBUPS׆༻ঢ়گ w 0QFO"1*υΩϡϝϯτΛ࢖ͬͯࠓޙ΍Γ͍ͨ͜ͱ w 4QSJOH$MPVE$POUSBDU0QFO"1* w 0QFO"1*(FOFSBUPSͷ࠷ۙͷτϐοΫΛ͝঺հ w υΩϡϝϯταΠτ͕Ξοϓσʔτ w )BOEMFCBSTʹରԠ w ΧελϜςϯϓϨʔτΤϯδϯʹରԠ w PQFOBQJTUZMFWBMJEBUPSϦϙδτϦ w ,VCFSOBUFTͷ3&45"1*ΫϥΠΞϯτੜ੒πʔϧͱͯ͠࠾༻͕ਐΜͰ͍Δ w ͓ΘΓʹ Ұ୴0QFO"1*(FOFSBUPS͔Β ࿩͕୤ઢ͠·͢

Slide 10

Slide 10 text

APIͷςετΛ ࣗಈੜ੒͍ͨ͠

Slide 11

Slide 11 text

8%#1SFTTWPMεΩʔϚۦಈ8FC"1*։ൃ IUUQTHJIZPKQNBHB[JOFXEQSFTTBSDIJWFWPM ୈষ0QFO"1*ʹΑΔεΩʔϚۦಈ։ൃ ʮεΩʔϚΛ༻͍ͯ࢓༷ͱ࣮૷ͷҰகΛࣗಈςετ͢Δʯ 3VCZPO3BJMTͰ࣮૷ͨ͠"1*αʔόͷϨεϙϯε͕ɺ 0QFO"1*υΩϡϝϯτͱဃ཭͍ͯ͠ͳ͍͔Λࣗಈςετ͢Δ ࣮૷Λ঺հ͍ͯ͠Δɻ ར༻͞Ε͍ͯΔϥΠϒϥϦ 34QFD PBT@QBSTFS KTPO@TDIFNB $PNNJUUFF

Slide 12

Slide 12 text

Spring Cloud Contract (SCC) ͦ͜Ͱ… ʹ໨Λ͚ͭ·ͨ͠

Slide 13

Slide 13 text

4QSJOH$MPVE$POUSBDU 4$$ w4QSJOH$MPVE$POUSBDU͸$%$ ˞ ͷ࣮ફΛαϙʔτ͢Δπʔϧ w"1*ʹظ଴͢ΔڍಈΛl$POUSBDUzʹهड़͢Δ wˠʮϦΫΤετ999Λ౤͛ͨΒɺϨεϙϯε:::Λฦ͢ʯ wهड़ͨ͠$POUSBDU͔Βελϒαʔό΍ςετΛࣗಈੜ੒Ͱ͖Δ w ˞ $%$$POTVNFS%SJWFO$POUSBDUTEFWFMPQNFOU w IUUQXXXTFSWJDFEFTJHOQBUUFSOTDPN8FC4FSWJDF&WPMVUJPO$POTVNFS%SJWFO$POUSBDUT w "1*ར༻ऀ͕ظ଴͢ΔڍಈΛυΩϡϝϯτԽ͢Δ $POUSBDU w "1*ར༻ऀఏڙऀͷ૒ํ͕$POUSBDUΛ΋ͱʹςετΛߦ͏͜ͱͰ඼࣭Λอͪͳ͕ΒχʔζΛຬͨ ͢։ൃΛߦ͏ IUUQTHJUIVCDPNTQSJOHDMPVETQSJOHDMPVEDPOUSBDU

Slide 14

Slide 14 text

4QSJOH$MPVE$POUSBDU 4$$ $POUSBDU (SPPWZ%4- ࣗಈੜ੒͞ΕΔςετίʔυ "1*ͷ࢓༷Λهड़ͨ͠$POUSBDU͔ΒςετίʔυΛࣗಈੜ੒ͨ͠ྫ

Slide 15

Slide 15 text

Spring Cloud Contract OpenAPI ͜Ε͸͏·͘࢖͑ͦ͏ɺͱ͍͏͜ͱͰ Λ։ൃதͰ͢

Slide 16

Slide 16 text

4QSJOH$MPVE$POUSBDU0QFO"1* ಈ࡞Πϝʔδ 0QFO"1*υΩϡϝϯτ 4QSJOH$MPVE$POUSBDU0QFO"1* 0QFO"1*υΩϡϝϯτˠ$POUSBDUͷΦϒδΣΫτʹม׵ ςετίʔυ ೖྗ ग़ྗ

Slide 17

Slide 17 text

4QSJOH$MPVE$POUSBDU0QFO"1* w0QFO"1*υΩϡϝϯτͷఆ͔ٛΒ4QSJOH#PPUͷςετίʔυΛࣗಈੜ੒͢Δ (SBEMF.BWFOϓϥάΠϯ w಺෦Ͱɺ0QFO"1*υΩϡϝϯτ͔Β$POUSBDUʹม׵͍ͯ͠Δ wઈࢍ։ൃதͰɺ·ͩ·࣮ͩ༻·Ͱ͸ԕ͍ʜ IUUQTHJUIVCDPNBDLJOUPTITQSJOHDMPVEDPOUSBDUPQFOBQJ IUUQTHJUIVCDPNBDLJOUPTITQSJOHDMPVEDPOUSBDUPQFOBQJTBNQMF * αϯϓϧίʔυ * ϦϙδτϦ

Slide 18

Slide 18 text

໨࣍ w Θͨ͠ͷ0QFO"1*(FOFSBUPS׆༻ঢ়گ w 0QFO"1*υΩϡϝϯτΛ࢖ͬͯࠓޙ΍Γ͍ͨ͜ͱ w 4QSJOH$MPVE$POUSBDU0QFO"1* w 0QFO"1*(FOFSBUPSͷ࠷ۙͷτϐοΫΛ͝঺հ w υΩϡϝϯταΠτ͕Ξοϓσʔτ w )BOEMFCBSTʹରԠ w ΧελϜςϯϓϨʔτΤϯδϯʹରԠ w PQFOBQJTUZMFWBMJEBUPSϦϙδτϦ w ,VCFSOBUFTͷ3&45"1*ΫϥΠΞϯτੜ੒πʔϧͱͯ͠࠾༻͕ਐΜͰ͍Δ w ͓ΘΓʹ 0QFO"1*(FOFSBUPSʹؔ܎͢Δ ׂͱ࠷ۙͷτϐοΫΛ େখ͍͔ͭ͘͝঺հ͠·͢

Slide 19

Slide 19 text

υΩϡϝϯταΠτ͕Ξοϓσʔτ IUUQTPQFOBQJHFOFSBUPSUFDI μʔΫϞʔυ αΠτ಺ݕࡧ

Slide 20

Slide 20 text

)BOEMFCBSTʹରԠ FYQFSJNFOUBM w W͔Βɺैདྷͷ.VTUBDIFʹՃ͑ͯɺ)BOEMFCBSTʹࢼݧతʹରԠ w F FOHJOF ΦϓγϣϯͰςϯϓϨʔτΤϯδϯΛࢦఆ w ·ͩ૊ΈࠐΈͷςϯϓϨʔτ͸.VTUBDIFͰॻ͔Ε͍ͯΔ w ͳͷͰࠓͷॴɺ)BOEMFCBSTͰςϯϓϨʔτΛॻ͖͍ͨ৔߹͸ɺࣗલͰδΣωϨʔλΫϥε 9YY$PEFHFOΫϥε Λ࣮૷͢Δඞཁ͋Γ w δΣωϨʔλΫϥε࣮૷ʹ͍ͭͯͷυΩϡϝϯτ w IUUQTPQFOBQJHFOFSBUPSUFDIEPDTDVTUPNJ[BUJPODVTUPNHFOFSBUPSBOEUFNQMBUF $ openapi-generator \ generate \ -e handlebars \ -t {Handlebarsͷه๏Ͱॻ͔ΕͨςϯϓϨʔτ} ɹ {লུ}

Slide 21

Slide 21 text

ΧελϜςϯϓϨʔτΤϯδϯʹରԠ FYQFSJNFOUBM w W͔ΒࢼݧతʹରԠ w ྫ1FCCMF&3#4NBSUZͰςϯϓϨʔτΛॻ͖͍ͨ৔߹ w 5FNQMBUF&OHJOF"EBQUFSΠϯλʔϑΣʔεΛ࣮૷͢Δ w ΧελϜςϯϓϨʔτΤϯδϯ͍ͭͯͷυΩϡϝϯτ w IUUQTPQFOBQJHFOFSBUPSUFDIEPDTUFNQMBUJOHDVTUPNFOHJOFT # PebbleςϯϓϨʔτΤϯδϯʹରԠͨ͠ΞμϓλΛclasspathʹೖΕ࣮ͯߦ͢Δ $ java -cp \ /path/to/pebble-adapter.jar:modules/openapi-generator-cli/target/openapi-generator-cli.jar \ generate \ -e pebble \ -g php \ {লུ}

Slide 22

Slide 22 text

0QFO"1*5PPMTPQFOBQJTUZMFWBMJEBUPS w 0QFO"1*υΩϡϝϯτͷ-JOUπʔϧ w νʔϜ΍ϓϩμΫτಠࣗͷهड़ϧʔϧΛܾΊͯɺݕূΛࣗಈԽͰ͖Δ w ྫPQFSBUJPO*E͸ඞͣࢦఆ͢Δɺ.PEFMʹ͸ඞͣFYBNQMFTΛఆٛ͢ΔɺϓϩύςΟ໊͸ΩϟϝϧέʔεͰ $ java \ -jar /path/to/openapi-style-validator-cli.jar \ -s openapi.yaml \ # ର৅ͷOpenAPIυΩϡϝϯτ -o options.json # όϦσʔγϣϯͷϧʔϧΛఆٛͨ͠JSONϑΝΠϧ *ERROR* in Model 'Pet', property 'status', field 'example' -> This field should be present and not empty $ echo $status 1 IUUQTHJUIVCDPN0QFO"1*5PPMTPQFOBQJTUZMFWBMJEBUPS FYBNQMF͕ ະఆٛʹͳ͍ͬͯΔͷΛ ࢦఠͯ͘͠Ε͍ͯΔ

Slide 23

Slide 23 text

,VCFSOBUFTͷ3&45"1*ΫϥΠΞϯτੜ੒πʔϧͱͯ͠࠾༻ w 4XBHHFS$PEFHFO͕࢖ΘΕ͍͕ͯͨɺ4XBHHFS$PEFHFO ͷ։ൃ͕͋·Γ׆ൃͰ͸ͳ͍ͨΊʹɺੜ੒ޙͷίʔυʹಠࣗ ʹύονΛ౰ͯͯӡ༻͍ͯͯ͠ϝϯςφϯε͕ਏ͍ঢ়ଶͩͬ ͨ w ҠߦࡁΈ w $ɺ)BTLFMMɺ+BWBɺ1FSMɺ1ZUIPOɺ5ZQF4DSJQU w Ҡߦத w (Pɺ3VCZ IUUQTHJUIVCDPNLVCFSOFUFTDMJFOUHFOJTTVFT

Slide 24

Slide 24 text

͓ΘΓʹ

Slide 25

Slide 25 text

׆ൃͳ։ൃίϛϡχςΟ IUUQTTUBSTQS[FNFLOPXBLDPN (PPHMFτϨϯυ TXBHHFSDPEFHFO PQFOBQJHFOFSBUPS (JU)VCελʔ IUUQTXXXTMJEFTIBSFOFUUFDICMPHZBIPPTXBHHFSPQFOBQJTQFDJpDBUJPOBQJ 4XBHHFSͰ͸ͳ͍0QFO"1*4QFDJpDBUJPOʹΑΔ"1*αʔόʔ։ൃ IUUQTPQFOBQJHFOFSBUPSUFDIVTFST ϢʔβʔاۀϓϩδΣΫτ IUUQTHJUIVCDPN0QFO"1*5PPMTPQFOBQJHFOFSBUPS ϒϩάهࣄɺൃදεϥΠυ

Slide 26

Slide 26 text

ҰํͰʜɺ w ͨͱ͑ίΞνʔϜͷϝϯόʔͰ΋ɺશ͘஌Βͳ͍ݴޠͷϝϯςφϯε͸ݫ͍͠ʜ w 0QFO"1*(FOFSBUPS͕αϙʔτ͍ͯ͠Δݴޠ͸Ҏ্ ʢ଺ཹͯ͠͠·͏JTTVFʣ w ʮ0QFO"1*(FOFSBUPS͸ίί͕Πέͯͳ͍ΜͩΑͳ͊ʯ w ʮͪΐͬͱ044ͷ։ൃ΍ͬͯΈ͍ͨͳʯ w ʮϓϧϦΫग़͢ͷ͸ϋʔυϧߴ͍ͳ͊ɺ͍ͯ͏͔ӳޠͩ͠ʜʯ ؾܰʹ͓੠ֻ͚͍ͩ͘͞ʂαϙʔτ͠·͢✨

Slide 27

Slide 27 text

ࢲͨͪͱҰॹʹ։ൃ͠·ͤΜ͔