DevOps とはなにか

作成日:2022/03/02

お役立ちコラム

今回から、DevOps について第一人者である日本仮想技術株式会社 宮原徹さまにその目的から実装方法、活用までを解説いただきます。
DevOps は新しい考え方ですので、なじみのない開発手法かもしれません。
変化の激しいビジネス環境への対応が求められる中で、必要な開発手法だと思います。
今後の開発の参考にしていただければ幸いです。

それでは、宮原さまから DevOps のレクチャーをお願いいたします。
初回は DevOps の説明の全体像からお伝えします。

DevOps とはなにか

日本仮想化技術株式会社の宮原です。
このコラムでは、モダンな開発に必要とされる DevOps やアジャイルな開発について解説していきます。
これらの開発手法は、従来のウォーターフォール型の開発に比べて、スピード感のある手法のため、継続的に機能追加や修正が必要とされるWebアプリケーションやスマホ・タブレットアプリなどと相性が良いと言われています。
そのため、DX(デジタルトランスフォーメーション)を実現するために、DevOps やアジャイルに挑戦してみたい開発者も増えてきています。
これらの開発手法について、その概要を理解し、取り組み始めるためのハードルを下げることを目的として、できるだけ簡単に解説していきます。
次回以降進めるために必要な事項を簡単にご説明いたします。

DevOps とは何か

DevOps とは一般的に、開発(Development)と運用(Operation)を一体化させて、継続的な改善を実行しやすくする取り組みを指します。
そのため、このようなことをしていれば DevOps というような、厳密な定義はありません。

ウォーターフォール型開発との対比

DevOps との対比として挙げられるのが、従来のウォーターフォール型の開発手法です。
ウォーターフォールは建設などの工程管理で培われた手法であり、一度建てた建物に大幅な修正を加えることは事実上不可能ですから、それなりに親和性の高かったといえます。
この手法を流用したシステム開発も、一度設計・開発を行えば大幅な修正をすることが無いようなシステムにはなじむでしょう。

アジャイルな開発を支える DevOps

しかし、現在ではシステムを次々とアップデートしていくのは当たり前になってきていますから、ニーズに合わせて素早く開発していくアジャイルな開発手法が必要とされるようになり、そのスピードを支えるテクニックである DevOps も必要性が高くなっているというわけです。
アジャイルな開発手法は、DevOps と親和性の高い手法です。
この連載でも、アジャイルについても解説する予定です。

DevOps を実現する技術

DevOps に明確な定義はありませんが、技術的な面から見て必須となる技術がいくつかあります。

自動化

自動化は、繰り返し行うような技術をエンジニアが手作業で行うのではなく、スクリプトなどを使って行う手法です。
作業手順をプログラム的に記述したコードと、各種パラメータなどを定義したファイルの組み合わせで動作させます。
これまで手作業が多かったインフラ構築などでも自動化を使うことが増えてきており、これらを「 Infrastructure as Code 」(IaC)と呼ぶようになってきており、インフラエンジニアにもプログラミングの素養が必要となりつつあります。
IaC を実現するツールとして、Ansible や Terraform などの人気があります。

コンテナ

従来であれば、物理マシンや仮想マシンにOSやミドルウエアをインストールし、アプリケーションを実行していましたが、現在ではコンテナの技術を使ってアプリケーションを実行することも増えてきました。
コンテナは、アプリケーションとミドルウエアを1つのコンテナとして「カプセル化」することで、OS環境との分離度を高めたものです。
起動が高速であり、アプリケーションやミドルウエアがバージョンアップした際のメンテナンスが容易になるなどのメリットがあります。
代表的なコンテナとしては Docker が、またコンテナをたくさん扱うためのオーケストレーションツールとして Kubernetes の人気があります。

CI/CD

CI/CDは、アプリケーションの開発から実行までを自動化し、開発サイクルを円滑に回す仕組みです。
CIは「継続的インテグレーション」、CDは「継続的デリバリー(またはデプロイ)」の略です。
CI/CDは多くの場合、ソースコード管理のGitと組み合わされて実行されます。
ソースコードの修正が行われますと、必要に応じてビルドやテスト、コンテナイメージの作成などが自動的に行われ、実行可能な状態となります。

DevOps のその他の要素

自動化、コンテナ、CI/CDはDevOpsを実現するための基本的な要素ですが、以下のような要素もつけ加えていくことができるでしょう。

テストの自動化

CI/CDを行うための自動化の中に、テストの自動化を加えることで、品質を担保する取り組みです。
ソースコードを静的に解析する他、実際に動かしてみて正しく動作するかの動的テスト、さらにはシステム全体として連携して正しく動作するかを確認する統合テストなどを自動化する取り組みも注目されています。

セキュリティーの確保

アプリケーションに脆弱(ぜいじゃく)性が潜んでいないかを確認するため、テスト自動化の中にセキュリティー診断を加える取り組みです。
DevSecOps などと呼ばれます。

コミュニケーションやプロジェクト管理の改善

技術的な要素の他に、チーム内でのコミュニケーションや、プロジェクト管理といった人的な要素を改善していくことも DevOps には含まれており、これらはアジャイルな開発手法の実践(プラクティス)などが参考になるでしょう。
これらについてもこの連載で触れていく予定です。

次回は、今回紹介したいくつかのツールについて、もう少し詳しく紹介していきます。

執筆者

宮原 徹(みやはら とおる)
1972年、神奈川県生まれ。
中央大学 法学部 法律学科卒。日本オラクルでLinux版Oracleのマーケティングに従事後、2001年に株式会社びぎねっとを設立し、Linuxをはじめとするオープンソースの普及活動を積極的に行い、IPA「2008年度 OSS貢献者賞」を受賞。
2006年に日本仮想化技術株式会社を設立し、仮想化技術に関する情報発信とコンサルティングを行っている。
現在は主にエンタープライズ分野における DevOps について調査・研究を行っており、成果はブログや勉強会などでも発信している。

ご意見・ご感想をお聞かせください

お気軽にお問い合わせください

ページの先頭に戻る