目次
  
          目次
        
          💡 開発の究極の目標って?
        
          それには何が必要?
        
          🏗 設計(アーキテクチャ)ってなんのためにある?
        
          😱 設計しないとどうなる?
        
          🧟♂️ レガシーコードと技術的負債
        
          レガシーコードとは?
        
          技術的負債とは?
        
          🧨 なぜ設計が崩れるの?
        
          まとめ
        
      💡 開発の究極の目標って?
    
  
    
      
        
          
            先輩:
          
        
      
    
  
  
    
      
        
          
            ソフトウェア開発のゴールって何だと思う?
          
        
      
    
  
    
  
    
  
    
      
        
          
            俺:
          
        
      
    
  
  
    
      
        
          
            うーん、機能をたくさん作ることですか…?
          
        
      
    
  
    
  
    
  
    
      
        
          
            先輩:
          
        
      
    
  
  
    
      
        
          
            惜しい!
          
        
      
    
  
  
    
      
        
          
            最終的には“コストと時間を最小にすること”
          
        
      
    
  
  
    
      
        
          
            なんだ。
          
        
      
    
  
    
  
それには何が必要?
- 高速に開発ができること
 - 変更がしやすいこと
 
    
  
    
      
        
          
            俺:
          
        
      
    
  
  
    
      
        
          
            あー、後から直しにくいと時間かかりますもんね
          
        
      
    
  
    
  
    
  
    
      
        
          
            先輩:
          
        
      
    
  
  
    
      
        
          
            そう、それを支えるのが
          
        
      
    
  
  
    
      
        
          
            設計
          
        
      
    
  
  
    
      
        
          
            ってわけ
          
        
      
    
  
    
  
🏗 設計(アーキテクチャ)ってなんのためにある?
    
  
    
      
        
          
            先輩:
          
        
      
    
  
  
    
      
        
          
            ずばり、変更しやすくするためにあるよ
          
        
      
    
  
    
  
- 設計がうまくいってる = 労力をかけずに変更できる
 - 設計が悪い = 触るたびに壊れる、直すのに時間がかかる
 
    
  
    
      
        
          
            俺:
          
        
      
    
  
  
    
      
        
          
            じゃあ、
          
        
      
    
  
  
    
      
        
          
            変更が楽かどうか
          
        
      
    
  
  
    
      
        
          
            で設計の良し悪しが分かるんだ(
          
        
      
    
  
  
    
      
        
          
            変更容易性
          
        
      
    
  
  
    
      
        
          
            )
          
        
      
    
  
    
  
    ☝
  
  
    
  
    
      
        
          
            開発・保守の中で起きるソフトウェアの変更を楽にしたいという気持ちによって生まれるのが設計
          
        
      
    
  
    
  
😱 設計しないとどうなる?
- 処理と処理が依存し合っていて一箇所直したら別のとこが壊れた
 - どこを読めばいいかわからない
 - 変更による影響範囲が予測しにくく、バグを埋め込みやすい
 - 簡単な修正に数日かかる…
 
    
  
    
      
        
          
            俺:
          
        
      
    
  
  
    
      
        
          
            あるある…前触ったコードが自分の敵に見えてくるやつ
          
        
      
    
  
    
  
    
  
    
      
        
          
            先輩:
          
        
      
    
  
  
    
      
        
          
            まさにそれが
          
        
      
    
  
  
    
      
        
          
            技術的負債
          
        
      
    
  
  
    
      
        
          
            ってやつだ
          
        
      
    
  
    
  
🧟♂️ レガシーコードと技術的負債
レガシーコードとは?
- 変更・拡張が難しく壊れやすいコード
 
技術的負債とは?
- 後で直さなきゃいけない ツケ、 将来的に修正や変更が必要な状態
 
📉 総務省のレポートによると、技術的負債による損失は 年間12兆円 (「2025年の崖」)
- 総務省のDXレポートでの発表
 - https://www.meti.go.jp/shingikai/mono_info_service/digital_transformation/pdf/20180907_01.pdf
 
        
        
    
  
    
      
        
          
            俺:
          
        
      
    
  
  
    
      
        
          
            これ、放っておいたら大変なことになりそうですね…モチベーションも下がりそう
          
        
      
    
  
    
  
🧨 なぜ設計が崩れるの?
        
- 
        
  
    
      
        
          
            優れた・クリーンな・うまく設計されたコードの重要性を理解していない
          
        
      
    
  
        
- 
        
  
    
      
        
          
            〆切まで時間がないので、とりあえず動くものを作ろうという気持ちになる
          
        
      
    
  
        
- 「とりあえずモノを完成させて、後でコードを綺麗にするか」と言って、結局時間がなくやらない
 
 - 
        
  
    
      
        
          
            競合に追いつくためには機能を追加し続けなければならない
          
        
      
    
  
        
- 今、この間にも競合はどんどん先を行っている
 - 後からコードを綺麗にする時間なんてない
 
 
 - 
        
  
    
      
        
          
            〆切まで時間がないので、とりあえず動くものを作ろうという気持ちになる
          
        
      
    
  
        
 - 
        
  
    
      
        
          
            崩壊したコードを書けば短期的には開発速度が上がると信じている
          
        
      
    
  
        
- 最初はそれでいいかもしれないが…
 - どんどん変更が難しくなり、長期的には開発速度が下がる
 
 
    
  
    
      
        
          
            先輩:
          
        
      
    
  
  
    
      
        
          
            最初はいいけど、どんどん
          
        
      
    
  
  
    
      
        
          
            沼
          
        
      
    
  
  
    
      
        
          
            になる
          
        
      
    
  
    
  
    
  
    
      
        
          
            俺:
          
        
      
    
  
  
    
      
        
          
            あー、
          
        
      
    
  
  
    
      
        
          
            技術的負債のスパイラル
          
        
      
    
  
  
    
      
        
          
            だ
          
        
      
    
  
    
  
    
  
    
      
        
          
            先輩:
          
        
      
    
  
  
    
      
        
          
            そうそう。いったん崩れ始めると、みんな「もうこのコードは手遅れだ」って思って、さらに雑に書くようになる。まさに負のスパイラルだね。
          
        
      
    
  
    
  
まとめ
          
          
  
    
      
        
          
            設計(アーキテクチャ)の目的は変更容易なシステムを作ることにある
          
        
      
    
  
          
        
          
          
  
    
      
        
          
            設計が崩れると技術的負債が蓄積され、開発速度が低下する
          
        
      
    
  
          
        
          
          
  
    
      
        
          
            設計をしっかりすることで、長期的なコストと時間を最小化できる