移行をやめて作り直したほうが安い場合の見分け方
移行が常に正解ではありません。どこを見て判断したかを書きます。

この記事の結論
- 移行のほうが安い、は思い込みのことがある
- 判断材料は行数ではなく、分岐と仕様の所在
- 迷ったら一部だけ移して測る
- 移行のほうが安い、は思い込みのことがある
- 判断材料は行数ではなく、分岐と仕様の所在
- 迷ったら一部だけ移して測る
古いシステムは移行するものだと決めてかかっていたが、作り直したほうが安い場合がある。見分け方を整理した。
行数では判断できない
1万行だから大変、3千行だから簡単、という比例はしなかった。
3千行でも、分岐が深く絡んでいれば読むだけで何日もかかる。逆に1万行でも、同じ形の画面が50枚並んでいるだけなら作業は軽い。
見るのは量ではなく、形がそろっているかどうかだ。
仕様がどこにあるか
いちばん効いた判断材料がこれだった。
- 仕様書がある → 作り直しが現実的
- 仕様書は無いが、動きを知っている人がいる → どちらでもよい
- 誰も知らず、コードだけが正解 → 移行一択
3番目の場合、作り直すと何を作ればいいか誰にも分からない。コードを読んで仕様を起こす作業が発生し、それは移行と同じ手間になる。
分岐の数を数える
走査スクリプトに、if・else・switch・三項演算子の数を数える処理を足した。
分岐の数 / 行数 = 分岐密度この密度が高いファイルは、読み解くのに時間がかかり、テストも書きにくい。密度の高いファイルが全体の何割かで、作業量の見当がついた。
外部とつながっている数
決済、外部API、メール送信、バッチ。つながり先が多いほど作り直しは重い。
移行なら、つながり方はそのまま持っていける。作り直すと相手先の仕様を全部調べ直すことになる。相手が古いAPIだと、資料が残っていないこともある。
AIに判断させない
コードを渡して「移行と作り直し、どちらがよいか」と聞くと、それらしい答えは返る。
しかしAIは予算も納期も社内の事情も知らない。返ってくるのは一般論で、判断材料にはなるが判断にはならない。
使い方としては、「このコードを読んで、仕様として何を実現しているか箇条書きにして」のほうが役に立った。判断は人、読解はAI。
そのまま使える形
3つ以上あてはまったら、移行より作り直しのほうが安い可能性が高い。
- いまの仕様を説明できる人がいない — 移行の正解が決められない
- 使われている画面が、全体の2割以下 — 残り8割を移す意味が無い
- 同じ処理が何か所にも書かれている — 移すたびに同じ修正を繰り返す
- データの持ち方そのものが合っていない — 構造を引き継ぐと、作り直しても同じ問題が出る
- 外部との連携が無い、または1つだけ — 作り直しの範囲が閉じている
判断を分けるのは4番だ。コードは書き直せても、データの構造は引きずる。ここが合っていないなら、移行しても楽にならない。
迷ったら一部だけ移す
机上で比べても決まらないときは、1画面だけ実際に移してみることにした。
かかった時間を測り、同じ画面が何枚あるかを掛ける。これがいちばん確からしい見積もりになった。やってみると、想像より速いことも遅いこともある。
作り直しを選ぶ場合の注意
作り直しは、途中で止めると何も残らない。移行は途中で止めても一部が良くなる。
この違いは大きく、予算が確定していない案件で作り直しを選ぶのは危ない。止まった時点で、古いシステムがそのまま残る。
混ぜる選択肢
全部を同じ方針にしなくてよい。
- よく使う画面 → 作り直して使い勝手も直す
- たまにしか使わない管理画面 → 移行だけして、見た目は変えない
- 誰も使っていない画面 → 消す
3番目が意外と多い。アクセスログを見て使われていない画面を先に消すと、対象が減って全体が軽くなる。
古いPHPのまま延命する選択
移行も作り直しもせず、サーバーのPHPだけ古いまま使い続ける現場もある。短期的には最も安いが、代償がはっきりしている。
- セキュリティ更新が止まり、脆弱性が出ても塞がらない
- 対応するサーバーが減り、引っ越し先が限られる
- 触れる人が減り、改修の単価が上がっていく
決めずに先送りした結果としてこうなっている場合が多い。延命を選ぶなら、いつまで延命するかを同時に決める。期限が無い延命は、ただの放置になる。
判断を記録に残す
どちらを選んだかより、なぜそう決めたかを残しておくほうが後で効いた。
移行の途中で「やっぱり作り直したほうが」という話が出たとき、判断の前提が変わったのか、気分の問題なのかを切り分けられる。
あわせて読む
- コードが書けないまま5か月、できるようになったこと — 書けるようにはなっていませんが、できることは増えました。
- 出てきたコードを、どこまで読むか — 全部読むのは無理でした。優先順位をつけた話です。
- 小さな修正を頼むときの、ちょうどよい粒度 — 大きく頼むと戻しづらい。小さすぎると回数が増える。
まとめ
移行か作り直しかは、行数では決まらない。仕様がコードにしか無いなら移行、人や文書にあるなら作り直しも選べる。
決め手が無ければ、1画面だけ移して時間を測る。想像で比べるより、よほど早く答えが出た。
新しい記事が出たら、ブラウザの通知でお知らせします。
メールアドレスの登録は要りません。いつでも止められます。
関連記事
RELATED
レガシー移行でAIが間違えた場所を、全部書き出した
うまくいった話より、どこで間違えたかのほうが役に立つはずなので記録しました。
インデックスの仕組みを図にした。列の並び順で効くかが決まる
インデックスは端から全部見るのをやめる仕組みです。複合インデックスは左端から連続した組み合わせしか使えません。公式の記述…
移行前の動きを記録しておかないと、直ったか分からない
「前はどうだったか」を誰も覚えていません。先に記録を取る方法を決めました。