Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
新規サービスのWebAPI開発でスキーマ駆動開発を目指してみた話
Search
shibadog1121
August 28, 2019
Programming
3
12k
新規サービスのWebAPI開発でスキーマ駆動開発を目指してみた話
スキーマ駆動開発の取り組み事例を紹介します。
@shibadog39
shibadog1121
August 28, 2019
Tweet
Share
More Decks by shibadog1121
See All by shibadog1121
新規事業におけるWebAPI開発をよしなにリードする方法
shibadog1121
9
3.2k
Other Decks in Programming
See All in Programming
Modern Angular: Renovation for Your Applications
manfredsteyer
PRO
0
200
cXML という電子商取引の トランザクションを支える プロトコルと向きあっている話
phigasui
3
2.2k
破壊せよ!データ破壊駆動で考えるドメインモデリング / data-destroy-driven
minodriven
16
4k
Vue.js学習の振り返り
hiro_xre
2
130
のびしろを広げる巻き込まれ力:偶然を活かすキャリアの作り方/oso2024
takahashiikki
1
400
Googleのテストサイズを活用したテスト環境の構築
toms74209200
0
270
Nuxt UI Pro、NuxtHub、Nuxt Scripts、Nuxtエコシステムをふんだんに利用して開発するコーポレートサイト@Vue Fes Japan 2024
shingangan
3
880
推し活としてのrails new/oshikatsu_ha_iizo
sakahukamaki
3
1.6k
推し活の ハイトラフィックに立ち向かう Railsとアーキテクチャ - Kaigi on Rails 2024
falcon8823
6
2.1k
Server Driven Compose With Firebase
skydoves
0
390
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
810
GitHub Actionsのキャッシュと手を挙げることの大切さとそれに必要なこと
satoshi256kbyte
5
380
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
290
Why You Should Never Use an ORM
jnunemaker
PRO
53
9k
Measuring & Analyzing Core Web Vitals
bluesmoon
1
39
Statistics for Hackers
jakevdp
796
220k
Unsuck your backbone
ammeep
668
57k
RailsConf 2023
tenderlove
29
880
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
7.9k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
9
680
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Music & Morning Musume
bryan
46
6.1k
For a Future-Friendly Web
brad_frost
175
9.4k
Transcript
৽نαʔϏεͷ8FC"1*։ൃͰ εΩʔϚۦಈ։ൃΛࢦͯ͠Έͨ !TIJCBEPH ᓎҪوԝ
ࣗݾհ ᓎҪوԝ !TIJCBEPH ɾ݄͔ΒϝυϐΞࣾһ ɾ৽نࣄۀΛ୲͢ΔνʔϜͷΤϯδχΞ ɾ3BJMT7VFKT ɾ͡Ίͯͷ-5ొஃ
αʔϏεհ ʮLBLBSJʯ ױऀ͞ΜͷϦϐʔλʔԽΛࢦ͢ௐࡎༀہΛࢧԉ
LBLBSJͷఏڙՁ ɾνϟοτ૬ஊ ɾ͓ΒͤҰ੪ૹ৴ FUD ɾॲํͤΜૹ৴ ɾళ಄νΣοΫΠϯ ɾࣄલ
େ͖ͳసͷ࣌ظΛܴ͍͑ͯΔௐࡎༀہۀք ױऀ͞Μͷༀہ બఆཧ༝ ڝ૪ཁҼ લༀہ පӃͷۙ͘Ͱศར ཱ͕த৺ ͳ͡ΈͷༀہͰ҆৺ ༀہػೳༀࡎࢣͷ࣭ࡏݿྔ FUD
͔͔Γ͚ͭༀہ පӃ ॲํͤΜ ༀہ ༀہ ॲํͤΜ පӃ ॲํͤΜͷԠधͷେ͕ ͷલͷපӃɾΫϦχοΫ ༷ʑͳҩྍػ͔ؔΒ ॲํͤΜΛԠध͢Δༀہ ͜Ε·Ͱ ͜Ε͔Β
ༀہۀքͷಈ͖Λݟӽͯ͠ͲΜͲΜػೳ։ൃத
ༀہ༻8FCը໘ ױऀ༻ϞόΠϧΞϓϦ
LBLBSJͷ։ൃମ੍ 8FCϑϩϯτΤϯδχΞ ϞόΠϧΞϓϦΤϯδχΞ αʔόʔαΠυΤϯδχΞ º º º
8F`SFIJSJOH
͍ͭͰʹ
ༀہܦӦऀͷํ୳͍ͯ͠·͢
ΞδΣϯμ εΩʔϚۦಈΛࢦ͢ཧ༝ 0QFO"1*ͱ ͳʹ͕Ͱ͖Δͷ͔ LBLBSJͷ"1*։ൃ
·ͱΊ
εΩʔϚۦಈ։ൃΛࢦ͢ཧ༝
8FC"1*։ൃ͍͠ εΩʔϚۦಈ։ൃΛࢦ͢ཧ༝
8FC"1*։ൃγʔϯ εΩʔϚۦಈ։ൃΛࢦ͢ཧ༝ υΩϡϝϯτͷϝϯς͞Εͯͳͯͭ͘Β͍ͷਤ よっしゃ開発するぜ ΫϥΠΞϯταΠυͪΌΜ 定義通りに実装したのに 動かん αʔόʔαΠυ͘Μ 資料更新するの忘れてた
8FC"1*։ൃγʔϯ εΩʔϚۦಈ։ൃΛࢦ͢ཧ༝ ɾυΩϡϝϯτ௨ΓͷϨεϙϯεΛظ࣮ͯͨ͠͠ͷʹಈ͔ͳ͍ ɾυΩϡϝϯτ͡Όͳͯ͘ɺ࣮ݟͯͱ͔ݴΘΕΔ ɾͱ͍͑υΩϡϝϯτΛϝϯς͢Δͷ໘͍͘͞
8FC"1*։ൃγʔϯ εΩʔϚۦಈ։ൃΛࢦ͢ཧ༝ ΫϥΠΞϯταΠυ։ൃελʔτͰ͖ͳͯ͘ਏ͍ͷਤ αʔόʔαΠυ͘Μ よっしゃAPI開発するぜ やばい 思ったより時間かかりそう ΫϥΠΞϯταΠυͪΌΜ テトリスして待ってるわ
8FC"1*։ൃγʔϯ εΩʔϚۦಈ։ൃΛࢦ͢ཧ༝ ɾαʔόʔαΠυͷ࣮͕ऴΘΔ·ͰΫϥΠΞϯταΠυػ ɾΫϥΠΞϯταΠυ͔Βͷ'#͕͘ͳΔͷͰखΓίετ͕େ ɾؤு࣮ͬͯͨ͠෦͕࣮ෆཁͩͬͨΈ͍ͨͳ͜ͱ͕ى͖ͯ൵͍͠
8FC"1*։ൃͷେ εΩʔϚۦಈ։ൃΛࢦ͢ཧ༝ υΩϡϝϯτͱ࣮͕ဃ ฒྻͰ։ൃΛਐΊΒΕͣɺ։ൃޮ্͕͕Βͳ͍
8FC"1*։ൃͭΒ͍ εΩʔϚۦಈ։ൃΛࢦ͢ཧ༝
ͦΜͳ͋ͳͨʹ εΩʔϚۦಈ։ൃΛࢦ͢ཧ༝ εΩʔϚۦಈ։ൃ
εΩʔϚۦಈ։ൃͱ ɾͤʹ"1*։ൃΛߦ͍ͬͯ͘͜ͱΛࢦͨ͠։ൃख๏ ɾ"1*هड़ݴޠ˞Λ༻͍ͯεΩʔϚ ʹ"1*ఆٛ Λදݱ ɾεΩʔϚ͔ΒυΩϡϝϯτɾίʔυΛγεςϚςΟοΫʹࣗಈੜ ˞0QFO"1*"1*#MVF1SJOU3".-͕͋Δ εΩʔϚۦಈ։ൃΛࢦ͢ཧ༝
εΩʔϚۦಈ։ൃΛࢦ͢ཧ༝ ਐΊํͷΠϝʔδ ΫϥΠΞϯταΠυ αʔόʔαΠυ "1*ఆٛΛ ҰॹʹܾΊΔ ϞοΫͷఏڙ ࣮ ࣮ ݁߹ςετ
ϦϦʔε ૣ͍λΠϛϯάͰ ૬ޓ'#
ͬͯΈ͍ͨ εΩʔϚۦಈ։ൃΛࢦ͢ཧ༝
0QFO"1*ͱ ͳͥ͏ͷ͔
0QFO"1*ͱ ɾ8FC"1*ͷεΩʔϚΛهड़͢ΔͨΊͷϑΥʔϚοτ KTPOZBNMܗࣜ ɾ0QFO"1**OJUJBUJWFͱ͍͏ஂମ (PPHMF.JDSPTPGU*#.͕ࢀՃ ͕ਪ ਐ͍ͯ͠Δ ɾͱͱʮ4XBHHFSʯ˞ ʹ0QFO"1*ϦωʔϜ͞Εͨ 0QFO"1*ͱ
ͳͥ͏ͷ͔ ˞͜ͷ໊Ͱ0QFO"1*ͷपลπʔϧͷ໊લʹ4XBHHFS͕͍ͬͯͨΓ͢Δ IUUQTXXXPQFOBQJTPSH
0QFO"1*ͱ ͳͥ͏ͷ͔ IUUQTHJUIVCDPN0"*0QFO"1*4QFDJGJDBUJPOCMPCNBTUFSFYBNQMFTWQFUTUPSFZBNM ΤϯυϙΠϯτͷύ ε )551ϝιου ظ͞ΕΔϨεϙϯε ϦΫΤετύϥϝʔλʔ
पลπʔϧ͕ڧྗ εΩʔϚͷڞ༗ɾ֬ೝָ͕ʹͰ͖Δ 0QFO"1*ͱ ͳͥ͏ͷ͔ ˠεΩʔϚۦಈ։ൃʹॏཁͳཁૉ͕ଗ͍ͬͯΔ εΩʔϚ͔ΒίʔυΛࣗಈੜ εΩʔϚͷฤूָ͕ʹͰ͖Δ IUUQTHJUIVCDPN0QFO"1*5PPMT PQFOBQJHFOFSBUPS IUUQTFEJUPSTXBHHFSJP
IUUQTTXBHHFSJPUPPMTTXBHHFSVJ
ΫϥΠΞϯταΠυ αʔόʔαΠυ "1*ఆٛΛ ҰॹʹܾΊΔ ϞοΫͷఏڙ ࣮ ࣮ ݁߹ςετ ϦϦʔε 0QFO"1*ͱ
ͳͥ͏ͷ͔ εΩʔϚͷڞ༗ɾ֬ೝָ͕ʹͰ͖Δ εΩʔϚ͔ΒίʔυΛࣗಈੜ εΩʔϚͷฤूָ͕ʹͰ͖Δ
ͬͯΈ͍ͨ εΩʔϚۦಈ։ൃΛࢦ͢ཧ༝
LBLBSJͷ"1*։ൃ
8FC"1*։ൃͷେ υΩϡϝϯτͱ࣮͕ဃ ฒྻͰ։ൃΛਐΊΒΕͣɺ։ൃޮ্͕͕Βͳ͍ LBLBSJͷ"1*։ൃ
8FC"1*։ൃͷେ υΩϡϝϯτͱ࣮͕ဃ ฒྻͰ։ൃΛਐΊΒΕͣɺ։ൃޮ্͕͕Βͳ͍ LBLBSJͷ"1*։ൃ
υΩϡϝϯτͱ࣮ͷဃΛ͙ LBLBSJͷ"1*։ൃ ࡞ઓ"1*ϦΫΤετΛεΩʔϚ௨Γʹ͢Δ εΩʔϚ͔ΒΫϥΠΞϯτϥΠϒϥϦΛࣗಈੜ ࡞ઓ"1*ϨεϙϯεΛεΩʔϚ௨Γʹ͢Δ εΩʔϚ௨Γͷܗࣜʹͳ͍ͬͯΔ͔ࣗಈςετͰνΣοΫ
υΩϡϝϯτͱ࣮ͷဃΛ͙ ϦΫΤετฤ LBLBSJͷ"1*։ൃ ΫϥΠΞϯτϥΠϒϥϦΛ0QFO"1*(FOFSBUPSͰࣗಈੜ ࣗಈੜͷΈ$*ʹऔΓࠐΜͰ͍Δ ˠεΩʔϚͷߋ৽ʹࣗಈͰਵ ίʔυ͚ͩͰͳ͘ɺϝιουͷҰཡ ͷυΩϡϝϯτҰॹʹࣗಈੜ͞ΕΔ
LBLBSJͷ"1*։ൃ ΫϥΠΞϯταΠυ ࣗಈੜ͞ΕͨϥΠϒϥϦͷϝιουΛୟ͚ͩ͘
LBLBSJͷ"1*։ൃ υΩϡϝϯτͱ࣮ͷဃΛ͙ Ϩεϙϯεฤ ɾʮDPNNJUUFFʯͱ͍͏HFNΛಋೖ https://github.com/interagent/committee ɾ"1*ϦΫΤετɾϨεϙϯε͕εΩʔϚ௨Γ͔νΣοΫͰ͖Δ ɾϨεϙϯεͷςετͰBTTFSU@TDIFNB@DPOGPSNΛݺͿ͚ͩͰ͍͍
ɾܕνΣοΫ ɾSFRVJSFE υΩϡϝϯτͱ࣮ͷဃΛ͙ Ϩεϙϯεฤ LBLBSJͷ"1*։ൃ
ɾOVMMBCMF ɾFOVN υΩϡϝϯτͱ࣮ͷဃΛ͙ Ϩεϙϯεฤ LBLBSJͷ"1*։ൃ
ɾBEEJUJPOBM1SPQFSUJFT εΩʔϚʹఆٛ͞Ε͍ͯͳ͍QSPQFSUZ ͕Ϩεϙϯεʹؚ·Ε͍ͯͳ͍͔Ͳ͏ ͔νΣοΫͰ͖Δ υΩϡϝϯτͱ࣮ͷဃΛ͙ Ϩεϙϯεฤ LBLBSJͷ"1*։ൃ
8FC"1*։ൃͷେ υΩϡϝϯτͱ࣮͕ဃ ฒྻͰ։ൃΛਐΊΒΕͣɺ։ൃޮ্͕͕Βͳ͍ LBLBSJͷ"1*։ൃ
ΫϥΠΞϯταΠυ αʔόʔαΠυ "1*ఆٛΛ ҰॹʹܾΊΔ ϞοΫͷఏڙ ࣮ ࣮ ݁߹ςετ ϦϦʔε ૣ͍λΠϛϯάͰ
૬ޓ'# ฒྻͰ։ൃΛਐΊͯޮΛ্͛Δ LBLBSJͷ"1*։ൃ ͜ͷ෦ΛͲ͏ͬͯਐΊΔ͔
ฒྻͰ։ൃΛਐΊͯޮΛ্͛Δ LBLBSJͷ"1*։ൃ ࡞ઓϞοΫΛૉૣ͘ఏڙ͢Δ 4XBHHFS6*ͷFYBNQMFΛར༻͢Δ ࡞ઓ"1*ఆٛͷڞ༗Λ؆୯ʹ TXBHHFSWJFXFSͱ͍͏$ISPNF֦ுΛར༻͢Δ
ϞοΫΛૉૣ͘ఏڙ͢Δ LBLBSJͷ"1*։ൃ ࣗಈੜ͞ΕΔFYBNQMFΛجʹ߈ͰϞοΫͷ࣮͕Ͱ͖Δ ίϐϖ͚ͨͩ͠ͰϞοΫͷ࣮͕ྃ 4XBHHFS6*Ͱࣗಈੜ͞Εͨ FYBNQMF
LBLBSJͷ"1*։ൃ ɾΛ͔͚ͣʹϞοΫΛఏڙ˞ ɾૣ͍λΠϛϯάͰΫϥΠΞϯταΠυ͔Βͷ'#͕ಘΒΕΔͷͰ मਖ਼ίετ͕͍ ˞0QFO"1*(FOFSBUPSΛ༻͍ͯϞοΫαʔόʔΛఏڙ͢Δํ๏͋ΔͷͰ͕͢ɺϞοΫ༻ͷίϯςφ্ཱͪ͛ ΔΑ͏ʹͨ͠ΓΫϥΠΞϯταΠυͷ͚ઌΛม͑ͨΓͱ໘ͦ͏͔ͳͱࢥ͍ͬͯ·͢ɻݟٻΉʂ ϞοΫΛૉૣ͘ఏڙ͢Δ
ΫϥΠΞϯταΠυ αʔόʔαΠυ "1*ఆٛΛ ҰॹʹܾΊΔ ϞοΫͷఏڙ ࣮ ࣮ ݁߹ςετ ϦϦʔε εΩʔϚͷڞ༗ɾ֬ೝָ͕ʹͰ͖Δ
LBLBSJͷ"1*։ൃ "1*ఆٛͷڞ༗
LBLBSJͷ"1*։ൃ 4XBHHFS6*ศར 公式のライブデモ: https://petstore.swagger.io/?_ga=2.240324099.1201964793.1566722432-82597943.1560763776#/ ͨͩɺTXBHHFSVJͷίϯςφΛ্ཱͪ͛Δඞཁ͕͋Δ "1*ఆٛͷڞ༗
LBLBSJͷ"1*։ൃ "1*ఆٛͷڞ༗ HJUIVC্ͷεΩʔϚΛ4XBHHFS6*ͷܗࣜͰ֬ೝͰ͖Δ✌
LBLBSJͷ"1*։ൃ σϞ ެࣜͷεΩʔϚFYBNQMFIUUQTHJUIVCDPN0"*0QFO"1* 4QFDJGJDBUJPOCMPCNBTUFSFYBNQMFTWQFUTUPSFZBNM
LBLBSJͷ8FC"1*։ൃ LBLBSJͷ"1*։ൃ 8FCϑϩϯτ 41"ը໘ "1* 0QFO"1*ܥಋೖࡁΈ 4XBHHFS6*&EJUPSར༻ ࣗಈςετͰϨεϙϯεͷόϦσʔγ ϣϯ࣮ࢪ 0QFO"1*(FOFSBUPSͰΫϥΠΞϯτ
ϥΠϒϥϦࣗಈੜ ϞόΠϧΞϓϦ"1* 0QFO"1*ܥಋೖࡁΈ 4XBHHFS6*&EJUPSར༻ ࣗಈςετͰϨεϙϯεͷόϦσʔγ ϣϯ࣮ࢪ
·ͱΊ
ɾυΩϡϝϯτΛϝϯς͢ΔͷͭΒ͍ͱ͍͏ؾ͔࣋ͪΒͷղ์ ɾυΩϡϝϯτ͕ஔ͍͚ͯ΅ΓʹͳΔڪා͔Βͷղ์ ɾϑϩϯτΤϯδχΞͨͤΔͷͼͳ͍ͱ͍͏ؾ͔࣋ͪΒͷղ์ ·ͱΊ εΩʔϚۦಈͨͪΛղ์ͯ͘͠ΕΔ
ɾपลπʔϧ͕ͱͯॆ࣮͍ͯ͠Δ ɾࣗͨͪͷ։ൃϑϩʔʹ͍͔ʹΈࠐΉͷ͔ͷ͠Ͳ͜Ζ ɾͰ͖Δͱ͜Ζ͔Βগͣͭ͠ಋೖ͢Δ͜ͱ͕Ͱ͖Δ ·ͱΊ 0QFO"1*ڧ͍
None