Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
OpenAPIコード生成ライブラリを 『Orval』に移行した理由 早稲田大学4年 安井大晟(ytaisei) 1
Slide 2
Slide 2 text
TABLE OF CONTENTS 自己紹介 01 Orvalとは? 03 抱えていた課題 02 効果検証 プロダクトが抱えていた 課題を整理 04 Orvalの特徴を紹介 他の自動生成ライブラリとの違 いは 導入後の効果 2
Slide 3
Slide 3 text
自己紹介 01 3
Slide 4
Slide 4 text
自己紹介 2019年:早稲田大学教育学部入学(元教員志望) 2021年:42Tokyo入学 2022年:エンジニアを目指し休学 学生ピッチコンテスト等で受賞 2023年:SaaS企業インターン 4
Slide 5
Slide 5 text
抱えていた課題 プロダクトが抱えていた課題を整理 02 5
Slide 6
Slide 6 text
TypeScript (前提)使用している技術 Axios HTTPクライアント コード生成ライブラリ openapi-generator テスト Testing Library 言語 非同期状態管理 React Query UIライブラリ React 6
Slide 7
Slide 7 text
TypeScript (前提)使用している技術 Axios HTTPクライアント コード生成ライブラリ Orval テスト Testing Library 言語 非同期状態管理 React Query UIライブラリ React 7
Slide 8
Slide 8 text
React QueryのQuery Keyを 安全に管理できていなかった 抱えていた課題 課題1 課題2 Openapi-generator の使いづらさ ライブラリに対する不満 React Queryの設計上の問題 8
Slide 9
Slide 9 text
Openapi-generatorの使いづらさ ● 出力ファイルの多さ ● 実行速度の遅さ ● 数多くのライブラリに対応している分、痒い所に手が届かない ○ 70近いclient generatorを用意 ○ Mock生成、ファイルの出力方法 etc. 9
Slide 10
Slide 10 text
React QueryのQuery Keyを 安全に管理できていなかった これ キャッシュを管理する keyになるため、 必ず一意性を保証する必要がある 10
Slide 11
Slide 11 text
公式でもQuery Keyを定数で管理することを 推奨している 11
Slide 12
Slide 12 text
定数で管理するメリット Query Keyを文字列で指定しなくて良い ● ● Human Errorを防ぐ ● 保守性を高める 12
Slide 13
Slide 13 text
React QueryのQuery Keyを 安全に管理できていなかった 抱えていた課題 課題1 課題2 Openapi-generator の使いづらさ ライブラリに対する不満 React Queryの設計上の問題 13
Slide 14
Slide 14 text
Orvalとは? Orvalの特徴を紹介 他の自動生成ライブラリとの違いは 03 14
Slide 15
Slide 15 text
Orvalとは? Orvalは、OpenAPIから型安全なコードを自動生成するツールであり、 React Queryのカスタムフックも生成できます。APIドキュメントからクラ イアントコードを生成し、開発効率を向上させるだけでなく、型情報を提 供してエラーを減らします。 (ChatGPTに聞きました) 15
Slide 16
Slide 16 text
まとめると ● TS製ライブラリ ● 高速なコード生成 ● Mockの自動生成 ● 柔軟な出力方法 プロダクトとの相性が 非常にいい REST設計で状態管理にReact QueryやSWRのような ライブラリを使用している場合、Orvalは高い価値を発揮する。 16
Slide 17
Slide 17 text
Orvalが向かないケース ● スキーマが正しく定義されていない ○ 生成されるコードの質が落ちる ● テスト運用がされていない ○ Mockの自動生成が生きない ● React QueryやSWRを使っていない ○ カスタムフックの自動生成が生きない 17
Slide 18
Slide 18 text
生成されるコード 1. HTTP通信ロジック 2. Query Keyの生成関数 3. 型定義 4. React Queryのカスタムフック (特定の設定をした条件で) 18 1 2 3 4
Slide 19
Slide 19 text
2. Query Keyの生成関数 ● エンドポイントに沿ったQuery Keyを設定 ● 一意であればなんでもいい ライブラリに任せたい! 19
Slide 20
Slide 20 text
4. React Queryのカスタムフック 1. エンドポイントごとにuseQueryの カスタムフックを実装する 2. React Queryのオプションを失わない設計 3. TDataをGenericsで渡せる 4. QueryFn、QueryKeyを分けて実装する すべての条件を満たしている 👍 20
Slide 21
Slide 21 text
出力ファイル形式の柔軟性 公式より 21
Slide 22
Slide 22 text
効果検証 導入後の効果 04 22
Slide 23
Slide 23 text
React QueryのQuery Keyを 安全に管理できていなかった 抱えていた課題 課題1 課題2 Openapi-generator の使いづらさ 柔軟なカスタマイズと特定の技術下で 高い価値を発揮! React Queryの設計を完全に任せられる! 23
Slide 24
Slide 24 text
24 ● HTTP通信 ○ openapi-generator ● React Queryの実装 ● Query Keyの管理 ● React Queryのオプション指定 どれだけメンテナンスすべきコードが削減されたか
Slide 25
Slide 25 text
25 メンテナンスが必要なコードが大幅に削減 ● HTTP通信 ● React Queryの実装 ● Query Keyの管理 ● React Queryのオプション指定
Slide 26
Slide 26 text
● React Queryのカスタムフック ● Query Keyの管理 ● Mock関数の生成 etc. 誰が担当しても同じ(似た)実装になるものは、 ライブラリに任せることでHuman Errorを防ぎ、 開発者体験を向上させる 26
Slide 27
Slide 27 text
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