Open12

Next.jsで作ったアプリをLLMにFlutter移行させる作業log

sakisaki

flutterのプロジェクトを作る

プロジェクト用のディレクトリを切ってそこで作業する

fvmでflutterのversionを管理するので、ver定義ファイルを用意

.fvm/fvm_config.json
{
  "flutterSdkVersion": "3.29.3"
}
fvm install

flutter doctorが全緑になるまで対応する

fvm flutter doctor
sakisaki

環境が整ったのでプロジェクトを作る

fvm flutter create .
fvm flutter run

いつもの

sakisaki

こっから移行作業
まず、Next.jsプロジェクトのsrc配下を、flutterプロジェクトの適当なディレクトリに持ってくる。
今回はweb_srcとする。

sakisaki

無邪気にRoo Codeで移行しろって言ってみる。
結構丸投げする予定なのと、作業の性質的にコンテキストウィンドウが巨大になりそうなのでモデルはgemini 2.5 pro(preview-05-06版)を選択。

sakisaki

いったんArchitectモードで様子を見てみる

Next.jsのプロジェクトをFlutterのプロジェクトに移行してほしいです
不明点は随時私に質問してください

前提情報は以下の通りです
- このリポジトリはflutterのプロジェクトです
  - flutter create した直後のデフォルトの状態です
  - fvm というflutterのバージョン管理ツールを使っているので、CLIでflutterコマンドを使いたいときは"fvm flutter"に置き換えてください(例: fvm flutter run)
- `web-src` にはNext.jsプロジェクトのsrc配下のコードが入っています
sakisaki

質疑応答を繰り返す

  • webのlocalstorageを使っている機能をどうするか?については、「ゆくゆくMBaaSへ移行する予定なので、Repositoryパターンで隠蔽してくれればなんでもいい。簡単なやり方にしてくれ」と指示。
  • チャット上で実装計画を提案されるが、じっくり読みたいからMDファイルにしてくれと指示
    • 頼まなくても最初からファイルに書き出してくれるときもあるんだよな
sakisaki

出力させたmdファイルをちょこちょこ編集し、新しいタスクで実装を開始させる

migration_plan.md に従って実装をお願いします
sakisaki

UIはスクショして与えたりしてなんとかやってるけど、思ったより中身まで作り変えてくれない。
ガワだけ適当に整えて終わりましたとか言ってくる

sakisaki

移行しろっつってんのにこんな感じで終えてる。

import 'package:flutter/material.dart';

class PomodoroView extends StatelessWidget {
  const PomodoroView({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('ポモドーロタイマー'),
      ),
      body: Center(
        child: Text('ポモドーロタイマーのUI'),
      ),
    );
  }
}

自分でNext.jsのコード読んでflutterで書き換えてね、と一喝する

sakisaki

ゴリゴリとVibe Codingしているが、やはりGemini 2.5 proのコスパはめちゃくちゃいいと感じる

ぶん回しまくってもこれぐらいのコードベースだとなかなか$1いかない
でもやっぱClaude 3.7 Sonnetほど賢くは無い印象で、エラー回避のためにすごいセンスのない改修をしたり、無限ループ入ったりすることが何度かあった。
あとは指示の一部を完了したら満足して完了報告してくることがありその辺もちょっとイケてなさを感じるが、この料金と反応速度は凄まじい。

sakisaki

.clinerulesをちゃんと書いてみる。どうだ?

開発ルール等
- 動作確認のために`fvm flutter run`を行わないでください。
  - 私が手もとでリロードするので、実装内容を確認してほしい場合は「リロードして確認してください」というようなメッセージを出してください
- 1つのエラー解消につき2回以上失敗したら、私に確認してください
- 状態管理には`riverpod`を使用してください
- `web_src/` ディレクトリ配下にはNext.jsのコード(移行元)が格納されています。
- `lib/` ディレクトリ配下にはFlutterのコード(移行先)が格納されています。