開発と運用が協力し合うDevOpsの課題
DevOpsとは、一般的に開発と運用が協力し合ってシステムを開発、運用していく取り組みを指しています。ただ、この説明だけだと、協力し合うのは当たり前と考えるかも知れませんので、DevOpsの必要性、すなわち課題について考えてみましょう。
開発は変化を求め、運用は安定を求める
開発と運用、それぞれの立場で求めるものが異なるという課題が挙げられます。
開発は変化を求める
アプリケーションを開発する立場からすると、一度作ったらそれで終わりというわけではありません。バグの修正や機能の追加など、一旦リリースした後も開発は継続していくことがほとんどです。また、従来のような頻度の少ないリリースではなく、ちょっとした修正でもリリースする頻繁なリリースサイクルが求められます。
運用は安定を求める
開発されたアプリケーションを運用する立場からすると、リリースして動作することが確認できれば、できるだけその状態が維持されることが望ましいです。ちょっとしたバグ修正の差し換えぐらいであれば良いですが、機能の追加などに伴ってデータベース、ネットワークなどが変化すると、その事によってシステムが動作しなくなる可能性があります。このような事態をできるだけ避けたいというのが運用の立場です。
オーソドックスなDevOpsの取り組みとは?
このような、開発と運用の立場の違いを越えて、協力し合い、システムが動作できるようにする取り組みがDevOpsということになります。そのため、「○○をすればDevOps」というようなものはなく、プロジェクトによってDevOpsのあり方が異なるのが、少し難しいところとも言えます。とはいえ、オーソドックスなDevOpsの取り組みはあります。たとえば以下のような事柄です。
CI/CDの実現
開発したアプリケーションを実行できるようにすることを「デリバリー」と呼びます。開発からデリバリーまでの一連の作業を自動化することを「CI/CD」(継続的インテグレーション/継続的デリバリー)と呼びます。CI/CDを実現するためのツールがいくつか用意されており、Gitなどのソースコード管理ツール、コンテナなどのアプリケーション実行環境と連動させて、自動的にデリバリーまで行えるような環境を構築し、開発はその環境の上で開発作業を行う事になります。
アジャイルな開発手法
DX(デジタルトランスフォーメーション)の必要性が高まり、短期的な開発とリリースを繰り返して、ユーザーニーズに迅速に応えていくアジャイルな開発手法が求められるようになりました。その開発成果物をデリバリーするためにDevOpsが求められるようになってきたと言ってもよいでしょう。アジャイルとDevOpsは密接に関わっています。
手段としてのDevOps
技術的にはCI/CDを実現すること、開発ではアジャイルな開発手法を取り入れることが、スピード感のあるシステム開発を実現するために必要とされていると言ってよいでしょう。ただし、それらはあくまで手段でしかありませんので、システムがどのようにビジネスに貢献するのか、目的をきちんと定義した上で適切な手段を取る。その一つの形がDevOpsだと考えるとよいでしょう。