今後のAI時代に重要な内容として、DevOpc とKubernetesに続いて、「CD/DI設計」についても説明が必要な事が判った。そこで‥‥
「CD/DI設計」という表現は、DevOpsやソフトウェア設計の分野では通常、次の2つの意味の組み合わせを指すことが多い。
• CD = Continuous Delivery(継続的デリバリー)または Continuous Deployment(継続的デプロイ)
• DI = Dependency Injection(依存性注入)
それぞれ本質から説明すると
① CD(Continuous Delivery / Deployment)設計とは
ソフトウェアを自動で安全に本番環境へ届ける仕組みの設計
従来の方法(問題が多い)
• エンジニアが手動で
• ビルドして
• サーバーにコピーして
• 手動で起動
→ ミスが多い
→ 更新が遅い
→ 障害が起きやすい
CD設計の考え方(自動化)
変更するとコード修正→自動ビルド→自動テスト→自動デプロイ→本番反映‥‥すべて自動。
具体例として
GitHubにコードをpushすると
• 自動でテスト
• 問題なければ
• 自動でクラウド(例:Amazon Web Services)に反映
人間が操作しなくても動く。
CD設計で決める内容
• どのタイミングでデプロイ(開発したソフトウェアやWebアプリケーションを本番環境(サーバー)へ配備・設置し、ユーザーが利用可能な状態)するか
• テストの種類
• 障害時のロールバック(変更を取り消して確定前の状態に戻す)方法
• 本番反映の条件
これはDevOpsの中核である。
② DI(Dependency Injection)設計とは
ソフトウェアの部品同士の結合を弱くして、柔軟で保守しやすくする設計手法
悪い設計(DIなし)
プログラムA内部で直接Bを作る
• Bを変更するとAも変更が必要
• テストしにくい
• 再利用しにくい
良い設計(DIあり)
プログラムA 外部からBを渡してもらう
AはBの詳細を知らなくてよい。
これがDependency Injection。
現実の例
悪い例
車がエンジンを内蔵して交換不能
DIあり:車にエンジンを交換可能に搭載→修理・交換が容易。
③ なぜCDとDIがセットで語られるのか
現代のシステムは
• CD → 頻繁に更新
• DI → 柔軟な設計
が必要だから。DIがないとCDが困難になる。
④ Kubernetesやクラウドとの関係
例えばKubernetes環境では
• CD → 自動で新バージョンを配布
• DI → 環境ごとの設定を柔軟に変更
両方が必須。
⑤ まとめ(本質)
用語 意味
CD設計 ソフトウェアを自動で安全に本番反映する仕組み
DI設計 ソフトウェアを柔軟で変更しやすくする構造設計
⑥ なぜ企業で重要か(特にAI時代)
AI時代は:
• 頻繁な更新(CD必須)
• 複雑なシステム(DI必須)
つまり
CD/DIを理解しているエンジニアは、
「大規模システムを設計できる人材」
と見なされている。