Zac Fukuda

DevOps

Development Operations(DevOps)とは、従来のソフトウェア開発における、開発チームとオペレーションチームとの垣根をなくし、統合された一つのチームとして、ソフトウェアを開発・運用する組織体制・文化、手法。工程の標準化・自動化・統合化・高速化、チーム内の密なコミュニケーション・コラボレーションを通し、高品質で、セキュリティ面、コンプライアンス面双方において安全なプロダクトを、継続的に短期間でリリースすることを目的とする。

DevOpsライフサイクル

  1. 企画
    1. 機能
    2. セキュリティ
    3. コンプライアンス
  2. 開発
    1. コーディング
    2. ビルド
    3. テスト
  3. 運用
    1. デプロイ
    2. モニタリング
    3. ロギング

~2000年

  • 分業体制
    1. 企画
    2. デザイン
    3. 開発
    4. Quality Assurance(QA)テスト
    5. セキュリティ
    6. コンプライアンス
    7. オペレーション
  • ベルトコンベア方式
  • 配信頻度: 5年以上

2000~2010年

  • トヨタ生産方式(リーン生産方式)の模倣
  • ウォーターフォールからアジャイル開発へ
  • 配信頻度: 2~3年

2010年~

  • 商品配信方法転換(CDからインターネット)
  • クラウドベース
  • DevOpsの啓蒙・普及
  • 配信頻度: 1週間~1ヶ月

基本理念

  • 高速 評価から配信までの期間を短く
  • 高品質 お客様へ提供する商品の品質を最優先
  • 協力 メンバー全員が最終的な商品の品質に対して責任

ライフサイクルを低間隔にすると、短期目標・利益を求めてしまう傾向。中長期目標を定め、その上でDevOpsする。

DevOpsモデル

最適なDevOpsは会社、チーム、プロジェクトにより異なるが、DevOpsを導入していく上で、骨組みとなる文化・手法はある。

  • 文化
    • 自律性 他チーム、他部署、親組織などに依然せず運用
    • 透明性 エラー、バグは担当者だけへでなく、チーム内で共有
    • 共同作業 全ての責任・役割をチームメンバー全員で共有
    • 学習意欲 コーディング以外の幅広い知識・技術を習得
  • 手法
    • アジャイル 小規模な修正・評価の反復
    • 自動化 人為作業を減らす。人為ミスを減らす
    • クラウドネイティブ クラウドコンピューティング環境利用
    • 安全第一 各工程でセキュリティ・コンプライアンス確認

具体的な手法・ツール

  • スクラム
  • 継続的インテギュレーション(continuous integration、略: CI)
    • ソースコードレポジトリー
    • バージョンコントロール
  • 継続的デリバリー(continuous delivery、略: CD)
    • 自動ビルド
    • 自動テスト
  • 継続的デプロイメント(continuous deploy、略: CD)
    • マイクロサービス
    • コンテナ/コンテナ管理
    • インフラストラクチャー・アズ・コード(Infrastructure as code、略: IaC)
    • サイト・リライアビリティ・エンジニアリング(site reliability engineering、略: SRE)
  • モニタリング/ロギング
  • シフトレフト(DevSecOps)
  • DevOpsエンジニア

利点・欠点

利点

  • スピード 運用面を考慮した開発。運用から開発への工程遡り減少
  • 品質 短い期間での定期的更新。顧客満足度の向上
  • 安全 危険コードの早期発見。複数メンバーがエラー対応可能。欠員への迅速対応
  • コミュニケーション 運用環境・開発実装方法、専門用語への理解

欠点

  • 導入コスト チーム構成改善コスト、一時的な非生産性
  • 流動性 継続的な工程改善。変更毎にチームメンバーが要適応
  • ツール 利用料の発生。サードパーティの事業停止リスク

導入手順・方法

  1. ツール導入 CI/CDツール、IaCサービスなどの導入
  2. ワークフロー変更 作業の効率化・自動化・標準化
  3. チーム編成 メンバー教育、役割交代
  4. デプロイ 企画・開発・運用を実行
  5. 継続 2~4.の繰り返し。必要に応じ1.へ

まとめ

DevOpsは、開発・運用間の隔たりをなくし、チームメンバー全員で企画・開発・運用を共同担当。効率的・迅速にソフトウェアを継続リリースする思想・手法。

1つの正しいDevOpsはない。フレームワークを採用しつつ、独自の体制・手法を模索、改善する。

参考資料