RAKSUL TechBlog

RAKSULグループのエンジニアが技術トピックを発信するブログです

AIと進めるVue3移行

こんにちは。ラクスルの印刷事業部でエンジニアをしている渡邉です。 この記事はラクスル Advent Calendar 2025の18日目です。

先日、Vue2からVue3への移行プロジェクトに取り組んだのですが、その際Cursorを活用して効率化を図りました。

移行作業は、既存の挙動を壊さないよう慎重に進める必要があり、やることも地味で単調になりがちです。対象となるファイルは少なくとも70以上あり、コンポーネントの数だけ同じような作業が続くため、正直あまり気が進まない仕事でもあります。

今回、AIをうまく活用することで、単調な作業の大部分を任せることができ、想像以上に快適に進められました

本記事では、その過程で得た知見を共有します。

まず試したこと:シンプルに頼んでみる

Vue2→Vue3の移行は変換パターンがある程度決まっているため、AIでも対応できるのではと考えました。

まずはシンプルな指示を出してみました。

@App.vue これをVue3の書き方に変更してください。
ビルドは通らなくても構いません。
Options APIの形は保持してください。

シンプルなコンポーネントであれば、これだけの指示でも十分に動作するコードへ変換してくれました。

一方で、「ディレクトリ構成」「命名規則」「Storeの扱い」といった、プロジェクト固有の"暗黙知"までは汲み取れないこともわかりました。

AIによる変換自体は問題なくできるのですが、毎回Chatでパスの指定や書き方の補足修正が必要になり、結局、自分が横について指示を出し続ける形になってしまいました。

次に試したこと:移行コマンドを作成する

毎回同じ説明を繰り返すのは非効率です。そこで、アプローチを変えました。

Cursorには.cursor/commandsにファイルを置くことで、カスタムコマンドを定義できる機能があります。これを活用して、移行作業をコマンド化することにしました。

作成したコマンドでは、以下のようなルールと制約をファイル内に定義しています。

変換ルール

  • デコレータの変換@Component@Prop@Watch@Emit → Options API形式に
  • import文の更新vue-property-decoratordefineComponentPropType
  • テンプレート構文slot="name"#name$listeners削除、フィルター → computed

制約

  • Options API保持:Composition APIへの変換は行わない
  • リファクタ禁止:構造変更は別PRで対応
  • 削除禁止:動作しないコードはコメントアウト + TODOで対応
  • パスの統一:相対パス禁止、@/エイリアスを使用

コマンド内では、以下のような実行ステップを定義しています。各ステップごとにコミットすることで、変更を追いやすくしています。

Step 内容
1. Vue2→Vue3構文変換 デコレータをOptions APIに変換、import文の修正、テンプレート構文の更新
2. 依存関係の調整 未移行のコンポーネントやStoreをコメントアウト、ダミー実装を追加
3. テスト作成 基本的なマウントテストを作成
4. 品質チェック Lint、型チェック、テストをすべて通過させる
5. PR作成 差分を記録し、PRを作成

効果

コマンドを整備した結果、複雑すぎないコンポーネントなら「ほぼPRが出せる水準」まで自走してくれるようになりました。

いちいち説明しなくても、コマンドで定義したルールに沿ってパスを書き換えてくれますし、デコレータも正しく変換してくれます。これはかなり楽になりました。

テストもAIに任せる

移行と同時にテストのカバレッジも上げたいところですが、すべてを人の手で書くのは困難です。

そこで、「AIで書きやすいテスト」のルールを決めました

観点 方針
レンダリング 子コンポーネントやテキストが表示されているか
ロジック Props、Event、Methods、Computedの挙動
粒度 複雑な結合テストより、関数単位のシンプルなテスト

ポイントは「ユーザーストーリーに沿った網羅的なテスト」を目指さないことです。まずは機械的にカバレッジを上げることを優先しました。

この方針をコマンド内に定義しておくと、AIもそれに沿ったテストを生成してくれます。

運用上の工夫

移行計画をAIにも共有する

途中で気づいたのですが、AIに移行計画を知らせないと、意図しない変更を加えてしまうことがあります。

例えば、こちらが「まず動く状態を作って、リファクタは後で」と考えていても、AIが勝手にリファクタを始めてしまうケースがありました。

そこで、移行計画のドキュメントをリポジトリ内に置いて、Cursorから参照できるようにしました。

  • 移行対象ファイルの一覧
  • 移行の優先順位
  • 各ファイルの移行ステータス

これをAIが見られる状態にしておくことで、「今はこのファイルを移行するフェーズ」と理解してもらえます。

レビュー負荷への対策

AIのおかげでPR生成速度が上がると、今度はレビューが追いつかないという問題が発生します。

対策として、PRに以下を含めるようにしました。

  • 変更の背景:なぜこの変更が必要か
  • 移行前後のdiff:移行前後の差分を貼っておく

リファクタと移行を分離しているので、差分は基本的にシンプルです。レビュアーも「これは機械的な変換」と判断しやすくなります。

AIに任せる領域、人間が担う領域

しばらく進めてみて、作業の種類によってAIと人間の役割分担が見えてきました。

コンポーネント移行はAIの得意領域です。コマンドを実行すれば移行からテスト、Lintまで一気に完結します。人間はPRレビューに集中できます。

ページ移行になると複雑さが増します。コンポーネントと同様にある程度は自走できますが、複雑な依存関係がある部分は人間がChatで指示を出す必要があります。CursorのPlanモードで先に方針をまとめておくと精度が上がりました。

レビューはAIと人間の協働が効果的でした。AIがタイポやバグをチェックし、人間は「なぜこの変更が必要か」の背景をPRに補足する。この組み合わせでレビュー効率が上がります。

まとめ

今回、「AIにどこまで任せられるか」という視点でVue2→Vue3移行に取り組んだ結果、開発体験が大きく変わることを実感しました。

機械的な書き換え作業をAIに任せることで、移行方針の判断やコードレビュー、テストの確認といった、より重要な部分に時間を使えるようになりました。

もちろん、現時点でAIが完璧というわけではなく、時には間違えることもあります。最終的な判断はまだ人間による確認が必要です。しかし、単調な作業の大部分を任せられることで、開発の質とスピードの両面で大きく向上しました。

よかったこと

  • 単調な作業から解放された:コンポーネントの機械的な移行は、ほぼAIに任せられる
  • テストも書いてくれる:省コストでカバレッジを上げられる
  • 調査が早い:「この書き方、Vue3ではどうなるか」といった質問にすぐ答えてくれる

課題

  • 設計判断は人間が必要:Store→Props整理など、アーキテクチャ変更は人間による判断が必要

ポイント

  1. まずシンプルに試す:意外と対応できる部分も多い
  2. プロジェクト固有のルールはコマンド化する:毎回説明するのが非効率
  3. AIと人間の役割分担を意識する:全部任せるのは難しいが、かなりの部分を任せられる

今回はVue2→Vue3の事例でしたが、こういったAIの活用は他のフレームワークの移行にも応用できるはずです。レガシーな実装からの移行を進めるチームの参考になれば幸いです。

参考リンク - Vue 3 Migration Guide - Cursor