$30 off During Our Annual Pro Sale. View Details »
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.4k
Other Decks in Programming
See All in Programming
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
240
ViewファーストなRailsアプリ開発のたのしさ
sugiwe
0
500
複数人でのCLI/Infrastructure as Codeの暮らしを良くする
shmokmt
5
2.3k
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
160
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
8
1.5k
大規模Cloud Native環境におけるFalcoの運用
owlinux1000
0
130
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
MAP, Jigsaw, Code Golf 振り返り会 by 関東Kaggler会|Jigsaw 15th Solution
hasibirok0
0
250
ELYZA_Findy AI Engineering Summit登壇資料_AIコーディング時代に「ちゃんと」やること_toB LLMプロダクト開発舞台裏_20251216
elyza
2
300
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
3
1.2k
Deno Tunnel を使ってみた話
kamekyame
0
150
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
160
Featured
See All Featured
Leadership Guide Workshop - DevTernity 2021
reverentgeek
0
160
Believing is Seeing
oripsolob
0
9
Navigating Team Friction
lara
191
16k
Exploring anti-patterns in Rails
aemeredith
2
200
Facilitating Awesome Meetings
lara
57
6.7k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
0
240
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
33
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
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