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
Laravel や Symfony で手っ取り早く OpenAPI のドキュメントを作成する
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
SAW
November 14, 2024
Programming
460
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Laravel や Symfony で手っ取り早く OpenAPI のドキュメントを作成する
第40回関西PHP勉強会 の発表資料です。
SAW
November 14, 2024
More Decks by SAW
See All by SAW
Makefile 入門
azuki
0
110
Effortless API Documentation with Scribe
azuki
0
110
Laravelで手軽にAPIドキュメントを生成する ― Scribe活用術
azuki
0
74
🪝 便利な Property Hooks を 使ってみよう 🪝
azuki
0
110
決済システム超初心者が Stripe に入門している話
azuki
0
170
React Hook Form と Zod によるフォームバリデーション
azuki
0
89
PHP で form-data を POST 以外のメソッドで受け取るには?
azuki
0
97
PHP で学ぶ OAuth 入門
azuki
2
1.5k
EditorConfig を使ってみよう
azuki
1
130
Other Decks in Programming
See All in Programming
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
120
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
440
iOSDC2026登壇資料.pdf
riofujimon
0
210
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
390
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
270
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
460
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
470
FreeBSDでZabbixを動かす
kenkino
0
350
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
300
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1.3k
Simple Storage Service(S3) is not simple
iwatsukayura
0
190
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
340
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.1k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
570
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
520
Discover your Explorer Soul
emna__ayadi
2
1.3k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
620
Google's AI Overviews - The New Search
badams
0
1.6k
Transcript
-BSBWFM4ZNGPOZͰखͬऔΓૣ͘ 0QFO"1*ͷυΩϡϝϯτΛ࡞͢Δ ୈճؔ1)1ษڧձ 4"8
$(whoami) ࢯ໊Ճ౻फҰ ࡀ ϋϯυϧωʔϜ4"8 9 چ5XJUUFS !B[VLJ@FBUFS ؔͷ*5ΤϯδχΞίϛϡχςΟͷ͔͠୲ ࣗশ
େࡕࡏॅɾѪग़ ಘҙ8FCΞϓϦέʔγϣϯ։ൃ -BSBWFM 7VF ྉཧͷՃ࣌ؒΛॖ͢ΔͨΊʹ ڧՐͰௐཧͨ͜͠ͱ͕͋Δͷ ͚ࣗͩͰͳ͍ͣ ࠓͷ໎ݴ
͋ͳͨͷϓϩδΣΫτͰ "1*υΩϡϝϯτ ଘࡏ͍ͯ͠·͔͢
ͦͷ"1*υΩϡϝϯτ ӕΛ͍͍ͭͯͨΓ͠·ͤΜ͔
"1*༷ॻͱ࣮͕ဃ͢Δཧ༝ ʮղऍͷ༨ͷ͋Δ༷ॻʯ ྫ࣌ࠁͷදݱܗ͕ࣜᐆດ ాݑଠ !,FOUBSPV5BLFEB ͞Μ ʮ-BSBWFM0QFO"1*ʹΑΔਏ͘ͳ͍εΩʔϚۦಈ։ൃʯ QΑΓҾ༻ ʮ༷ॻͷԽʹա͗ͳ͍࣮ʯ ਓ͕ؒख࡞ۀͰ࣮͢Δͱϛε͕ൃੜ͠͏Δ
ాݑଠ !,FOUBSPV5BLFEB ͞Μ ʮ-BSBWFM0QFO"1*ʹΑΔਏ͘ͳ͍εΩʔϚۦಈ։ൃʯ QQΑΓҾ༻
0QFO"1*ͱ 3&45"1*ͷ༷ॻΛදݱ͢ΔͨΊͷඪ४Խن֨ "1*ͷΠϯλϑΣʔεΛఆٛ ਓ͚ؒͩͰͳ͘ίϯϐϡʔλ༷ΛཧղՄೳ ᐆດͳදݱΛഉআͯ͠ղऍͷ༨Λͳ͘͢ "1*༷ॻ:".- +40/ܗࣜͰදه 0QFO"1*ʹରԠͨ͠πʔϧ͕"1*༷Λղऍͯ͠ར༻Մೳ ίϯϐϡʔλ͕ղऍͰ͖ΔΑ͏ʹϑΥʔϚοτ͕ఆΊΒΕ͍ͯΔ 0QFO"1*"1*༷ॻͷͨΊͷهड़ݴޠͱߟ͑ΒΕΔ
0QFO"1*ͷ༷ॻͷྫ :".-ܗࣜ openapi: 3.0.0 info: title: Sample description: 'Sample
API' version: 1.0.0 paths: '/api/hoge/{id}': get: parameters: - name: id in: path description: 'ID of hoge' required: true schema: type: string responses: 200: description: 'hoge response body' content: application/json: schema: properties: id: type: integer message: type: string type: object
0QFO"1*͕͋Ε ༷ॻͷ՝ղফͰ͖Δ͔
0QFO"1*୯ମͰ࣮ͱͷဃղܾ͠ͳ͍ ࣮͕มߋ͞ΕͨΒ0QFO"1*ͷϑΝΠϧมߋ͕ඞཁ υΩϡϝϯτͷมߋ࿙ΕޡͬͨมߋʹΑ࣮ͬͯͱͷဃ͕ੜ͡ΔՄೳੑ͕͋Δ ن͕େ͖͍:".-+40/ਓ͕ؒಡΈॻ͖͢Δʹਏ͍ ༷ͷԽͰ͋Δ͜ͱʹมΘΓͳ͍ ࣮0QFO"1*ͷ༰Λॻ͖ͨ͠ͷʹա͗ͳ͍ 0QFO"1*ΛղऍՄೳͳςετπʔϧͰ༷ͱ࣮ͷဃͷݕग़Մೳ
࣮͔Β0QFO"1*υΩϡϝϯτΛੜ͢Δ "1*ͷ࣮͔Β0QFO"1*υΩϡϝϯτΛࣗಈੜ ϝϦοτʮ༷ͱ࣮ͱΛҰக͍ͤ͢͞ʯ ాݑଠ !,FOUBSPV5BLFEB ͞Μ ʮ-BSBWFM0QFO"1*ʹΑΔਏ͘ͳ͍εΩʔϚۦಈ։ൃʯQΑΓҾ༻ 1)1ͷ0QFO"1*υΩϡϝϯτΛੜ͢ΔϥΠϒϥϦ 4ZNGPOZ/FMNJP0QFO"QJ#VOEMF -BSBWFM-4XBHHFS
/FMNJP0QFO"QJ#VOEMF 1)1ͷΞτϦϏϡʔτΛར༻ͯ͠هड़ 4ZNGPOZͷ#[Route()]͔Β"1*ͷ63-Λදݱ #[OpenApi\Attributes\Response()]ͰϨεϙϯεͷใΛදݱ 4XBHHFS6*ͷϖʔδΛࣗಈతʹੜ 4XBHHFS6*ͷϖʔδΛੜ͢ΔͨΊͷίϚϯυͷ࣮ߦ͕ෆཁ 4XBHHFS6*ͷϖʔδʹΞΫηε͢Δ͚ͩͰྑ͍ 4XBHHFS6*Λར༻͢ΔͨΊʹผ్ґଘύοέʔδͷΠϯετʔϧ͕ඞཁ
/FMNJP0QFO"QJ#VOEMFͷΠϯετʔϧͱ࣮ྫ # NelmioOpenApiBundle のインストール composer require nelmio/api-doc-bundle # Swagger
UI に必要な依存パッケージのインストール composer require symfony/twig symfony/asset /FMNJP0QFO"QJ#VOEMFͷΠϯετʔϧखॱ use OpenApi\Attributes as OA; class SampleController extends AbstractController { #[Route('/hoge/{id}', methods: ['GET'])] #[OA\Response( response: 200, description: 'Get specified hoge data', content: new OA\JsonContent( ref: new Model(type: Hoge::class), ) )] public function get(int $id): JsonRespnose { // 略 } } ࣮ྫ app.swagger_ui: path: /api/doc method: GET defaults: { _controller: nelmio_api_doc.controller.swagger_ui } 4XBHHFS6*Λ༗ޮԽ͢Δઃఆͷྫ config/routes/nelmio_api_doc.yaml
/FMNJP0QFO"QJ#VOEMFͰͷ4XBHHFS6*ͷදࣔྫ
-4XBHHFS 1)1ͷΞτϦϏϡʔτΛར༻ͯ͠هड़ #[OpenApi\Attributes\Get()]#[OpenApi\Post()]ͳͲͰ63-Ϩεϙϯεͷ ใΛදݱ 4XBHHFS6*Λར༻͢ΔͨΊʹՃͷύοέʔδͷΠϯετʔϧ͕ෆཁ ެࣜυΩϡϝϯτͷใ͕ෆ (JU)VCͷ8JLJ͕-4XBHHFSͷυΩϡϝϯτ ࣮ྫ1)1%PDͷΞϊςʔγϣϯͷΈ ΑΓৄࡉͳϦϑΝϨϯε͕ඞཁͳ߹4XBHHFS1)1ͷυΩϡϝϯτΛࢀর
-4XBHHFSͷΠϯετʔϧͱ࣮ྫ # L5 Swagger のインストール composer require darkaonline/l5-swagger -4XBHHFSͷΠϯετʔϧखॱ
use OpenApi\Attributes as OA; class SampleController extends Controller { #[OA\Get( path: '/api/hoge/{id}', summary: 'Get specified hoge data', responses: [ new OA\Response( response: Response::HTTP_OK, description: 'hoge response body', ), ) )] public function get(int $id): JsonRespnose { // 略 } ࣮ྫ # ServiceProvider の登録 php artisan vendor:publish --provider \ "L5Swagger\L5SwaggerServiceProvider" # Swagger UI の 生 成 php artisan l5-swagger:generate -4XBHHFSͷઃఆͱυΩϡϝϯτੜ
-4XBHHFSͰͷ4XBHHFS6*ͷදࣔྫ
૯ׅ 0QFO"1*ʹ͍ͭͯઆ໌ ίʔυ͔Β0QFO"1*υΩϡϝϯτΛࣗಈੜ͢Δํ๏Λհ 4ZNGPOZ/FMNJP"QJ%PD#VOEMFS -BSBWFM-4XBHHFS
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠