DevOps
Development Operations(DevOps)とは、従来のソフトウェア開発における、開発チームとオペレーションチームとの垣根をなくし、統合された一つのチームとして、ソフトウェアを開発・運用する組織体制・文化、手法。工程の標準化・自動化・統合化・高速化、チーム内の密なコミュニケーション・コラボレーションを通し、高品質で、セキュリティ面、コンプライアンス面双方において安全なプロダクトを、継続的に短期間でリリースすることを目的とする。
DevOpsライフサイクル
- 企画
- 機能
- セキュリティ
- コンプライアンス
- 開発
- コーディング
- ビルド
- テスト
- 運用
- デプロイ
- モニタリング
- ロギング
~2000年
- 分業体制
- 企画
- デザイン
- 開発
- Quality Assurance(QA)テスト
- セキュリティ
- コンプライアンス
- オペレーション
- ベルトコンベア方式
- 配信頻度: 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エンジニア
利点・欠点
利点
- スピード 運用面を考慮した開発。運用から開発への工程遡り減少
- 品質 短い期間での定期的更新。顧客満足度の向上
- 安全 危険コードの早期発見。複数メンバーがエラー対応可能。欠員への迅速対応
- コミュニケーション 運用環境・開発実装方法、専門用語への理解
欠点
- 導入コスト チーム構成改善コスト、一時的な非生産性
- 流動性 継続的な工程改善。変更毎にチームメンバーが要適応
- ツール 利用料の発生。サードパーティの事業停止リスク
導入手順・方法
- ツール導入 CI/CDツール、IaCサービスなどの導入
- ワークフロー変更 作業の効率化・自動化・標準化
- チーム編成 メンバー教育、役割交代
- デプロイ 企画・開発・運用を実行
- 継続 2~4.の繰り返し。必要に応じ1.へ
まとめ
DevOpsは、開発・運用間の隔たりをなくし、チームメンバー全員で企画・開発・運用を共同担当。効率的・迅速にソフトウェアを継続リリースする思想・手法。
1つの正しいDevOpsはない。フレームワークを採用しつつ、独自の体制・手法を模索、改善する。