- Airbnbは約3,500件のEnzymeベースのテストファイルを React Testing Library(RTL) へ自動移行することに成功
- 当初は1年半かかると見積もられていた作業を、LLMと自動化パイプラインによりわずか6週間で3.5Kのテストファイル更新を完了
- 自動バリデーション、リトライループ、動的プロンプト、大規模コンテキスト構成によって高い自動化成功率を確保
- 最終的に全ファイルの 97%を自動変換 し、残りは手作業で仕上げて100%完了
- この経験を基に、より複雑な移行作業とLLMベースの開発ツールの拡張を計画中
AirbnbのLLMベース大規模テスト移行
背景
- Airbnbは2020年から新規テストにReact Testing Library(RTL)を採用し、Enzymeからの移行を開始
- Enzymeは内部実装に深くアクセスする方式が現代のReactの思想に合わず、段階的な廃止の必要性が高まった
- 単純に削除すると テストカバレッジの空白を招く ため、意図とカバレッジを維持したままの変換が求められた
移行戦略
1. 段階ベースのバリデーションとリファクタリング
- ファイルを状態ベースのパイプラインとして構成し、各段階のバリデーションを通過した場合に次の段階へ進行
- 失敗時はLLMを呼び出して修正を試行。段階の例:
enzyme削除 → jest修正 → lint/tsc通過 → 完了マーク
- 数百件のファイルを並列処理可能 で、単純なファイルは高速に処理し、複雑なファイルは段階的に解決
2. リトライループと動的プロンプト
- 失敗した段階は 最大試行回数まで繰り返し実行
- 各試行では、エラーメッセージと修正済みファイルをプロンプトに含めて LLMへフィードバックを提供
- 単純〜中程度の難易度のファイルの大半は10回以下の試行で成功
3. プロンプトコンテキストの拡張
- 複雑なファイルは単純なリトライでは解決できず、豊富なコンテキストを提供する方式へ移行
- 最大10万トークンまで構成し、含まれる項目は以下の通り:
- 対象コンポーネントのソースコード
- 既存のEnzymeテスト
- 近接するテストや例示 (few-shot prompting)
- チーム内のスタイルと共通パターン
- 重要なのは 質の高い関連ファイルの選定 であり、プロンプトの文面そのものよりも「何を入れるか」が重要
4. 75%から97%へ引き上げる: 体系的な改善
- 自動化で75%の変換後、残る25%のうち 900件のファイルが失敗状態
- 問題分析と改善を繰り返し実施:
- 失敗ファイルの共通課題を収集
- 代表サンプルを選定 (5〜10件)
- プロンプト/スクリプトを改善
- サンプルに対してテスト適用後、全体を再試行
- 4日間の反復実行で 自動化完了率97%に到達
残る3%は手動処理
- 100回以上再試行しても失敗した一部ファイルは、自動リファクタリング結果を基に手動修正
- これも自動化のおかげで 最小限の労力で最終完成
結果と影響
- 自動化の初回実行で4時間のうちに75%の移行を完了
- 4日間の反復改善で97%の自動化を完了
- 残りの手動処理を含め、全体で6週間以内に移行作業を100%完了
- テストの意図とカバレッジを維持したままEnzymeを完全に削除
- LLM APIコストとエンジニアリングリソースを含めても、手作業と比べて非常に効率的なアプローチ
次のステップ
- 今回の経験を基に、LLMを活用したさらに大規模なコード変換自動化に着手
- 複雑なリファクタリングや構造変更などへの適用可能性も探っている
まだコメントはありません。