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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
did0es
November 29, 2025
Technology
200
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
【前編】このAPIいつ使うん?あの機能なに?V8のドキュメント、全部読んでみた
shuta13
0
86
TypeScript Compiler APIとPHP-Parserを活用し、TypeScriptとPHPで型を共有する
shuta13
1
890
ブラウザの投機的読み込みと投機ルールAPIを理解し、Webサービスのパフォーマンスを最適化する
shuta13
3
390
ViteとTypeScriptのProject Referencesで 大規模モノレポのUIカタログのリリースサイクルを高速化する
shuta13
3
400
歴代のWeb Speed Hackathonの出題から考えるデグレしないパフォーマンス改善
shuta13
8
900
Reconciliationの世界
shuta13
0
30
なぜクラウドサービスで Web コンソールを提供するのか
shuta13
4
2.5k
5分でわかるPreactのVDOMで作るWebエディタ
shuta13
0
280
TailwindCSSでUIライブラリを作る際のハマりどころ
shuta13
0
830
Other Decks in Technology
See All in Technology
最新技術に積極チャレンジ!EKS共通基盤のこれまでとこれから
daitak
0
300
IoTハンズオンの舞台裏
shirouz
2
120
Redmine 7.0で私が開発した新機能の狙いと背景
vividtone
1
110
どんな手を使っても絶対間に合わせるスケジューラ
asari194617
0
1.6k
Kiro Crewしか勝たん!?
miu_crescent
PRO
0
180
APIセキュリティを組織で実現するには~注力する点と設計・実装に入れたい対策~
riiimparm
3
930
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
130
多摩川(.dev)ランニング入門 / Tamagawa.dev#3
fujiwara3
3
340
AIエージェントを雇う前に決める5つのこと
knishioka
1
160
[DroidKaigi 2026] Making UI specifications visible: Android UI development in the AI agent era supported by Compose Screenshot Testing and galleries
syarihu
0
560
書籍『生成AIの安全性入門』の入門
wataoka
0
210
AI時代に、プロダクトの数だけ積み上がる所有コストをどうエンジニアリングするか / Engineering the Cost of Ownership
kzkmaeda
0
980
Featured
See All Featured
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
460
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
300
sira's awesome portfolio website redesign presentation
elsirapls
0
400
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
500
Everyday Curiosity
cassininazir
0
310
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
310
Technical Leadership for Architectural Decision Making
baasie
3
550
Navigating Weather and Climate Data
rabernat
0
510
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Between Models and Reality
mayunak
4
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
技術で幅広く貢献しよう💪
ありがとうございました