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
うわっ...私のSwagger、古すぎ...?grpc-gateway向けのSwaggerと向き合う
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
did0es
November 29, 2025
Technology
130
0
Share
うわっ...私のSwagger、古すぎ...?grpc-gateway向けのSwaggerと向き合う
フロントエンドカンファレンス関西2025 学生支援スポンサーイベントで行ったLTの資料です。
did0es
November 29, 2025
More Decks by did0es
See All by did0es
ViteとTypeScriptのProject Referencesで 大規模モノレポのUIカタログのリリースサイクルを高速化する
shuta13
3
340
歴代のWeb Speed Hackathonの出題から考えるデグレしないパフォーマンス改善
shuta13
8
840
なぜクラウドサービスで Web コンソールを提供するのか
shuta13
4
2.5k
5分でわかるPreactのVDOMで作るWebエディタ
shuta13
0
250
TailwindCSSでUIライブラリを作る際のハマりどころ
shuta13
0
790
codemodとうまく付き合うには
shuta13
0
2.9k
プライベートクラウドのコンソール画面をNext.jsのApp Routerでフルリプレイスした話
shuta13
4
990
CyberAgent Developer Conference(CADC) 2023 LP開発の舞台裏
shuta13
0
300
Turborepo Code Generationによる、サイバーエージェントグループのフロントエンド開発の効率化
shuta13
5
2.8k
Other Decks in Technology
See All in Technology
AI バイブコーティングでキーボード不要?!
samakada
0
650
Keeping Ruby Running on Cygwin
fd0
0
190
Oracle Cloud Infrastructure:2026年4月度サービス・アップデート
oracle4engineer
PRO
0
200
今年注目する!データ分析プラットフォームでのAIの活用
nayuts
0
170
20260423_執筆の工夫と裏側 技術書の企画から刊行まで / From the planning to the publication of technical book
nash_efp
3
660
AI와 협업하는 조직으로의 여정
arawn
0
560
20年前の「OSS革命」に学ぶ AI時代の生存戦略
samakada
0
500
Practical TypeProf: Lessons from Analyzing Optcarrot
mame
1
1.4k
Rapid Start: Faster Internet Connections, with Ruby's Help
kazuho
2
920
ハーネスエンジニアリングをやりすぎた話 ~そのハーネスは解体された~
gotalab555
5
1.9k
データ定義の混乱と戦う 〜 管理会計と財務会計 〜
wonohe
0
160
[Oracle TechNight#99] 生成AI時代のAI/ML入門 ~ AIとオラクルデータベースの関係 (前半)
oracle4engineer
PRO
1
120
Featured
See All Featured
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.4k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
170
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.7k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
380
New Earth Scene 8
popppiees
3
2.1k
Balancing Empowerment & Direction
lara
6
1.1k
Designing for Performance
lara
611
70k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
340
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
技術で幅広く貢献しよう💪
ありがとうございました