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
did0es
November 29, 2025
Technology
0
120
うわっ...私のSwagger、古すぎ...?grpc-gateway向けのSwaggerと向き合う
フロントエンドカンファレンス関西2025 学生支援スポンサーイベントで行ったLTの資料です。
did0es
November 29, 2025
Tweet
Share
More Decks by did0es
See All by did0es
ViteとTypeScriptのProject Referencesで 大規模モノレポのUIカタログのリリースサイクルを高速化する
shuta13
3
320
歴代のWeb Speed Hackathonの出題から考えるデグレしないパフォーマンス改善
shuta13
8
770
なぜクラウドサービスで Web コンソールを提供するのか
shuta13
4
2.4k
5分でわかるPreactのVDOMで作るWebエディタ
shuta13
0
240
TailwindCSSでUIライブラリを作る際のハマりどころ
shuta13
0
780
codemodとうまく付き合うには
shuta13
0
2.8k
プライベートクラウドのコンソール画面をNext.jsのApp Routerでフルリプレイスした話
shuta13
4
970
CyberAgent Developer Conference(CADC) 2023 LP開発の舞台裏
shuta13
0
280
Turborepo Code Generationによる、サイバーエージェントグループのフロントエンド開発の効率化
shuta13
5
2.7k
Other Decks in Technology
See All in Technology
問い合わせ自動化の技術的挑戦
recruitengineers
PRO
2
150
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.1k
大規模サービスにおける レガシーコードからReactへの移行
magicpod
1
130
Eight Engineering Unit 紹介資料
sansan33
PRO
1
6.9k
生成AIの利用とセキュリティ /gen-ai-and-security
mizutani
1
1.2k
Secure Boot 2026 - Aggiornamento dei certificati UEFI e piano di adozione in azienda
memiug
0
140
LY Tableauでの Tableau x AIの実践 (at Tableau Now! - 2026-02-26)
yoshitakaarakawa
0
1.3k
技術的負債の泥沼から組織を救う3つの転換点
nwiizo
7
2.2k
チームメンバー迷わないIaC設計
hayama17
5
3.8k
LINE Messengerの次世代ストレージ選定
lycorptech_jp
PRO
19
7.3k
Evolution of Claude Code & How to use features
oikon48
1
220
20260305_【白金鉱業】分析者が地理情報を武器にするための軽量なアドホック分析環境
yucho147
1
170
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
250
Navigating Weather and Climate Data
rabernat
0
130
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
400
GitHub's CSS Performance
jonrohan
1032
470k
My Coaching Mixtape
mlcsv
0
64
The World Runs on Bad Software
bkeepers
PRO
72
12k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
BBQ
matthewcrist
89
10k
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
技術で幅広く貢献しよう💪
ありがとうございました