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
13k
新規サービスのWebAPI開発でスキーマ駆動開発を目指してみた話
スキーマ駆動開発の取り組み事例を紹介します。
@shibadog39
shibadog1121
August 28, 2019
Tweet
Share
More Decks by shibadog1121
See All by shibadog1121
新規事業におけるWebAPI開発をよしなにリードする方法
shibadog1121
9
3.3k
Other Decks in Programming
See All in Programming
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
110
社内オペレーション改善のためのTypeScript / TSKaigi Hokuriku 2025
dachi023
1
130
「文字列→日付」の落とし穴 〜Ruby Date.parseの意外な挙動〜
sg4k0
0
280
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 1
philipschwarz
PRO
0
100
2025 컴포즈 마법사
jisungbin
0
150
モダンJSフレームワークのビルドプロセス 〜なぜReactは503行、Svelteは12行なのか〜
fuuki12
0
110
Flutterアプリ運用の現場で役立った監視Tips 5選
ostk0069
1
520
Agentに至る道 〜なぜLLMは自動でコードを書けるようになったのか〜
mackee
5
2k
OSS開発者の憂鬱
yusukebe
12
7.3k
AIを駆使して新しい技術を効率的に理解する方法
nogu66
1
660
Flutterチームから作る組織の越境文化
findy_eventslides
0
580
connect-python: convenient protobuf RPC for Python
anuraaga
0
240
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Why Our Code Smells
bkeepers
PRO
340
57k
A Tale of Four Properties
chriscoyier
162
23k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Six Lessons from altMBA
skipperchong
29
4.1k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Code Review Best Practice
trishagee
72
19k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.1k
RailsConf 2023
tenderlove
30
1.3k
Site-Speed That Sticks
csswizardry
13
970
Git: the NoSQL Database
bkeepers
PRO
432
66k
Thoughts on Productivity
jonyablonski
73
4.9k
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