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
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
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
Claude Designがめちゃくちゃ便利なので使ってほしい
diggymo
0
170
営業オントロジーの作り方と、エージェントからの辿り方 ── ナレッジワークの現場から
kworkdev
PRO
1
220
[2026-09-30]ロックンロールは鳴り止まないっ - 信頼性かまってちゃん - 「データ駆動を投げ捨ててまで。」追いかける信頼性改善に向けた取り組みの話
tosite
0
130
AgentCoreで実践するハーネスエンジニアリング
yakumo
0
120
猫でもわかるKiro Web
kentapapa
1
160
検証フェーズはAIの回答を判断するための学習機会
toru_kubota
2
170
【データ横丁主催】AI Agentがコンテキストを使って仕事をした後、何が残るのか― 組織の経験を次の判断に引き継ぐ「Agent Memory」
shisyu_gaku
2
300
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
130
人にやさしく、AIにやさしく、書き手を選ばないIaCのガードレール再考 / Rethinking IaC Guardrails for Humans and AI Alike
kohbis
5
1.9k
VS Code × GitHub Copilot での Fabric 開発
ryomaru0825
1
210
3人で1000GPU超を統合運用する?マルチクラウド&オンプレを跨ぐ、構築と運用のリアル!
kazukun0716
2
800
Snowflake Horizon Catalog と Apache Iceberg で作る オープンなデータ基盤
kitagawaz
0
360
Featured
See All Featured
Code Review Best Practice
trishagee
74
20k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Believing is Seeing
oripsolob
1
230
Mind Mapping
helmedeiros
1
390
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
750
WENDY [Excerpt]
tessaabrams
14
40k
Balancing Empowerment & Direction
lara
6
1.3k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
490
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
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠