Laravelへ移すとき、どこから手を付けるか決めた

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

この記事の結論

  1. 一度に全部移すと、動くまで何も確認できない
  2. 入口から順に移すと、途中でも動く状態を保てる
  3. 画面はいちばん最後でよい
  • 一度に全部移すと、動くまで何も確認できない
  • 入口から順に移すと、途中でも動く状態を保てる
  • 画面はいちばん最後でよい

古いPHPをLaravelへ移す作業で、順番を決めた。決めるまでは手が止まっていた。

一度に移すとどうなるか

最初は全ファイルを一気に移そうとした。途中で気づいたのは、全部終わるまで1画面も表示できないということだ。

動かない期間が何日も続くと、どこで間違えたか分からなくなる。戻すにも、戻す先が遠い。

SPONSORED

入口から順に移す

順番をこうした。

  1. ルーティング(どのURLでどのファイルが動くか)
  2. データベースの読み書き
  3. 処理のまとまり(ビジネスロジック)
  4. 画面

この順なら、どの段階で止めても動く。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. 入口を1本にする — あちこちのPHPファイルを直接開く作りなら、まず窓口をまとめる
  2. 画面とデータ処理を分ける — HTMLの中にSQLがある状態を先に解く
  3. データベースの接続を1か所にする
  4. 新しい機能だけ新しい側で作る — 既存は動かしたまま、増える分を移す
  5. 使われていない画面を消す — 移す対象を減らすのが、いちばん効く

5番を先にやる。移さなくてよいものを移すのが、いちばん無駄な工数になる。

次にデータベース

mysql_*をPDOに直す作業は、前の段階で済ませてある。ここではそれをLaravelの書き方に寄せる。

いきなりEloquentにはしなかった。まずDB::select()に置き換える。SQLはそのまま使えるので、置き換えが機械的に済む。

Eloquentにするのは、テーブルの構造を見直すときでいい。同時にやると、どちらが原因で壊れたか分からなくなる。

処理のまとまりを抜き出す

いちばん時間がかかるのがここだった。古いコードは、1ファイルの中にDB操作とHTML出力と計算が混ざっている。

AIに「このファイルをクラスに分けて」と頼むと、きれいに分かれたものが返ってくる。ただし元のコードが持っていた細かい分岐が落ちることがある。

対策として、分割前後で同じ入力を流して、出力を突き合わせるようにした。合わなければ落ちた分岐がある。

画面は最後

画面をBladeに移すのは最後にした。見た目が変わると、動作が変わったのか表示が変わったのか分からなくなるからだ。

中身が全部移り終わってから画面に手を付けると、比べる相手が「さっきまで動いていた同じ画面」になる。差分が分かりやすい。

途中で止まってもよい形にする

この順番の利点は、どこで予算が尽きても使えることだ。

  • 1まで → URLが整理され、以降の作業がしやすい
  • 2まで → データベース周りが安全になる
  • 3まで → 機能追加ができる状態になる
  • 4まで → 完全移行

見積もりもこの単位で出せる。「全部でいくら」より通りやすかった。

AIに頼む単位

段階ごとに頼むと、返ってくるものが安定した。

「このファイルをLaravelに移して」だと、4つの作業が混ざった結果が返る。「この段階でやるのはルーティングだけ。中身は触らないで」と範囲を切ると、余計な書き換えが減る。

古いコードを消すのは最後

移し終わったファイルも、しばらく残しておいた。

移行後に「前はこう動いていたはず」という話が必ず出る。元のコードが残っていれば、読んで確かめられる。消すのは運用が落ち着いてからでいい。

あわせて読む

SPONSORED

まとめ

移行で迷うのは、どこから手を付けるかだ。入口から順に、画面を最後にという順番にしてから、作業が止まらなくなった。

途中で止めても使える形を保つのが大事で、そのためには一度に動かす範囲を小さくするしかない。

新しい記事が出たら、ブラウザの通知でお知らせします。

メールアドレスの登録は要りません。いつでも止められます。

AUTHOR

北海道のWEB屋

北海道を拠点に、Web業界14年・サポート実績1,000件以上。WordPressの復旧、サーバー移転、独自ドメインとメールの設定、PHP・JavaScriptの修正まで対応します。相談と見積もりは無料です。

SPONSORED

関連記事

RELATED