「動いているなら触るな」—定義、原則の本質とリスク

著者: IT Sectr 公開日: 2026-07-30 読了時間: 9 分

「動いているなら触るな」 — これは、動作するコードはその構造が最適でなくても、やむを得ない理由なしに変更すべきではないという、開発の非書きルールです。この原則は経験的観察に基づいています。すなわち、変更は新たなエラーを導入するリスクがあり、リファクタリングのメリットが投じた労力を負い付けない可能性があります。ウィキペディア (2026)によると、このいいたちは変更管理の保守的戦略として、エンジニアリング、政治、プログラミングで広く使用されています。

まとめ

  • 「動いているなら触るな」 — 客観的な必要性なしに動作するコードを変更しないことを勧める原則。
  • 主な理由 — すべての変更は新たなエラーのリスクをもたらし、現在の問題よりも悪化する可能性がある。
  • 適用すべきタイミング — レガシープロジェクト、緋密な期限、高い安定性が求められるミッションシステムで。
  • 主なリスク — 技術的負債の蓄積とアーキテクチャ改善の機会逃し。
  • バランス — この原則はリファクタリングの必要性を否定するものではなく、各変更へのばらんすたアプローチを求める。

「動いているなら触るな」の原則とは?

「動いているなら触るな」 — 十分な理由なしに動作するコードを変更することに警告を与える経験的ルールです。この原則は簡単な統計に基づいています。即ち、大多数のデフェクトは既存コードの修正中に導入されるということです。

この原則は ドグマ ではありません—不確実実性の下での判断を支援するヒューリスティックと考えられます。コードベースが複雑でもつれあったものであればあるほど、「無害な」変更が誰も期待していないものを壊す可能性が高まります。

Microsoft Corporationの研究 (2024)によると、プロダクションにおける大切なインシデントの約60%が、良い意図で実施されたものの実際のロード条件下で十分にテストされていなかった最近のコード変更に関連しています。

原則の歴史と起源

この言い得 「壊れてないなら修理するな」は、20世紀中午のアメリカのエンジニアリング文化に迅ります。最も早い記録に残る使用例は、アメリカ参議院財政委員会で働き過剰な規制に反対していたバート・ランス (1977) に役ぜられています。

プログラミング において、この原則はハードウェアエンジニアリングから導入されました。そこでは、動作するチップを新しいものと取り換えると不可解な影響をもたらすおそれがありました。ソフトウェアの文脈では、ソフトウェアシステムの複雑性が高まり、レガシーコードが出現するにつれ、この原則は特に広く普及しました。

興味深いのは、プログラミング においてこの原則には、「動いているが、触らないほうがいい」という反面もあります。これがリファクタリングを回避する理由となり、長期的に技術的負債が重大に蓄積されます。コンサルティング会社のサートワークス (2023)によると、約40%のプロジェクトが変更に対する過度な保守的姿勢によりシリウスな問題に直面しています。

原則を適用すべきタイミング

「動いているなら触るな」の原則は、エラーのコストが変更の可能性のメリットを上回る特定の状況で特に重要です。

テストのないレガシープロジェクト

レガシーコード がテストによってカバーされていない場合、どのような変更もロシアンルーレットです。ディベロッパーが変更によって隣接モジュールが壊れていないことを確認できない場合、最も良い策略は動作するコードを触らないことです。例外は、クリティカルなバグもしくはセキュリティ要件だけです。

クリティカルシステム

ダウンタイムが許されない、またはエラーのコストが巨大な システム — 医療ソフトウェア、アビオニクス、金融取引 — では、「動いているなら触るな」が実質的な標準です。すべての変更は多段階の承認とテストを経て実施されます。

緋密な期限

リリース が明日でコードが動作している場合—アーキテクチャを改善しようとしないでください。リリースの機能に直接影響を与えるもののみ変更してください。リファクタリングは次のスプリントに延期しましょう(ただし、忘れないでください)。

状況原則を適用する?代替案
動作するが丑いコードはい (テストがない場合)テストを書き、その後リファクタリング
己知のバグがあるコードいいえテストと一緒にバグを修正
セキュリティ脆弱性いいえ即刻修正
古い依存関係部分的にテストと一緒にアップデート
低性能SLAによるプロファイルし、その後最適化

原則に従うリスク

「動いているなら触るな」の原則を盲目に従うと、絶えないリファクタリングと同じくらいのリスクがあります。主な危険性を検討しましょう。

技術的負債の蓄積

すべてのディベロッパーがこの原則に従うと、コードベースはすぐに古い解決策、応急処理、非最適アルゴリズムの「レイヤーケーキ」になります。いずれは技術的負債が承可回復不可能になり、どの変更にも数週間の分析が必要になります。

遺された最適化

リスクがあるように見える変更が、実際にはパフォーマンスやセキュリティを大幅に向上させることがあります。「動いているなら触るな」の原則は、サーバーコストの削減、ページ読み込みの高速化、セキュリティの向上など、測定可能なメリットをもたらす変更をブロックすべきではありません。

コンピテンシーの喪失

チームが数年間コードの特定部分を触らないと、それがどのように動作するかの理解を失います。キーディベロッパーが离れると、コードはサポート可能性のないレガシーとなります。この原則は、プロジェクトの長期保守性を考慮して適用すべきです。

恋の黄金中道—狂信なきリファクタリング

最適な策略は、原則を盲目に従うのではなく、文脈を考慮しながら意識的に適用することです。リファクタリングは必要ですが、安全に実施する必要があります。

ボーイスカウトルール

プログラミングにおけるボーイスカウトのルールは、「コードを見つけた時よりも浄浔にしておけ」というものです。ディベロッパーがモジュールを変更する場合は、構造を改善すべきですが、合理的な範囲でぁ。すべてを一から書き直す必要はなく、まずは読みにくい変数名を変更し、コメントを追加することから始めましょう。

テストによる保護のもとでのリファクタリング

テストは、「動いているなら触るな」の原則を安全に適用するだけの唯一の方法です。コードがテストによってカバーされていれば、どのようなリファクタリングでも予測可能です。ディベロッパーがコードを変更し、テストを実行し、何が壊れたか確認すればいいのです。テストなし—触らない。テストあり—自信をもってリファクタリングする。

kotlin
// 例: テストカバレッジ下の安全なリファクタリング
class PriceCalculator {
    fun calculatePrice(basePrice: Double, discount: Double): Double {
        // 古いが動作するコード
        return basePrice - (basePrice * discount / 100.0)
    }
}

// リグレッションを防ぐテスト
class PriceCalculatorTest {
    fun testCalculatePrice() {
        val calc = PriceCalculator()
        assertEquals(90.0, calc.calculatePrice(100.0, 10.0))
    }
}

このは正しいアプローチを示しています。まずテスト、その後リファクタリングです。テストがパスすれば変更は安全です。「動いているなら触るな」は、「テストで動いていれば、勇気をもってリファクタリングすればいい」と変窮します。

実践からの実例

「動いているなら触るな」が救いになった事例と、破壊的だった事例を見てみましょう。

救いになった事例: Y2K類似の問題

あるディベロッパーが、日付処理コードがYYYYではなくDD/MM/YY形式を使用していることを発見しました。コードは2000年から2025年まで正しく動作していました。「修正」したい気持ちはありましたが、コメントを追加するだけにとどめ、コードはそのままにしました。2026年、会社がシステムをアップデートし、新しいソリューションで世紀を正しく処理するようになりました。早すぎる変更は、動作するロジックを壊していたでしょう。

破壊的だった事例: 「改善」によるデータ喪失

あるエンジニアが、古いが動作するデータインポートコードを近代的なライブラリで置き換えて「改善」することを決定しました。古いライブラリがドキュメント化されていない特定のエッジケースを処理していたことを考慮していませんでした。リリース後、大量のデータが喪失しました。「動いているなら触るな」の原則が破られ、エラーのコストはチームの2週間の回復作業になりました。

よくある質問

「動いているなら触るな」の原則はいつでも良いですか?

いいえ、原則を盲目に従うと、技術的負債が蓄積し、プロジェクトの柔軟性が喪失します。最適なアプローチは、変更のリスクが可能性のメリットを上回る状況で意識的に適用することです。各ケースを個々に評価することが重要です。

どのような場合に原則を破る必要がありますか?

原則の破壊は、セキュリティ脆弱性が発見された場合、ユーザーデータに影響を与えるクリティカルなバグが発見された場合、および己知の脆弱性をもつ依存関係をアップデートする必要がある場合に必要です。これらの場合、何もしないリスクが変更のリスクを上回ります。

レガシーコードをリスクなしでリファクタリングするには?

わずかな安全な方法は、まずコードをテストでカバーし、その後リファクタリングを小さなステップで実施することです。テストの保護がなければ、「動いているなら触るな」を厳守すべきです。

経験あるディベロッパーがこの原則をよく破るのはなぜですか?

経験あるディベロッパーは意識的に原則を破ります。現在の実装がもたらす明らかでない影響—将来のバグ、パフォーマンスの瓶頸、スケーラビリティの問題を見ているからです。他の判断は、変更への恐れではなく、経験に基づいています。

安定性と開発のバランスをどうやって取れますか?

バランスはテストとコードレビューの文化によって達成されます。コードがテストでカバーされていれば、リファクタリングは安全です。そうでなければ、変更は最小限必要に留めべきです。「動いているなら触るな」は、変更を禁じるものではなく、意識を促すものです。

まとめ

  • 「動いているなら触るな」 — やむを得ない理由なしに動作するコードを変更することに警告を与える経験的原則。
  • 起源 — 20世紀中午のエンジニアリング文化から、プログラミングでリスク管理ヒューリスティックとして普及。
  • 適用すべきタイミング — テストのないレガシープロジェクト、クリティカルシステム、緋密な期限下で。
  • 主なリスク — 技術的負債の蓄積、柔軟性の喪失、最適化機会の逃し。
  • 黄金中道 — 「テストで動いていれば、勇気をもってリファクタリングする。」テストは安全な変更の唯一の保証。
  • ボーイスカウトルール — コードを見つけた時よりも浄浔にしておけ。小さな改善でも意味がある。
  • 推奨: この原則をリファクタリング避けの口実に使わないこと。各変更のリスクとメリットを評価しながら、意識的に適用すること。

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください