Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
SchemaDrivenDevelopment
Search
atomiyama
March 24, 2021
Technology
470
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SchemaDrivenDevelopment
atomiyama
March 24, 2021
More Decks by atomiyama
See All by atomiyama
Rustでgemを作ろう
atomiyama
0
1.6k
ffi & native extension
atomiyama
0
280
技術選定で失敗したはなし
atomiyama
0
1.4k
はじめてのDocker
atomiyama
0
120
Other Decks in Technology
See All in Technology
幾何アルゴリズムで なめらかなピン操作を / iOSDC Japan 2026 / smoothpin
kazumanagano
0
220
KPIだけでは評価できないプロダクトが考えるべき Evalsという第二の評価系 / Beyond KPIs: Evals as a Second Evaluation Framework for Products #PdEConf
aki_iinuma
4
3.8k
2026/09/10 Spring_Bootから_Jakarta_EE_MicroProfileへの移行
megascus
0
250
Azure Cost Management の FOCUS コストデータを迷わず読むための“3つの軸”
tetsuyaooooo
0
160
少人数データチームのDevin活用実践事例
runandy16
3
460
Bet AI Day 2026丨Agentは、「金融」という巨大産業の何を変えられるのか
layerx
PRO
0
1.2k
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
250
Adaptive Warehouse を今すぐ導入すべき理由と迷ったときの判断基準
__allllllllez__
0
130
AI時代に、プロダクトの数だけ積み上がる所有コストをどうエンジニアリングするか / Engineering the Cost of Ownership
kzkmaeda
1
1.1k
enechainの内製セルフサービスプラットフォーム
hiyosi
0
140
AIオーケストレーションを活用した 開発ワークフローの設計と実践
bqnq
0
110
Bet AI Day 2026丨Production-Ready AI Agents — エンタープライズの実務を任せるための設計と運用
layerx
PRO
4
2.6k
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Color Theory Basics | Prateek | Gurzu
gurzu
0
460
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
202
76k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
430
Producing Creativity
orderedlist
PRO
348
41k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.7k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Transcript
Copyright 2018 Studyplus, Inc. All Rights Reserved. OpenAPIΛ༻͍ͨεΩʔϚۦಈ։ൃ Akifumi Tomiyama
/ Studyplus Inc . 2021.03.24 @γϡʔϚΠʂ
ࣗݾհ ✎ 2018/09~ Studyplusೖࣾ ✎ 29ࡀ ✎ ؠखݝࡏॅ ✎ ͖ͳݴޠɿRuby,
Rust ࢁথ࢙ Akifumi Tomiyama atomiyama atomiyama1216 Studyplus Inc. ForSchool Dept. CX Product Group Team Lead.
ձࣾհ About Us
MISSION ʮֶͿتͼΛͯ͢ͷਓʯ ଟ͘ͷਓ͕StudyplusΛ௨ֶͯ͡शͷ͖͔͚ͬΛݟ͚ͭɺ ֶशΛָ͘͠ܧଓͰ͖Δ͜ͱΛ࣮ݱ͢Δɻ
ֶशهͷՄࢹԽͱɺಉ͡ඪΛࢦؒ͢ͱͷSNSͰϞνϕʔγϣϯΛܧଓͰ͖·͢ɻ ΞϓϦϨϏϡʔฏۉ4.5Ҏ্ɻGoogle Play2࿈ଓϕετΞϓϦɺຊe-Learningେʢ࠷༏लʣͳͲडଟɻ ʮຖͷษڧΛश׳ʹͰ͖ͳ͍ʯΈΛղܾ
ࢀߟॻಡΈ์ΞϓϦͷϙϧτɺ डݧੜʹਓؾͷࢀߟॻΛֹ݄980ԁʢ੫ผʣͰεϚϗͰಡΈ์ͷɺిࢠࢀߟॻͷαϒεΫϦϓγϣϯαʔϏεͰ͢ɻ ਓؾࢀߟॻΛεϚϗͰಡΈ์ͷɺిࢠࢀߟॻΞϓϦ
Studyplus for Schoolɺڭҭػֶ͚ؔशཧαʔϏεͰ͢ɻ ੜెͷʑͷྗΛɺؾ͖ͮɺ๙ΊΔػೳΛଟἧ͍͑ͯ·͢ɻ SNSͷΑ͏ͳૢ࡞ײͰɺ ୭Ͱ͙͢ʹ͍͡ΊΒΕ·͢ɻ ઌੜ͕ੜెΛ๙ΊΔػձΛ࠷େԽ͢Δɺֶशक़ͷ৽͍͠ελϯμʔυ
OpenAPIΛ༻͍ͨεΩʔϚۦಈ։ൃ Schema Driven Development
͢͜ͱ • OpenAPI 3.0ͱcommitteeΛͬͨ։ൃͷ • εΩʔϚۦಈ։ൃͷྲྀΕ • εΩʔϚϑΝΠϧཧ • ࠓ๊͍͑ͯΔ՝
Studyplus for SchoolͷγεςϜ • APIαʔόʔ • Rails • ΫϥΠΞϯτ •
React • Elm • Next.js
Studyplus for Schoolͷ։ൃମ੍ • εΫϥϜ։ൃ • 9໊ମ੍ • 2week /
sprint • ։ൃϝϯόʔ • 6໊
Studyplus for Schoolͷ։ൃϑϩʔ ͜͜ΛظؒͰਐΊΔ
چ࣮ϑϩʔ ͜͜ͷͪ࣌ؒΛ࠷খԽ͢Δ ͜͜ͷखΓΛݮΒ͢
ݱߦͷ࣮ϑϩʔ API։ൃஈ֊ͰFBΛ ड͚Δ͜ͱ͕Ͱ͖ɼ खΓ͕গͳ͘ࡁΉ APIͷຊ࣮Λ ͨͣϑϩϯτ։ൃΛ ։࢝Ͱ͖Δ
͍ͬͯΔπʔϧ OpenAPI 3.0 REST APIΛఆٛ͢ΔͨΊඪ४༷ Swagger UI APIεΩʔϚͷ֬ೝ
Gems • committee ϦΫΤετɼϨεϙϯεόϦσʔγϣϯɼςετΞαʔγϣϯ • json_refs ෳϑΝΠϧཧ࣌ͷrefͷղܾ
Copyright (C) 2017 Studyplus, Inc. All Rights Reserved. Confidential APIઃܭ
APIεΩʔϚఆٛ • OpenAPIͷ༷ʹԊͬͯهड़ • yaml • ίϯτϩʔϥͷΞΫγϣϯʹ ରͯ͠1ϑΝΠϧͣͭʹׂ • ύϥϝʔλΤϥʔϨεϙϯ
εͳͲ࠶ར༻ՄೳͳΑ͏ʹ ڞ௨Խ
APIεΩʔϚఆٛϑΝΠϧཧ • main.yaml ΞϓϦέʔγϣϯͷఆٛʢೝূͳͲ • paths.yamlɼpath/* ΤϯυϙΠϯτͷఆٛ •
schemas.yaml, schemas/* ϦιʔεͷఆٛʢϞσϧͱରԠ • parameters.yaml, parameters/* ڞ௨ύϥϝʔλͷఆٛ • responses.yaml, responses/* ڞ௨Ϩεϙϯεͷఆٛ > tree -L 3 swagger/api/v1 ├── components │ ├── schemas.yaml │ ├── parameters.yaml │ ├── responses.yaml │ ├── parameters │ │ ├── section_id.yaml │ │ └── student_id.yaml │ ├── schemas │ │ ├── section.yaml │ │ └── student.yaml ├── paths │ └── sections │ └── index.yaml ├── paths.yaml └── main.yaml
APIεΩʔϚఆٛϑΝΠϧཧ
APIεΩʔϚఆٛϑΝΠϧཧ • main.yaml ΞϓϦέʔγϣϯͷఆٛʢೝূͳͲ • paths.yamlɼpath/* ΤϯυϙΠϯτͷఆٛ •
schemas.yaml, schemas/* ϦιʔεͷఆٛʢϞσϧͱରԠ • parameters.yaml, parameters/* ڞ௨ύϥϝʔλͷఆٛ • responses.yaml, responses/* ڞ௨Ϩεϙϯεͷఆٛ > tree -L 3 swagger/api/v1 ├── components │ ├── schemas.yaml │ ├── parameters.yaml │ ├── responses.yaml │ ├── parameters │ │ ├── section_id.yaml │ │ └── student_id.yaml │ ├── schemas │ │ ├── section.yaml │ │ └── student.yaml ├── paths │ └── sections │ └── index.yaml ├── paths.yaml └── main.yaml
APIεΩʔϚఆٛϑΝΠϧཧ • JSONͰεΩʔϚΛฦ͢APIΛ࣮ • swagger-uiͰ͜ΕΛӾཡ͢Δ
Copyright (C) 2017 Studyplus, Inc. All Rights Reserved. Confidential ϞοΫAPIͷ࡞
ϞοΫAPIͷ࡞ • ͱΓ͋͑ͣಈ͘࠷খݶͷ࣮ 1.routeΛՃ 2.࠷ݶͷςετΛՃ 3.swagger-uiͷϨεϙϯεΛ ίϯτϩʔϥʹϕλషΓ͢Δ 4.ίʔυϨϏϡʔ
εΩʔϚʹաෆແ͍͔֬ೝʂ 5.mergeͯ͠σϓϩΠ
εΩʔϚόϦσʔγϣϯ • ࣮ͱεΩʔϚͷဃࢭ - request specͰอূ - ͯ͢ͷϨεϙϯε͕ఆٛͱဃ͠ ͍ͯͳ͍͔assert_schema_conform Ͱ֬ೝ
- ෳͷAPIʢ෦ެ։ɼ֎෦ެ։ʣ ͕͋ΔͷͰRSpecͷmetadataʹ OpenAPIఆٛϑΝΠϧύεΛࢦఆͰ ͖ΔΑ͏ʹ͍ͯ͠Δ
͜ͷ࣮ϑϩʔͰྑ͔ͬͨ͜ͱ • ϑϩϯτΤϯυ࡞ۀऀͷͪ࣌ؒΛݮͰ͖ͨ • ϞοΫAPIͷ࡞࡞ۀ1~2࣌ؒͰ݁Ͱ͖Δ • API࣮ͷखΓΛ࠷খԽͰ͖Δ • ຊ൪ڥద༻ޙʹमਖ਼͕ඞཁʹͳΔ͜ͱ͕ݮΒͤΔ •
։ൃॳظஈ֊͔Βαʔόʔͱϑϩϯτͷ࡞ۀऀͷೝࣝͷဃ͕ݮͬͨ • ϑϩϯτ࡞ۀऀͱαʔόʔ࡞ۀऀͰεΩʔϚϕʔεͰରͰ͖Δ
ݱঢ়ͷ՝ • enumͳͲͷʹରͯͯ͢͠ͷύλʔϯΛཏͨ͠ϞοΫAPIΛఏڙ͠ Α͏ͱ͢Δͱ໘ →ݱঢ়ϑϩϯτଆʹՃͰϕλॻ͖ͨ͠Γͯ͠ରԠ͍ͯ͠Δ • εΩʔϚࣗମͷόϦσʔγϣϯΛ͍ͯ͠ͳ͍ͷͰtypoͱ͔Λݟಀ͢ͱख Γ͕ൃੜ͢Δ
→validatorͷdocker image͕͋ΔͷͰCIͰνΣοΫ͢ΔΑ͏ʹ͍ͨ͠
࠷ޙʹએ We are hiring!!!
We’re Hiring! ΤϯδχΞืूத https://info.studyplus.co.jp/recruit
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠