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
1
3.7k
OpenAPIコード生成ライブラリを 『Orval』に移行した理由
2023年「春のJavaScript祭り」のLT登壇資料。
概要:OpenAPIからのコード自動生成ライブラリをopenapi-generatorからOrvalに移行した理由と効果について
ytaisei
April 23, 2023
Tweet
Share
More Decks by ytaisei
See All by ytaisei
Deep Dive Into React 〜React Fiber Architectureについて〜
ytaisei
0
27
React19で状態管理はどう変わるか
ytaisei
2
68
TanStackで効率的なルーティングとデータ取得を実現
ytaisei
7
1.2k
TanStack Routerで型安全かつ効率的なルーティングを実現
ytaisei
4
1.4k
BunがCommonJSをサポートする理由
ytaisei
2
210
TanStack Router SPA開発の選択肢になるか(+TanStack Query)
ytaisei
2
1.1k
【2023】SWR vs TanStack Query
ytaisei
1
1.8k
React Queryは非同期の状態管理ライブラリだ
ytaisei
3
1.7k
アウトプットが与える影響 〜価値を最大化するための学習サイクル〜
ytaisei
2
1.8k
Other Decks in Technology
See All in Technology
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間
oracle4engineer
PRO
28
12k
VideoMamba: State Space Model for Efficient Video Understanding
chou500
0
190
いざ、BSC討伐の旅
nikinusu
2
780
Lexical Analysis
shigashiyama
1
150
rootlessコンテナのすゝめ - 研究室サーバーでもできる安全なコンテナ管理
kitsuya0828
3
380
適材適所の技術選定 〜GraphQL・REST API・tRPC〜 / Optimal Technology Selection
kakehashi
1
160
20241120_JAWS_東京_ランチタイムLT#17_AWS認定全冠の先へ
tsumita
2
240
100 名超が参加した日経グループ横断の競技型 AWS 学習イベント「Nikkei Group AWS GameDay」の紹介/mediajaws202411
nikkei_engineer_recruiting
1
170
The Rise of LLMOps
asei
5
1.2k
初心者向けAWS Securityの勉強会mini Security-JAWSを9ヶ月ぐらい実施してきての近況
cmusudakeisuke
0
120
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
3.2k
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
5
590
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
329
21k
Navigating Team Friction
lara
183
14k
Code Review Best Practice
trishagee
64
17k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
How GitHub (no longer) Works
holman
310
140k
We Have a Design System, Now What?
morganepeng
50
7.2k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
16k
Speed Design
sergeychernyshev
24
610
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
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