この記事は?
社内の研修用にDevOpsについて私なりにまとめました。DevOpsについては、どちらかといえばマネジメントに関わる内容で書かれることが多いと考えていますが、マネジメントのメンバーが考えるDevOpsを共に協力し考えることのできるメンバーとなることでプロジェクトを推進するための一助になればと思います。
一番伝えたいこと
メンバーとして作業しているとテストの自動化やCI/CDをすることがDevOpsであると考えてしまいがちです。
しかし、DevOpsとはもっと抽象的な考えであるためそこを理解することが重要だと考えます。
今日一番伝えたいのはテストの自動化やCI/CDを行うことがDevOpsの「目的」ではなく、「手段」であるという点を抑えてもらえればと思います。
DevOpsとは?
DevOpsは「開発チーム(Development)」と「運用チーム(Operations)」がお互いに協調し合うことでより確実かつ迅速にエンドユーザーにシステムを届け続ける取り組み。
開発チームと運用チームが別々に仕事をする場合の問題点
開発チームは機能修正したものをどんどんリリースをしていきたいのに対して運用チームはサービスを安定稼働させていきたいと考えています。リリースが増えれば必然的にサービスを安定稼働させるのが難しくなってしまうため、この2つの考えは相反するものになってしまいビジネスを進める上での障害となってしまいます。
どうやって解決するか?
開発・運用チームが互いに協力し、開発と運用のサイクルをスムーズに行うためにボトルネックとなる部分を解決していくことで問題点を解消していきます。
以下がすべてというわけではないですが、具体的な例を示します。
- リリースのたびにテストする内容を自動化する(CIツールの導入)
- 人力のテストを行う場合、チェックが行き届かずデグレが発生する可能性があるため自動化することでデグレを防止する
- リリース作業を行うにあたって自動リリースが可能な状況を作る(CDツールの導入)
- リリース作業の負担を軽減することで頻繁なリリース作業に対応可能な状況を作る
- ChatToolなどを用いて情報共有を行う
- 開発チームや運用チームだけで問題を解消しようとせずお互いに情報共有が可能な状況を作る
開発メンバーとしてDevOpsにむけて重要だと考える点
マインド
DevOpsを実現するにために開発メンバーとしてどのようなことを意識して作業を進めていくべきか?という点での私見
- 自動化に積極的に貢献する
- 自分がやることを前提とせずに誰がやっても同じに作業できるようにする
- 細かく修正しトライ&エラーを繰り返す
- エラー状態で抱えこまずどんどん出していく
- 他チームや他のメンバーとの協力を意識する
- 自分の作業が運用面までつなげるにあたり情報の更新があれば積極的に共有する
- 非難する文化をやめる
- 非難する文化では情報の隠蔽が行われる
- 無責任な作業をしない
- 誰がやってもミスの介在しないプロセスを考えて動く
ツール
DevOpsを実現するために開発メンバーとして扱うべきツールまたはそのツールを使用する意図
- ソースコード管理ツール(Git等)
- ソースコードのみならずインフラの設定ファイルまで含めてバージョン管理する
- CI/CDツール(Jenkins等)
- 自動テストや環境構築の自動化によって運用コストや正確性を高める
- テストツール(Pytest, Selenium等)
- 自動テストを行うにあたってサービスのデグレを防止する
- モニタリングツール(ZABBIX等)
- 開発担当者がモニタリングできるようにし運用で発生した問題の早期対応を行う
- コラボレーションツール(REDMINE等)
- 他者にも伝わるようにチケットの更新を行う
終わりに
DevOpsがもっとも素晴らしい開発と運用の方法であり、どの現場でも適応できる魔法のような方法であるとは思っておりません。
自分が参画したプロジェクトの中で取り入れられていないから良くないということではなく状況に応じて選択していくものだと考えています。
今回の記事がプロジェクトの中でDevOps取り入れようとする中でどのように動くのが適切か?というための一助になればと思います。