ビジネスサイドのための IT 用語集/開発手法・プロセス

技術的負債とは

ぎじゅつてきふさい / Technical Debt

ソフトウェアの作りに改善の余地が残存し、以後の変更に余分な手間がかかる状態を借金にたとえた言葉です。速さのために意図して負うことも、知識不足や運用後の発見で生じることもあります。

技術的負債

技術的負債とは

技術的負債はソフトウェアの内部の作りに不備が残り、機能の追加や修正で本来より多くの手間を要する状態を借金になぞらえた言葉です。後回しにした手直しが元本にあたり、手直しを済ませるまで変更のたびに余分にかかる手間が利子にあたります。

増築を重ねて図面と実物が合わなくなった建物に近いです。住むぶんには困りませんが、壁を1枚動かすたびに配管や配線の調査から始めます。

利用者に表示される画面や機能が正常に動作していても、負債は蓄積します。事業側は開発の遅れや不具合の増加として表れて初めて気づきます。

借金にたとえる理由

把握しにくい手直しの費用を、元本と利子という事業側と同じ尺度で話すためのたとえです。早めに作りを改修して返済すれば開発は速くなります。返済せずに放置すると利子がかさみ、開発全体が身動きを取れなくなります。理解が深まるたびに作りを改修していく前提の言葉で、雑なコードを記述してよいという意味ではありません。作りを改善する作業はリファクタリングと呼びます。

利子は手を入れる箇所でしか発生しません。変更の多い箇所の負債ほど高くつき、触らない箇所の負債は放っておいても損が出にくいです。この性質はお金の借金と違うため、手直しする箇所は変更の多さで選定します。

負債ができる経緯

負債は意図して負ったかどうかと、慎重だったか無謀だったかの2軸で4つに分類できます。組み合わせごとの場面と扱いは次のとおりです。

意図 慎重さ よくある場面 事業側の扱い
意図した 慎重 発売日に間に合わせるため手直しを後に回し、返済の時期も定めておく 事業判断として正当になりうる
意図した 無謀 時間がないことを理由に設計を考えずに開発する 多くの場合すぐに開発が遅くなり、得られる時間より失う時間が大きい
意図していない 無謀 設計の知識がないまま開発し、負債だと認識していない 開発体制そのものの問題と位置づける
意図していない 慎重 開発して運用した後で、本来あるべき作りが分かる 優れたチームでも避けられない

意図して負う利点

  • 市場に早く投入し、売れるかどうかを先に確認できる
  • 作り込みの一部を後に回して、定められた納期を守れる
  • 要件が確定する前の作り込みを抑え、後で破棄する部分への費用を回避できる

コストとリスク

負債を放置したときの損失

  • 同じ規模の機能追加にかかる期間が延び、見積もりも外れやすくなる
  • ある箇所の修正が別の箇所に不具合を生み、リリース後の不具合や障害が増加する
  • 特定の担当者しか触れない箇所が増加し、退職や担当交代で保守が停滞する
  • 古いライブラリや基盤の更新を先送りすると、セキュリティの修正を適用できなくなる
  • 新しく加わった開発者や引き継いだ開発会社が全体を把握するまでの期間が延びる
  • 開発者の時間の多くが回避策に取られる。Stripeが2018年に公表した開発者調査の報告書では、回答者は開発者の週41.1時間の労働のうち平均13.5時間を技術的負債への対処に費やしていると見積もった。数値は回答者の見積もりで、調査は生成AIの普及前に実施された
  • 開発を外注していると返済の工数は保守費や改修の見積もりに紛れ、発注側は改修のたびに見積もりが膨らむ形でしか把握できない

負債の返済にかかる費用

  • 自動テストのない箇所の手直しは、それ自体が新しい不具合を生みやすい
  • 返済している間は新機能の開発が遅れ、その期間の機会損失が生じる

よくある誤解

技術的負債はエンジニアの手抜きの結果

手抜きで生まれる負債もありますが、すべてではありません。発売を優先して意図的に負う負債もあれば、開発して運用した後で初めて分かる負債もあります。負債の有無で開発者を評価せず、どう負ってどう返済しているかを重視します。

生成AIでコードを作成すれば負債は溜まりにくい

コードを記述する速度は向上します。一方で、生成されたコードを十分に確認しないまま取り込む開発者が増え、負債は蓄積しやすくなります。GitClearが2020〜2024年の約2億行の変更を分析した調査は、生成AIの利用が広がった時期の変化を示しています。既存のコードを複製した行の割合は2021年の8.3%から2024年の12.3%に増加し、既存のコードを整理し直した行は25%から10%未満に減少しました。同じ処理が複数の箇所にあると、変更のたびに修正する箇所も増えます。生成AIを活用する開発でも、返済の時間は別に確保します。

再構築すれば負債はなくなる

再構築した直後は負債が減少します。それでも事業に合わせてシステムを変更し続ける限り、新しい負債は蓄積していきます。継続的に少しずつ返済する仕組みがないまま再構築すると、数年後に同じ状態へ回帰します。

判断の問い

エンジニアから技術的負債を返す時間がほしいと言われた。開発時間のどれくらいを割けばよいか?

目安として開発時間の1〜2割を、機能開発と並行して継続的に充てる形から着手します。数か月間一括して機能開発を止めると事業への影響が大きく、継続できません。自動テストの追加は返済の一部でもあるため、テストの工数と別に積みません。

次のような兆候が表れているなら、割合を3割前後まで引き上げることを検討します。いずれも目安です。

  • 同じ規模の機能追加にかかる期間が、半年〜1年前と比較して1.5倍前後まで延びている
  • リリース後の手戻りや緊急の修正が毎月のように発生している
  • 特定の担当者しか触れない箇所があり、その人の不在で開発が停滞する

依頼を受けるときは次の3点を示してもらいます。

  • どの箇所を改修するか
  • その結果として何が速くなるか
  • 何の障害が減少するか

改修の中身は自動テストの追加、古い外部プログラムの更新、重複した処理の整理などが中心です。テストのない箇所の手直しは別の箇所に不具合を生みやすいため、テストを先に追加します。開発を外注している場合は、保守の報告に手直しへ充てた工数を含めてもらいます。

返済せずに放置してよい負債もあります。次の箇所は手直ししても費用を回収できないことが多いです。

  • 検証が終了すれば破棄する試作のコード
  • 廃止や移行が確定している機能
  • 今後ほとんど改修しない安定した箇所

売れるかどうかが分かる前の段階なら、負債を負ってでも早く市場に投入する選択も成り立ちます。ただしセキュリティの修正を適用できない古い外部プログラムを使い続ける状態は、どの場面でも放置しません。

負債が溜まったシステムは再構築すべきか、少しずつ改修すべきか?

多くの場合は少しずつ改修します。再構築は規模によって数か月から数年かかり、その間は旧システムの保守と、新旧の両方への機能追加が重なります。

再構築を検討する余地があるのは、次のような場合に限られます。

  • 使用している言語や基盤の提供元による保守が終了し、更新の手段がない
  • 業務の前提が大きく変化し、既存の作りの上に積み増すと高くつく
  • 少しずつの手直しを1年ほど続けても、変更にかかる期間や障害の件数が改善しない

再構築する場合も一度に全体を置換せず、機能単位で順に新しい仕組みへ移行します。

技術的負債がどれだけあるかを数字で把握するにはどうすればよいか?

負債の量そのものを正確に測る方法はありません。代わりに、負債が生む余分な手間、つまり利子の側を四半期ごとに並べ、悪化の傾きを確認します。

  • 変更に着手してから本番に反映されるまでの期間
  • リリース後すぐに修正や切り戻しが必要になった割合
  • 障害の件数と、復旧までにかかった時間
  • 開発者が回避策や原因の調査に費やした時間の割合。値は本人の申告による

前の2つはDORA(DevOps Research and Assessment)が開発の速さと安定性を測る指標のうち、変更のリードタイムと変更失敗率にあたります。

返済の後にこれらが改善したかを確認すれば、返済に充てた時間が妥当だったかも分かります。コードを機械的に解析するツールが算出する負債の推定時間は、修正する箇所の優先順位づけには活用できますが、予算を決定する数字としては粗いです。

公開日
2026.10.21
更新日
2026.10.21

お問合せ

事業の課題や技術的な悩みなどどんなことでもお聞かせください

お問合せ