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
Type Spec と Go(gin) で作るTypeSafeな web api/Craete...
Search
Ryusei Ohkura
November 08, 2025
460
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Type Spec と Go(gin) で作るTypeSafeな web api/Craete type safe web api with typespec and go
ゆる勉強会 in 新宿御苑 #2
で発表させていただいた資料です!
https://engineers-anime.connpass.com/event/374534/
Ryusei Ohkura
November 08, 2025
More Decks by Ryusei Ohkura
See All by Ryusei Ohkura
予算10000円から始める自宅サーバー / start diy server with in 10000 yen
3l4l5
3
700
コードギアスから学ぶ戦略と戦術/engineer-anime-2026-04-11
3l4l5
0
90
登壇を続けていたら地域コミュニティを作るようになった話/outputconf2026
3l4l5
2
1.3k
本当にpythonは堅牢さに欠けるのか
3l4l5
1
250
習慣化するための技術 / Techniques for Habit Formation
3l4l5
3
510
SQLAlchemy の select(User).where(User.id =="123") を理解してみる/sqlalchemy deep dive
3l4l5
3
1.1k
NEW GAMEが良いということを伝えたいLT / New Game is iizo.
3l4l5
0
97
「アニメから学ぶ」から学ぶ具体と抽象/ I wanna learn abstraction from "learning from anime"
3l4l5
4
1.1k
アニメからリーダーシップを学びたい / i wanna learn leader ship from animation
3l4l5
1
130
Featured
See All Featured
From π to Pie charts
rasagy
0
220
Fireside Chat
paigeccino
42
4k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
210
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Color Theory Basics | Prateek | Gurzu
gurzu
0
370
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Speed Design
sergeychernyshev
33
1.9k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
620
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
150
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
210
Transcript
Type Spec と Go(gin) で作るTypeSafeな web api ヲクラ @3l4I5
自己紹介 3l4i5 3l4l5 - クロスマート株式会社 - 請求書チーム - テックリード -
バックエンドエンジニア - すき - 🎷響けユーフォニアム - 🤖SSSS.GRIDMAN - 🎸ぼっち・ざ・ろっく - 🐧宇宙よりも遠い場所 往蔵隆成(ヲクラ)
Web APIを作る時に考えること • リクエストのバリデーションを楽に書きたい • swagger.yaml書きたくないけど、swagger.yamlはほしい(わがまま) • バックエンドのcontroller層でも型safeに開発したい • (Go書けるようになりたいのでGoで書きたい)
リクエストのバリデーション楽に書きたい やだ!!!!!
Web APIを作る時に考えること • リクエストのバリデーションを楽に書きたい • swagger.yaml書きたくないけど、swagger.yamlはほしい(わがまま) • バックエンドのcontroller層でも型safeに開発したい • (Go書けるようになりたいのでGoで書きたい)
FastAPI(Python) Nest.js(TypeScript/JavaScript) Micronaut(Kotlin) で、コードで型定義 → OpenAPI 仕様書生成可能
コードで型+バリデーション定義 OpenAPI 仕様書
バックエンド バリデーション+型のコード生成 OpenAPI 仕様書 何か
バックエンド バリデーション+型のコード生成 OpenAPI 仕様書 TypeSpec
バックエンド バリデーション+型のコード生成 OpenAPI Specification TypeSpec Swagger書かなくて良い! + バリデーション書かなくて良い! + Gin対応!
TypeSpecとは? • TypeScriptのような書き方で APIのinterfaceを定義できる • TypeSpecで定義された記述を OpenAPI 仕様書に変換できる
TypeSpecとは? “/stores”に対して • query paramでリクエストした場合は Storeのリストを返す • path paramでリクエストした場合は Store単体を返す
TypeSpecとは? “/stores”に対して • query paramでリクエストした場合は Storeのリストを返す • path paramでリクエストした場合は Store単体を返す
入れ子のオブジェクトも 簡単に表現
TypeSpecの記述 Oapi.ymlの記述 変換!
TypeSpecの記述 Oapi.ymlの記述 変換! 圧倒的に楽!🎉
バックエンド バリデーション+型のコード生成 OpenAPI 仕様書 TypeSpec 今の話
OpenAPI 仕様書 TypeSpec 今度こっち バックエンド バリデーション+型のコード生成
• OpenAPI 仕様書からGoのコードを生成 できる • ginをはじめとした、様々な GoのWeb APIのcontroller層のコード を生成 OpenAPI
Specificationからのコード生成
詳しくは割愛(ドキュメントを参照ください) • OpenAPI仕様書で定義した型を元に バリデーションコード レスポンスの型 を生成 • レスポンスには勝手にstatus codeをつけてくれる •
errを返せば勝手に500 errorとして解釈してくれる → 至れり尽くせり! oapi-codegen
バックエンド バリデーション+型のコード生成 OpenAPI 仕様書 TypeSpec TypeSpec Cli oapi-codegen
バックエンド バリデーション+型のコード生成 OpenAPI 仕様書 TypeSpec TypeSpec Cli oapi-codegen フロントエンド クライアント・型生成 orval
/ openapi-typescript
バックエンド バリデーション+型のコード生成 OpenAPI 仕様書 TypeSpec TypeSpec Cli oapi-codegen フロントエンド クライアント・型生成 orval
/ openapi-typescript 一気通貫の Type safe な web 開発!💪
宣伝! LT会やるよ〜 来てね〜