Laravelへ移すとき、どこから手を付けるか決めた
全部を一度に移すと戻れなくなります。順番を決めたら、途中で止めても使える状態を保てました。

この記事の結論
- 一度に全部移すと、動くまで何も確認できない
- 入口から順に移すと、途中でも動く状態を保てる
- 画面はいちばん最後でよい
- 一度に全部移すと、動くまで何も確認できない
- 入口から順に移すと、途中でも動く状態を保てる
- 画面はいちばん最後でよい
古いPHPをLaravelへ移す作業で、順番を決めた。決めるまでは手が止まっていた。
一度に移すとどうなるか
最初は全ファイルを一気に移そうとした。途中で気づいたのは、全部終わるまで1画面も表示できないということだ。
動かない期間が何日も続くと、どこで間違えたか分からなくなる。戻すにも、戻す先が遠い。
入口から順に移す
順番をこうした。
- ルーティング(どのURLでどのファイルが動くか)
- データベースの読み書き
- 処理のまとまり(ビジネスロジック)
- 画面
この順なら、どの段階で止めても動く。1と2だけ終わった状態でも、古い画面のまま新しい入口で動く。
まずルーティングだけ
古いコードはitem.php?id=3のような形で、ファイルがそのままURLだった。
Laravelのルートを定義して、中身は古いファイルをそのまま読み込むだけにする。
Route::get('/item/{id}', function ($id) {
$_GET['id'] = $id;
return view('legacy', ['file' => 'item.php']);
});格好は悪い。しかしこの時点で全URLが新しい入口を通るようになり、以降は中身を1つずつ入れ替えられる。
そのまま使える形
いきなり書き直さない。外側から順に剥がすと、途中で止めても使える状態が残る。
- 入口を1本にする — あちこちのPHPファイルを直接開く作りなら、まず窓口をまとめる
- 画面とデータ処理を分ける — HTMLの中にSQLがある状態を先に解く
- データベースの接続を1か所にする
- 新しい機能だけ新しい側で作る — 既存は動かしたまま、増える分を移す
- 使われていない画面を消す — 移す対象を減らすのが、いちばん効く
5番を先にやる。移さなくてよいものを移すのが、いちばん無駄な工数になる。
次にデータベース
mysql_*をPDOに直す作業は、前の段階で済ませてある。ここではそれをLaravelの書き方に寄せる。
いきなりEloquentにはしなかった。まずDB::select()に置き換える。SQLはそのまま使えるので、置き換えが機械的に済む。
Eloquentにするのは、テーブルの構造を見直すときでいい。同時にやると、どちらが原因で壊れたか分からなくなる。
処理のまとまりを抜き出す
いちばん時間がかかるのがここだった。古いコードは、1ファイルの中にDB操作とHTML出力と計算が混ざっている。
AIに「このファイルをクラスに分けて」と頼むと、きれいに分かれたものが返ってくる。ただし元のコードが持っていた細かい分岐が落ちることがある。
対策として、分割前後で同じ入力を流して、出力を突き合わせるようにした。合わなければ落ちた分岐がある。
画面は最後
画面をBladeに移すのは最後にした。見た目が変わると、動作が変わったのか表示が変わったのか分からなくなるからだ。
中身が全部移り終わってから画面に手を付けると、比べる相手が「さっきまで動いていた同じ画面」になる。差分が分かりやすい。
途中で止まってもよい形にする
この順番の利点は、どこで予算が尽きても使えることだ。
- 1まで → URLが整理され、以降の作業がしやすい
- 2まで → データベース周りが安全になる
- 3まで → 機能追加ができる状態になる
- 4まで → 完全移行
見積もりもこの単位で出せる。「全部でいくら」より通りやすかった。
AIに頼む単位
段階ごとに頼むと、返ってくるものが安定した。
「このファイルをLaravelに移して」だと、4つの作業が混ざった結果が返る。「この段階でやるのはルーティングだけ。中身は触らないで」と範囲を切ると、余計な書き換えが減る。
古いコードを消すのは最後
移し終わったファイルも、しばらく残しておいた。
移行後に「前はこう動いていたはず」という話が必ず出る。元のコードが残っていれば、読んで確かめられる。消すのは運用が落ち着いてからでいい。
あわせて読む
- プラグインを入れる前に、自分で書けないか考えるようになった — 小さな機能のために、大きなプラグインを入れていました。判断を変えた話です。
- 不具合を直す順番を決めたら、原因に辿り着くのが速くなった — 手当たり次第に試していました。切り分けの順番を決めた話です。
- 読めないコードを書かせないために、頼み方を変えた — 短く書かれると読めません。自分が読める範囲で書いてもらう話です。
まとめ
移行で迷うのは、どこから手を付けるかだ。入口から順に、画面を最後にという順番にしてから、作業が止まらなくなった。
途中で止めても使える形を保つのが大事で、そのためには一度に動かす範囲を小さくするしかない。
新しい記事が出たら、ブラウザの通知でお知らせします。
メールアドレスの登録は要りません。いつでも止められます。
関連記事
RELATED
テストが1つも無いコードに、どこからテストを足すか
全部にテストを書くのは無理です。移行で触る所だけに絞ったら、現実的な分量になりました。
HTTPの仕組みを図にした。前の話を覚えていない、という前提
HTTPは1往復で完結し、前のやり取りを覚えていません。ログイン状態が保てる理由と、ステータスコードの読み方を図で整理し…
動くけれど危ないコードを、先に直す順番にした
エラーで止まるコードより、止まらずに動いてしまうSQLの連結のほうが優先度は上でした。