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
Type Spec と Go(gin) で作るTypeSafeな web api/Craete...
Search
Ryusei Ohkura
November 08, 2025
590
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
Transcript
22 slides
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会やるよ〜 来てね〜
More Decks by Ryusei Ohkura
See All by Ryusei Ohkura
JavaScriptなしでブログを作る / Buildding blog system without JavaScript
3l4l5
0
150
ガールズ&パンツァーで学ぶ紅茶 / Learn About Tea with Girls und Panzer
3l4l5
0
150
響け!ユーフォニアムと考える「決め方」/Thinking About Decision-Making with Sound! Euphonium
3l4l5
1
230
同人誌を作ろう(物理)/ let's make self made books
3l4l5
1
540
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
320
予算10000円から始める自宅サーバー / start diy server with in 10000 yen
3l4l5
3
1.2k
コードギアスから学ぶ戦略と戦術/engineer-anime-2026-04-11
3l4l5
0
170
登壇を続けていたら地域コミュニティを作るようになった話/outputconf2026
3l4l5
2
2.1k
本当にpythonは堅牢さに欠けるのか
3l4l5
1
340
Featured
See All Featured
Scaling GitHub
holman
464
140k
The Cost Of JavaScript in 2023
addyosmani
56
10k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Testing 201, or: Great Expectations
jmmastey
46
8.4k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.2k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
900
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Mind Mapping
helmedeiros
1
440
Making Projects Easy
brettharned
120
6.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k