この記事は、2024 年 12 月 16 日に公開された EDOCODE Advent Calendar 2024 用です。
前回の記事は、EDOCODE プロダクトマネージャー 山田 泰司氏が執筆しました: Notion Webhook とノーコードツール「Make」を使った自動メールシステム (記事は日本語です)。
親会社のWano Advent Calendarもぜひチェックしてください!
当社のアプリ Gojiberry は、販売者が顧客から貴重なフィードバックを収集するのに役立つ Shopify アンケート アプリです。
私たちは、アプリにバグがなく、既存の機能を壊すことなく自信を持って新機能をリリースできることを保証するために、最初からテスト駆動開発 (TDD) で Gojiberry を構築してきました。この基盤により、Create React App (CRA) から Vite への移行などの大規模な変更を最小限の中断で行うことができました。
CRA が非推奨になり、その依存関係が時代遅れになったとき、私たちは成長するアプリをより適切にサポートできる最新のビルド ツールにアップグレードする時期が来たと判断しました。コードベースのサイズが大きいため、多少の複雑さが加わりましたが、Vite への切り替えには努力の価値があることがわかりました。
私たちの目標は、2 つの React プロジェクトを移行することでした。
実用的な顧客フィードバックを収集したい Shopify ストアのオーナーの方は、今すぐ Shopify App Store で Gojiberry を試してみてください!
CRA は以前は役に立ちましたが、現在は保守されておらず、その依存関係は時代遅れになっています。これにはいくつかの課題が生じました:
ユーザー イベント v14 の最大の改善点の 1 つは、すべてのインタラクション メソッドで await を使用する必要があることです。これにより、await waitFor でアクションをラップする必要がなくなり、テスト コードがクリーンになり、保守が容易になります。
前 (ユーザーイベント v13):
import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import MyComponent from './MyComponent'; test('updates state on click', async () => { render(<MyComponent />); userEvent.click(screen.getByRole('button')); await waitFor(() => { expect(screen.getByText('Updated state')).toBeInTheDocument(); }); });
後 (ユーザーイベント v14):
import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import MyComponent from './MyComponent'; test('updates state on click', async () => { render(<MyComponent />); userEvent.click(screen.getByRole('button')); await waitFor(() => { expect(screen.getByText('Updated state')).toBeInTheDocument(); }); });
この変更により、waitFor を使用して状態の変更を明示的に管理する必要がなくなり、テストが簡素化されます。ライブラリが自動的に処理するため、開発者は await waitFor をいつ含めるかについて考える必要がなくなりました。
ユーザー イベント v14 と Vitest の改善により、これらの問題の多くが解決され、よりクリーンで高速、より一貫した開発エクスペリエンスが提供されます。
Vite を選択する前に、Next.js と Remix を評価しました。どちらも強力なフレームワークですが、コードベースとインフラストラクチャに大幅な変更が必要でした。
Next.js とリミックス:
Vite を選んだ理由:
Vite を選択することで、本格的なフレームワークを採用する複雑さを回避しながら、最新の軽量ビルド ツールのメリットを享受できました。
モノリポには 2 つの個別の npm プロジェクトが含まれているため、移行には体系的に取り組みました。移行の実行方法は次のとおりです:
小さいプロジェクトから始めます:
移行手順:
各プロジェクトのプロセスは次の手順に従いました:
より大きなプロジェクトに対して繰り返します:
CRA から Vite への移行、および Vitest およびユーザー イベント v14 への移行により、開発ワークフローが大幅に改善されました。
この移行はゲームチェンジャーであり、コードベースの信頼性を維持しながら、より高速に反復できるようになりました。
私たちの経験から得られるポイントをいくつか紹介します:
CRA から Vite および Vitest への移行により、ワークフローが大幅に改善されました。より厳格な TypeScript ルールのおかげで、ビルドの高速化、ユーザー イベント v14 によるクリーンなテスト コード、およびより復元力の高いコードベースを享受できるようになりました。
この移行をよりスムーズにした主な要因の 1 つは、テスト駆動開発 (TDD) への初期投資でした。包括的なテストスイートを導入したことで、既存の機能を壊すことなく、自信を持って大規模な変更を加えることができました。
同様の移行を検討している場合、私たちの経験があなたの旅の指針となる貴重な洞察を提供することを願っています。
明日、2024 年 12 月 17 日の記事は、Gojiberry のプロダクト マーケティング マネージャー、Amee Xu による B2C から B2B への切り替え: マーケターの告白 となります。
ワノグループでは人材を募集しています!ご興味がございましたら、以下のリンクを使用して募集中のポジションをご確認ください:
求人 |ワノグループ
以上がReact CRA & Jest から Vite & Vitest への移行で得られた教訓の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。