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
OpenAPIコード生成ライブラリを 『Orval』に移行した理由
Search
ytaisei
April 23, 2023
Technology
2
4k
OpenAPIコード生成ライブラリを 『Orval』に移行した理由
2023年「春のJavaScript祭り」のLT登壇資料。
概要:OpenAPIからのコード自動生成ライブラリをopenapi-generatorからOrvalに移行した理由と効果について
ytaisei
April 23, 2023
Tweet
Share
More Decks by ytaisei
See All by ytaisei
Reactのトランジションを覗いてみる
ytaisei
1
1.2k
Deep Dive Into React 〜React Fiber Architectureについて〜
ytaisei
1
78
React19で状態管理はどう変わるか
ytaisei
2
110
TanStackで効率的なルーティングとデータ取得を実現
ytaisei
8
1.4k
TanStack Routerで型安全かつ効率的なルーティングを実現
ytaisei
4
1.6k
BunがCommonJSをサポートする理由
ytaisei
2
280
TanStack Router SPA開発の選択肢になるか(+TanStack Query)
ytaisei
2
1.3k
【2023】SWR vs TanStack Query
ytaisei
1
1.9k
React Queryは非同期の状態管理ライブラリだ
ytaisei
3
1.8k
Other Decks in Technology
See All in Technology
クラウドサービス事業者におけるOSS
tagomoris
3
950
ホワイトボードチャレンジ 説明&実行資料
ichimichi
0
130
Helm , Kustomize に代わる !? 次世代 k8s パッケージマネージャー Glasskube 入門 / glasskube-entry
parupappa2929
0
270
全文検索+セマンティックランカー+LLMの自然文検索サ−ビスで得られた知見
segavvy
2
130
Share my, our lessons from the road to re:Invent
naospon
0
110
運用しているアプリケーションのDBのリプレイスをやってみた
miura55
1
830
偏光画像処理ライブラリを作った話
elerac
1
120
Tech Blogを書きやすい環境づくり
lycorptech_jp
PRO
1
260
Amazon S3 Tablesと外部分析基盤連携について / Amazon S3 Tables and External Data Analytics Platform
nttcom
0
150
SA Night #2 FinatextのSA思想/SA Night #2 Finatext session
satoshiimai
1
150
Iceberg Meetup Japan #1 : Iceberg and Databricks
databricksjapan
0
150
あれは良かった、あれは苦労したB2B2C型SaaSの新規開発におけるCloud Spanner
hirohito1108
2
770
Featured
See All Featured
How to Ace a Technical Interview
jacobian
276
23k
Music & Morning Musume
bryan
46
6.4k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
560
Dealing with People You Can't Stand - Big Design 2015
cassininazir
366
25k
GitHub's CSS Performance
jonrohan
1030
460k
Faster Mobile Websites
deanohume
306
31k
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
Why Our Code Smells
bkeepers
PRO
336
57k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.1k
Become a Pro
speakerdeck
PRO
26
5.1k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Transcript
OpenAPIコード生成ライブラリを 『Orval』に移行した理由 早稲田大学4年 安井大晟(ytaisei) 1
TABLE OF CONTENTS 自己紹介 01 Orvalとは? 03 抱えていた課題 02 効果検証
プロダクトが抱えていた 課題を整理 04 Orvalの特徴を紹介 他の自動生成ライブラリとの違 いは 導入後の効果 2
自己紹介 01 3
自己紹介 2019年:早稲田大学教育学部入学(元教員志望) 2021年:42Tokyo入学 2022年:エンジニアを目指し休学 学生ピッチコンテスト等で受賞 2023年:SaaS企業インターン 4
抱えていた課題 プロダクトが抱えていた課題を整理 02 5
TypeScript (前提)使用している技術 Axios HTTPクライアント コード生成ライブラリ openapi-generator テスト Testing Library 言語
非同期状態管理 React Query UIライブラリ React 6
TypeScript (前提)使用している技術 Axios HTTPクライアント コード生成ライブラリ Orval テスト Testing Library 言語
非同期状態管理 React Query UIライブラリ React 7
React QueryのQuery Keyを 安全に管理できていなかった 抱えていた課題 課題1 課題2 Openapi-generator の使いづらさ ライブラリに対する不満
React Queryの設計上の問題 8
Openapi-generatorの使いづらさ • 出力ファイルの多さ • 実行速度の遅さ • 数多くのライブラリに対応している分、痒い所に手が届かない ◦ 70近いclient generatorを用意
◦ Mock生成、ファイルの出力方法 etc. 9
React QueryのQuery Keyを 安全に管理できていなかった これ キャッシュを管理する keyになるため、 必ず一意性を保証する必要がある 10
公式でもQuery Keyを定数で管理することを 推奨している 11
定数で管理するメリット Query Keyを文字列で指定しなくて良い • • Human Errorを防ぐ • 保守性を高める 12
React QueryのQuery Keyを 安全に管理できていなかった 抱えていた課題 課題1 課題2 Openapi-generator の使いづらさ ライブラリに対する不満
React Queryの設計上の問題 13
Orvalとは? Orvalの特徴を紹介 他の自動生成ライブラリとの違いは 03 14
Orvalとは? Orvalは、OpenAPIから型安全なコードを自動生成するツールであり、 React Queryのカスタムフックも生成できます。APIドキュメントからクラ イアントコードを生成し、開発効率を向上させるだけでなく、型情報を提 供してエラーを減らします。 (ChatGPTに聞きました) 15
まとめると • TS製ライブラリ • 高速なコード生成 • Mockの自動生成 • 柔軟な出力方法 プロダクトとの相性が
非常にいい REST設計で状態管理にReact QueryやSWRのような ライブラリを使用している場合、Orvalは高い価値を発揮する。 16
Orvalが向かないケース • スキーマが正しく定義されていない ◦ 生成されるコードの質が落ちる • テスト運用がされていない ◦ Mockの自動生成が生きない •
React QueryやSWRを使っていない ◦ カスタムフックの自動生成が生きない 17
生成されるコード 1. HTTP通信ロジック 2. Query Keyの生成関数 3. 型定義 4. React
Queryのカスタムフック (特定の設定をした条件で) 18 1 2 3 4
2. Query Keyの生成関数 • エンドポイントに沿ったQuery Keyを設定 • 一意であればなんでもいい ライブラリに任せたい! 19
4. React Queryのカスタムフック 1. エンドポイントごとにuseQueryの カスタムフックを実装する 2. React Queryのオプションを失わない設計 3. TDataをGenericsで渡せる
4. QueryFn、QueryKeyを分けて実装する すべての条件を満たしている 👍 20
出力ファイル形式の柔軟性 公式より 21
効果検証 導入後の効果 04 22
React QueryのQuery Keyを 安全に管理できていなかった 抱えていた課題 課題1 課題2 Openapi-generator の使いづらさ 柔軟なカスタマイズと特定の技術下で
高い価値を発揮! React Queryの設計を完全に任せられる! 23
24 • HTTP通信 ◦ openapi-generator • React Queryの実装 • Query
Keyの管理 • React Queryのオプション指定 どれだけメンテナンスすべきコードが削減されたか
25 メンテナンスが必要なコードが大幅に削減 • HTTP通信 • React Queryの実装 • Query Keyの管理
• React Queryのオプション指定
• React Queryのカスタムフック • Query Keyの管理 • Mock関数の生成 etc. 誰が担当しても同じ(似た)実装になるものは、
ライブラリに任せることでHuman Errorを防ぎ、 開発者体験を向上させる 26
THANKS! ご清聴ありがとうございました ぜひ様々なイベントでのお声がけをお待 ちしています! Twitter:https://twitter.com/ytaisei_ GitHub:https://github.com/taisei-13046 Qiita:https://qiita.com/taisei-13046 Zenn:https://zenn.dev/taisei_13046 27