SmartCloud コラム

DevOpsのススメ

2019.08.07DevOps入門

DevOps ことはじめ

最近のアプリケーション開発では、エンタープライズシステムの分野でも『DevOps』の手法を取り入れた開発を検討したり、実践したりしているケースが増えてきました。これまでDevOpsというと、Webサービスやスマホアプリなどのシステムを1から開発する場合に取り入れられる手法と捉えられていました。しかし、DevOpsに関する知見が蓄積されてくるにつれて、業務システムにおいてもDevOpsを、という考え方が出てきました。実際、筆者が関わっているプロジェクトでも、業務システムの刷新においてDevOpsの手法を取り入れて開発を進め、一定の成果をあげています。

 

ここでは、DevOpsの手法を取り入れて開発を行いたいと考えている方に、DevOpsとは何か、どのように取り組むべきかをお話します。

 

DevOps.png

DevOps とは

DevOpsとは、開発(Dev)と運用(Ops)が協力して開発を進める手法です。しかし、厳密に「これがDevOps」という定義はありません。従来のウォーターフォール型開発のように、開発チームと運用チームの対立構造が生まれてしまうことを解消するのがDevOpsの狙いです。

開発と運用の対立構造とは?

 開発チームと運用チームが対立構造になってしまいがちなのは、それぞれの求める方向性が異なっているからです。

開発チームは新しいものをリリースしたい

開発チームは、新しい機能の追加や不具合の改修を行い、新しいアプリケーションを作ってリリースをしたいという要望があります。これを一言で言えば「変化」です。

運用チームはシステムを修正したくない

運用チームはできるだけ問題を起こさずにシステムの稼動を行いたいため、現在うまく動いているシステムに修正を加えたくないという要望があります。これを一言で言えば「安定」です。

 

このように、「変化」と「安定」という、相反する要望を協調して実現しよう、というのがDevOpsの狙いです。

DevOps の特徴

ウォーターフォール型開発との対比でDevOpsの特徴を考えてみると、以下のようになります。

早い開発サイクル

ウォーターフォール型開発が何ヶ月という単位でプロジェクトを進めていくのに対して、DevOpsでは週単位となります。早い段階で動作テストまで行う開発サイクルのため、実際に動くコードを見て判断することが継続的な改善に繋がります。

ツールの利用

ウォーターフォール型開発が手作業中心であるのに対して、DevOpsでは様々なツールを使用して作業の効率化、自動化を行います。ただし、ツールの利用自体はDevOpsの専売特許というわけではありません。

継続的な改善

ウォーターフォール型開発が既に決まった手法、ルールに従うことでチームの統制を取るのに対して、DevOpsは課題解決のために常に手法やルールを改善していきます。これを継続的な改善、あるいは自己組織的なチームなどと呼びます。

 

注意しなければならないのは、ウォーターフォール型開発が駄目で、DevOpsが良いとは必ずしも言えない点です。また、「これをしていなければDevOpsではない」ということもありませんので、DevOpsのよいところを活かして現在のウォーターフォール型開発のプロセスを改善することもできます。「ベストプラクティス」と呼ばれる、現状における最適解を探していくプロセスそのものが重要なポイントなのです。

CI/CDの実践 ~DevOpsの技術的な特徴

DevOpsの技術的な特徴はCI/CD(Continuous Integration/Continuous Delivery)を実現することにあります。日本語では、CIは「継続的インテグレーション」、CDは「継続的デリバリー」となります。

CIとは

継続的インテグレーションは、開発者がコードをコードリポジトリにコミットすると、自動的にビルドとテストが行われる仕組みを構築して開発を進めていきます。手作業で行っていたビルドやテストが自動化されるので、人手をかけずに頻繁に実施できます。ビルドが何らかの理由で失敗したり、テストが通らなくなるといった問題が早期に発見できるため、問題の改善を早い段階で行うことができます。

CDとは

継続的デリバリーは、CIで行うビルドやテストだけでなく、アプリケーションを実行環境に配備(デプロイ)して、実際に動作する状態を作るところまでを自動的に行います。CDを実現することで、テスト環境、ステージング環境、本番環境を自動的にデプロイが行えるようになるので、頻繁にアプリケーションを本番環境へリリースできるようになります。
CDを行っていないと、必要な分のテスト環境が用意できずテストが不十分になったり、各環境の間で使用しているミドルウェア等のバージョンが異なるなど、システムの安定動作に繋がらないことが頻繁に発生します。
最近では、より容易に環境を用意できる「コンテナ」を利用するケースが増えています。

DevOpsとアジャイル開発との関係

アジャイルとは、「俊敏」「素早い」といった意味の言葉です。アジャイル開発は、短い期間での開発を反復(イテレーション)する開発手法のことです。

 

DevOpsとアジャイル開発は密接な関係にあると言えます。DevOpsはCI/CDのためのツール活用など技術的な側面が強いのに対して、アジャイルは開発チームのメンバー間でのコミュニケーションなど人的な側面が強い開発手法です。
DevOpsとアジャイルを組み合わせることで、相互に補完することができます。

 

たとえば、アジャイルの開発手法の1つであるスクラムでは、1週間から2週間という短い期間を「スプリント」と呼び、スプリントを反復することで開発を進めていきます。このようなサイクルの早い開発では、CI/CDツールの活用などDevOpsの手法が欠かせません。

 

DevOpsを実現したいのであれば、アジャイル開発についても合わせて検討、実践するとよいでしょう。

DevOps を支えるツール

GitHubやGitLabなどのコードリポジトリ、オープンソースソフトウェアのJenkinsや、サービス型の提供ですがCircleCIが代表的なCI/CDツール、など、DevOpsを実践するためには、様々な「ツール」を活用する事が求められます。
これらについては、今後ご紹介していきます。
また、セキュリティを強化する仕組みを取り入れた「DevSecOps」についても紹介する予定ですので、お楽しみに。

 

 

 

(日本仮想化技術株式会社 代表取締役社長兼CEO/宮原 徹)

 

※記載されている会社名、製品名、サービス名は各社の商標または登録商標です。

関連する記事


ページトップへ

お問い合わせ

「SmartCloud」問い合わせ

資料請求・お問い合わせ

ページトップへ