
システム構成
レガシーシステム
Legacy System
変更が困難になり、中身を分かる人も限られて、事業の足かせになったシステムです。保守費の膨張や、稼働させている基盤のサポート終了を伴うことが多いです。
ぎじゅつてきふさい / Technical Debt
ソフトウェアの作りに改善の余地が残存し、以後の変更に余分な手間がかかる状態を借金にたとえた言葉です。速さのために意図して負うことも、知識不足や運用後の発見で生じることもあります。

技術的負債はソフトウェアの内部の作りに不備が残り、機能の追加や修正で本来より多くの手間を要する状態を借金になぞらえた言葉です。後回しにした手直しが元本にあたり、手直しを済ませるまで変更のたびに余分にかかる手間が利子にあたります。
増築を重ねて図面と実物が合わなくなった建物に近いです。住むぶんには困りませんが、壁を1枚動かすたびに配管や配線の調査から始めます。
利用者に表示される画面や機能が正常に動作していても、負債は蓄積します。事業側は開発の遅れや不具合の増加として表れて初めて気づきます。
把握しにくい手直しの費用を、元本と利子という事業側と同じ尺度で話すためのたとえです。早めに作りを改修して返済すれば開発は速くなります。返済せずに放置すると利子がかさみ、開発全体が身動きを取れなくなります。理解が深まるたびに作りを改修していく前提の言葉で、雑なコードを記述してよいという意味ではありません。作りを改善する作業はリファクタリングと呼びます。
利子は手を入れる箇所でしか発生しません。変更の多い箇所の負債ほど高くつき、触らない箇所の負債は放っておいても損が出にくいです。この性質はお金の借金と違うため、手直しする箇所は変更の多さで選定します。
負債は意図して負ったかどうかと、慎重だったか無謀だったかの2軸で4つに分類できます。組み合わせごとの場面と扱いは次のとおりです。
| 意図 | 慎重さ | よくある場面 | 事業側の扱い |
|---|---|---|---|
| 意図した | 慎重 | 発売日に間に合わせるため手直しを後に回し、返済の時期も定めておく | 事業判断として正当になりうる |
| 意図した | 無謀 | 時間がないことを理由に設計を考えずに開発する | 多くの場合すぐに開発が遅くなり、得られる時間より失う時間が大きい |
| 意図していない | 無謀 | 設計の知識がないまま開発し、負債だと認識していない | 開発体制そのものの問題と位置づける |
| 意図していない | 慎重 | 開発して運用した後で、本来あるべき作りが分かる | 優れたチームでも避けられない |
手抜きで生まれる負債もありますが、すべてではありません。発売を優先して意図的に負う負債もあれば、開発して運用した後で初めて分かる負債もあります。負債の有無で開発者を評価せず、どう負ってどう返済しているかを重視します。
コードを記述する速度は向上します。一方で、生成されたコードを十分に確認しないまま取り込む開発者が増え、負債は蓄積しやすくなります。GitClearが2020〜2024年の約2億行の変更を分析した調査は、生成AIの利用が広がった時期の変化を示しています。既存のコードを複製した行の割合は2021年の8.3%から2024年の12.3%に増加し、既存のコードを整理し直した行は25%から10%未満に減少しました。同じ処理が複数の箇所にあると、変更のたびに修正する箇所も増えます。生成AIを活用する開発でも、返済の時間は別に確保します。
再構築した直後は負債が減少します。それでも事業に合わせてシステムを変更し続ける限り、新しい負債は蓄積していきます。継続的に少しずつ返済する仕組みがないまま再構築すると、数年後に同じ状態へ回帰します。
目安として開発時間の1〜2割を、機能開発と並行して継続的に充てる形から着手します。数か月間一括して機能開発を止めると事業への影響が大きく、継続できません。自動テストの追加は返済の一部でもあるため、テストの工数と別に積みません。
次のような兆候が表れているなら、割合を3割前後まで引き上げることを検討します。いずれも目安です。
依頼を受けるときは次の3点を示してもらいます。
改修の中身は自動テストの追加、古い外部プログラムの更新、重複した処理の整理などが中心です。テストのない箇所の手直しは別の箇所に不具合を生みやすいため、テストを先に追加します。開発を外注している場合は、保守の報告に手直しへ充てた工数を含めてもらいます。
返済せずに放置してよい負債もあります。次の箇所は手直ししても費用を回収できないことが多いです。
売れるかどうかが分かる前の段階なら、負債を負ってでも早く市場に投入する選択も成り立ちます。ただしセキュリティの修正を適用できない古い外部プログラムを使い続ける状態は、どの場面でも放置しません。
多くの場合は少しずつ改修します。再構築は規模によって数か月から数年かかり、その間は旧システムの保守と、新旧の両方への機能追加が重なります。
再構築を検討する余地があるのは、次のような場合に限られます。
再構築する場合も一度に全体を置換せず、機能単位で順に新しい仕組みへ移行します。
負債の量そのものを正確に測る方法はありません。代わりに、負債が生む余分な手間、つまり利子の側を四半期ごとに並べ、悪化の傾きを確認します。
前の2つはDORA(DevOps Research and Assessment)が開発の速さと安定性を測る指標のうち、変更のリードタイムと変更失敗率にあたります。
返済の後にこれらが改善したかを確認すれば、返済に充てた時間が妥当だったかも分かります。コードを機械的に解析するツールが算出する負債の推定時間は、修正する箇所の優先順位づけには活用できますが、予算を決定する数字としては粗いです。
事業の課題や技術的な悩みなどどんなことでもお聞かせください