2023年「春のJavaScript祭り」のLT登壇資料。
概要:OpenAPIからのコード自動生成ライブラリをopenapi-generatorからOrvalに移行した理由と効果について
OpenAPIコード生成ライブラリを『Orval』に移行した理由早稲田大学4年 安井大晟(ytaisei)1
View Slide
TABLE OF CONTENTS自己紹介01Orvalとは?03抱えていた課題02効果検証プロダクトが抱えていた課題を整理04Orvalの特徴を紹介他の自動生成ライブラリとの違いは導入後の効果2
自己紹介013
自己紹介2019年:早稲田大学教育学部入学(元教員志望)2021年:42Tokyo入学2022年:エンジニアを目指し休学学生ピッチコンテスト等で受賞2023年:SaaS企業インターン4
抱えていた課題プロダクトが抱えていた課題を整理025
TypeScript(前提)使用している技術AxiosHTTPクライアント コード生成ライブラリopenapi-generatorテストTesting Library言語 非同期状態管理React QueryUIライブラリReact6
TypeScript(前提)使用している技術AxiosHTTPクライアント コード生成ライブラリOrvalテストTesting Library言語 非同期状態管理React QueryUIライブラリReact7
React QueryのQuery Keyを安全に管理できていなかった抱えていた課題課題1 課題2Openapi-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 課題2Openapi-generatorの使いづらさライブラリに対する不満 React Queryの設計上の問題13
Orvalとは?Orvalの特徴を紹介他の自動生成ライブラリとの違いは0314
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のカスタムフック(特定の設定をした条件で)181234
2. Query Keyの生成関数● エンドポイントに沿ったQuery Keyを設定● 一意であればなんでもいいライブラリに任せたい!19
4. React Queryのカスタムフック1. エンドポイントごとにuseQueryのカスタムフックを実装する2. React Queryのオプションを失わない設計3. TDataをGenericsで渡せる4. QueryFn、QueryKeyを分けて実装するすべての条件を満たしている 👍20
出力ファイル形式の柔軟性公式より 21
効果検証導入後の効果0422
React QueryのQuery Keyを安全に管理できていなかった抱えていた課題課題1 課題2Openapi-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-13046Qiita:https://qiita.com/taisei-13046Zenn:https://zenn.dev/taisei_1304627