テストのない古いコードを前に、いきなり書き換えず「まず守りを固めてから直そう」と落ち着いて準備している一人保守のエンジニア

テストがないコードに手を入れる前にやる安全策|一人保守の現場で

「ここ、直しておいて」と渡されたのは、誰が書いたのかも分からない古いコード。 コメントはほとんどなく、関数は長く、似た処理があちこちに散らばっている。そして当然のように、テストはひとつもない。

直したい場所は分かる。でも、その一行を変えたら、どこか別の場所が静かに壊れるんじゃないか——そう思うと、手が止まりますよね。

この怖さは、あなたの技術が足りないからではありません。 「壊れたらすぐ気づける仕組み」がないまま、本番で動いているコードを触らされている——ただそれだけのことです。テストがあるコードなら、変なところを触った瞬間に赤くなって教えてくれます。それがない場所では、誰だって慎重になります。

この記事では、テストがないコードに手を入れる前に、「壊さずに直す」ための守りを先に用意するやり方を、一人保守の現場目線で一緒に整理していきます。一度に全部そろえなくて大丈夫です。まず次の1回ぶんの改修から始められる、小さな備えからお話しします。

結論:テストがないコードは、いきなり直さない。先に「壊れたら気づける状態」を作ってから触ります。やることは4つ。①触る範囲をできるだけ小さく区切る②今の動き(入力と出力)を記録して"正解"を控える③本番のコピー(検証環境)で先に試す④変えたら、控えた"正解"と見比べて確かめる。まずは「今このコードが何を返しているか」を1パターン記録するところから始めます。

言語や構成(PHP・Java・社内システム・WordPressなど)によって、できる備えの種類は変わります。 この記事の考え方を出発点に、自分の環境で取れる手段に読み替えてください。本番に反映する前には、必ず検証環境や公式情報で確認しましょう。

なぜ「テストがないコード」はこんなに怖いのか

手が止まるのは、臆病だからではありません。理由がちゃんとあります。まずそこを言葉にしておくと、対策が見えてきます。

どれも「気をつけて直す」だけでは消えない怖さです。だからこそ、直す前に守りを用意することが効いてきます。順番に見ていきましょう。

安全策の全体像:直す前に「守り」を3つ用意する

テストがないコードを直す前に「範囲を区切る」「今の動きを記録する」「コピーで試す」の3つの守りを用意する流れを示した図
いきなり直さず、3つの守りを先に置く。それから本体に手を入れる

テストがないコードを安全に直すコツは、いきなり本体をきれいにしようとしないことです。先に、こわごわ触るための「守り」を3つ用意します。

  1. 触る範囲を、できるだけ小さく区切る:システム全体を相手にしない。今回直す一箇所と、そこに関係する入口・出口だけに集中します。
  2. 今の動きを記録して、"正解"として控える:直す前のコードに、いくつかの入力を与えて、どんな出力を返すかを書き留めておく。これが「変えても壊れていないか」を確かめる物差しになります。
  3. 本番のコピー(検証環境)で先に試す:いきなり本番で直さない。同じデータ・同じ設定のコピーで動かして、おかしくなっていないかを確認してから本番に入れます。

この3つがそろってから、ようやく本体に手を入れます。順に、もう少し具体的に見ていきます。

守り①:触る範囲を、小さく区切る

古いコードを前にすると、「ついでにここも直したい」「いっそ全部書き直したい」という気持ちが湧きます。でも、テストがない状態での大きな書き換えは、いちばん事故を起こします。

まずやるのは、今回の改修で「変える場所」と「変えない場所」の線を引くことです。

範囲が小さいほど、影響も追いやすく、戻すのも簡単です。「全部きれいにしたい」気持ちは大切ですが、今日守るべきは"動いている本番"。改善は、安全に直せる足場ができてから少しずつで大丈夫です。

守り②:今の動きを「記録」して、正解を控える

ここが、テストがないコードを直すときのいちばんのコツです。 やりたいのは、「直す前のコードが、今どう動いているか」をそのまま記録すること。これがあれば、直したあとに「前と同じ動きか」を見比べられます。

これは、正しい仕様を当てる作業ではありません。今の動き(正しかろうがバグだろうが)を、そのまま"現状の正解"として固定する作業です。専門的には「現状の振る舞いを写し取るテスト(characterization test)」と呼ばれますが、難しく考えなくて大丈夫。やることはシンプルです。

記録のしかた(テストの仕組みがなくてもできる)

  1. 直す対象に、代表的な入力をいくつか用意する(よくある値・空っぽ・極端な値・エラーになりそうな値など)。
  2. 直す前のコードにそれを通して、返ってきた出力を控える。画面の表示、戻り値、保存されたデータ、出力ファイルなど、結果が分かるものを記録します。
  3. テストを書ける環境なら、その入力と出力をそのままテストコードにする。書けない場合は、入力と出力の組を作業メモや表に書き留めるだけでも十分役立ちます。

記録できる「出口」を増やす小ワザ

中身が複雑で出力が見えにくいときは、一時的にログを仕込んで、何が起きているかを見える化します。関数の入り口で受け取った値、出口で返す値をログに出しておくと、現状の動きを記録しやすくなります(このログは、改修が終わったら消すか、調査用として整理して残します)。

ここまでやると、「直したら、記録した出力と見比べる」という確かめ方ができるようになります。当てずっぽうで"動いてそう"を卒業して、"前と同じだと確かめた"に変わる——これが守り②の効果です。

AIに手伝わせるなら(たたき台として)

入力パターンや記録用テストを一から書くのがしんどいときは、対象のコードをAIに読ませて、characterization testのたたき台や、抜けがちな入力(空・極端な値・エラー系)の候補を出させる選択肢もあります。守り①で挙げた「どこから呼ばれているか」の洗い出しや、変更前後の差分レビューも、見落としの当たりをつける相棒として使えます。ただし大前提として、AIが書いたテストが緑になっても「正しい」わけではありません。それは「AIが想像した動き」をなぞっているだけかもしれず、現状の振る舞いを写し取れているとは限りません。生成された入力・出力は直す前の本物のコードに通して値を取り直し、機微な情報は渡す前に伏せ、緑か赤かは人が見て納得してから採用してください。AIは下書きを速くする道具で、何が正解かを決めるのはこちら側です。

守り③:本番のコピーで、先に試す

記録した正解を手に、いよいよ直していきます。でも、最初の試し打ちは絶対に本番でやらない。本番と同じデータ・設定のコピー(検証環境)で動かします。

「検証環境を用意する余裕がない」という現場も多いですよね。それでも、せめて本番とは別の場所で一度通してから本番に入れる——この一手間が、取り返しのつかない事故をいちばん多く防ぎます。どうしても本番でしか試せないときは、後述の「戻せる形で出す」を必ずセットにしてください。

具体例:よくある3つの「触って壊した」場面

現場では、こんな形で事故が起きがちです。直し方とセットで見てみましょう。

どれも「もっと慎重に」では防ぎきれず、範囲を区切る・現状を記録する・コピーで試す・戻せる形で出すのどれかがあれば救えたものばかりです。

影響:守りを先に置くと、何が変わるか

テストがないコードを「守ってから直す」やり方に変えると、結果だけでなく日々の気持ちが変わります。

逆に、守りなしで直し続けると、いつか「自分が変えた覚えはないのに壊れている」という、原因の見えない夜が来ます。先に物差しを用意しておくことが、未来の自分を助けます。

明日やること:1パターンだけ「今の動き」を記録する

いきなりテストを全部そろえなくて大丈夫です。明日できる、いちばん小さな一歩はこれです。

  1. 次に直す予定のコードを1つ思い浮かべ、今回触る範囲を一文で書き出す(「○○関数の、××の計算部分だけ」)。
  2. そのコードがどこから呼ばれているかを、検索(grep)でざっと洗い出す。影響しそうな場所を控える。
  3. 代表的な入力を1つ選び、直す前のコードに通して、返ってくる出力を1つ記録する。見えにくければ一時的にログを仕込む。
  4. 直したあと、その入力を通して記録した出力と見比べる。同じならひと安心、違えば原因を確認する。
  5. できれば本番とは別の場所で一度通してから、本番に入れる。すぐ戻せるよう、変更前のファイル・設定は退避しておく。

たった1パターンの記録でも、「壊れていないか分からない」が「前と同じだと確かめた」に変わります。完璧な備えを一気に作ろうとせず、まず次の1改修から始めましょう。

「テストがないコードを直す前」チェックリスト

手を入れる前に、守りがそろっているかを確かめる項目です。コピーして、自分の改修に当ててみてください。

全部に○が付かなくても大丈夫です。1つでも「守り」を足せたら、それだけで次の改修の怖さはぐっと下がります。

よければ、こちらも

テストがないコードの改修は、影響範囲の調査・データ修正・リリースの戻し方・引き継ぎと地続きの仕事です。あわせて整えておくと、いざという時に落ち着けます。

守りを用意できて、古いコードにも落ち着いて手を入れられるようになった一人保守のエンジニア

テストのないコードが怖いのは、あなたが慎重すぎるからではありません。気づける仕組みがないまま、大事な本番を任されているからです。 今日は、次に直すコードの「今の動き」を1パターン記録するだけで十分です。その小さな物差しが、「壊したかも」という不安から、あなたを少しずつ解放してくれます。

ほかの実務ヒントは記事一覧からどうぞ。保守運用の小さな備えを、メールでも少しずつお届けしています。

関連用語