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
うわっ...私のSwagger、古すぎ...?grpc-gateway向けのSwaggerと向き合う
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
did0es
November 29, 2025
Technology
230
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
うわっ...私のSwagger、古すぎ...?grpc-gateway向けのSwaggerと向き合う
フロントエンドカンファレンス関西2025 学生支援スポンサーイベントで行ったLTの資料です。
did0es
November 29, 2025
More Decks by did0es
See All by did0es
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
430
【前編】このAPIいつ使うん?あの機能なに?V8のドキュメント、全部読んでみた
shuta13
0
170
TypeScript Compiler APIとPHP-Parserを活用し、TypeScriptとPHPで型を共有する
shuta13
1
1k
ブラウザの投機的読み込みと投機ルールAPIを理解し、Webサービスのパフォーマンスを最適化する
shuta13
3
400
ViteとTypeScriptのProject Referencesで 大規模モノレポのUIカタログのリリースサイクルを高速化する
shuta13
3
410
歴代のWeb Speed Hackathonの出題から考えるデグレしないパフォーマンス改善
shuta13
8
950
Reconciliationの世界
shuta13
0
34
なぜクラウドサービスで Web コンソールを提供するのか
shuta13
4
2.5k
5分でわかるPreactのVDOMで作るWebエディタ
shuta13
0
290
Other Decks in Technology
See All in Technology
味覇で作るパスタが美味い - 20261001_yabaubuki.dev
livesense
PRO
0
130
AI駆動開発の時代になったのでトヨタ生産方式から見直す
terurou
7
6k
「事実」を「計測」して、「解釈」する 〜AWS Lambdaのメモリ最適解の見つけ方〜
maimyyym
0
160
Cognition AI Japan - ウェビナー2_テストQA_運用監視
cogakira
0
140
実践!Cloud Run ハンズオン!! / Cloud Run handson
y0hgi
2
270
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
510
[JAWS-UG彩の国埼玉#12]そろそろ準備する?re:Invent2026をやさしく解説 / reinvent2026-sainokuni
sh_fk2
1
310
AI時代のPRレビューにどう向き合うか?
kairim0
1
240
事業成長とデータ活用を止めないためのマネジメントへ挑戦
hiracky16
0
370
Snapshot Testing in Practice: Predictable and Reliable SwiftUI Views
fespinoza
0
220
会社説明資料
persolserverworks
0
9.8k
re:Invent初参加で変わったこと、2回目にやってみたいこと(JAWS-UG彩の国埼玉 #12)
mhrtech
2
180
Featured
See All Featured
Mind Mapping
helmedeiros
1
400
Design in an AI World
tapps
1
350
The Cult of Friendly URLs
andyhume
79
7k
Into the Great Unknown - MozCon
thekraken
41
2.8k
Rails Girls Zürich Keynote
gr2m
96
14k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
The Limits of Empathy - UXLibs8
cassininazir
2
720
Game over? The fight for quality and originality in the time of robots
wayneb77
1
300
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
520
sira's awesome portfolio website redesign presentation
elsirapls
0
450
Transcript
うわっ...私のSwagger、古すぎ...? grpc-gateway向けのSwaggerと 向き合う 2025/11/29 did0es
自己紹介 did0es(🗣 ディドス) - Hirai shuta 株式会社サイバーエージェント グループIT推進本部 CIU Software
Engineer(Web FrontEnd) Next Experts(TypeScript) Lead organizer for FEC Tokyo, Meguro.es X: https://x.com/did0es GitHub: https://github.com/shuta13 For more: https://did0.es
CIUのWeb開発の API定義(.protoファイル)から APIクライアントを 生成する仕組みの裏側について お話します
1.CIU Webフロントの技術構成の紹介 2.Cycloud APIsについて 3.APIクライアントを自動生成する 4.自動生成で発生した問題に向き合う 5.まとめ
CIU Webフロントの 技術構成の紹介
やっていること: Cycloud(プライベートクラウド)の マネージドサービスのWebUI開発
採用技術 以下をベースとして、 CIU Webフロントチームで内製している SDKを使用 • フレームワーク、ライブラリ Next.js(App Router)・React •
スタイリング Tailwind CSS・UIライブラリ(Cloudscape, daisyUI, MUI, HeroUI etc…) • 開発ツール TypeScript・ESLint・Prettier・Jest・Swagger • 監視 Sentry • 設計 Clean Architecture
SDK Client • CIUのWebフロントエンド開発向けの SDK • 50個以上のパッケージから成るモノレポ 例: Cycloud UI
UIライブラリ Cycloud Use クライアント ロジック Cycloud APIs APIクライアント Create Cycloud App ワンコマンドでWebUI 生成CLI 開発ツールの Config系 ESLint・Prettier・Jest etc…
SDK Client • CIUのWebフロントエンド開発向けの SDK • 50個以上のパッケージから成るモノレポ 例: Cycloud UI
UIライブラリ Cycloud Use クライアント ロジック Cycloud APIs APIクライアント Create Cycloud App ワンコマンドでWebUI 生成CLI 開発ツールの Config系 ESLint・Prettier・Jest etc…
Cycloud APIsについて
Cycloud APIsとは •TypeScript製のAPIクライアントライブラリ サービスごとに分かれており、 適宜npmでインストールして使う •バックエンドの API定義を元に自動生成 API定義が変更されると自動生成が走る 生成されたTSをモノレポのパッケージ化
Cycloud APIsの構成
APIクライアントを 自動生成する
【再掲】Cycloud APIsの構成 ここからは赤枠内の話をします
API定義→API Clientの構成
API定義→API Clientの構成 青枠を掘り下げます
なぜSwaggerに変換? • gPRCによるAPIをブラウザから呼び出すには Proxyが必要 CycloudのCLI向けのgRPC製APIをブラウザから使う • Proxyとしてgrpc-gatewayを利用している ProxyでgRPCをREST APIに変換 APIがgRPCであることを意識することなく使うための抽象化層
なぜSwagger 2.0に変換? grpc-gatewayがSwagger 3.0以降をサポートしていない https://github.com/grpc-ecosystem/grpc-gateway/issues/441
生成されたAPI Client
API Clientの使い方
APIレスポンスを元に表示するUI
動いてそうなのでヨシ!
やがて浮き彫りになる問題...
自動生成で発生した問題に 向き合う
①Buf CLIプラグインのバグ field_behaviourというアノテーションが含まれた Protoをうまく変換できない https://github.com/grpc-ecosystem/grpc-gateway/issues/3058
Swaggerを3.0にすれば直るが grpc-gatewayは3.0に対応していない
向き合う field_behaviorが無くても問題なかったので外す
②Swagger 2.0にない仕様 pathプロパティに相当する Protoのフィールドを省略できない https://github.com/OAI/OpenAPI-Specification/issues/1045
Re: Swaggerを3.0にすれば直るが grpc-gatewayは3.0に対応していない
向き合う openapi-generator-cliが中断しないようにバリデーションをスキップ・動作確認でカバー
まとめ
技術で問題と向き合おう •バグや不具合に遭遇したら、まずは調査しよう 何が原因でどういった現象起きているか、客観的にまとめて解決方針を立てる →方針を元に動く。予測だけで動くと危険⚠ •ドキュメントや仕様書を読み込もう 今回であればProtoの仕様書やSwaggerの仕様書、GitHub Repoなど →AIツールを駆使しつつ、気になった箇所は自分の目で読み込むと⭕ •根本解決も視野に入れよう OSSであれば、直した内容を元にコントリビュートするとより良い
→他のOSSユーザーも恩恵を享受できる🎉
根本修正の例 開発中に遭遇した Storybook,Next.jsのバグを業務の一環で修正 https://github.com/storybookjs/storybook/pull/26787
技術で幅広く貢献しよう💪
ありがとうございました