DevOpsとは?
必要性と実行のポイント
DevOpsは、ソフトウェア開発と運用を一体化し、製品をより早く、より安定してリリースするための考え方や手法です。開発チームと運用チームが協力することで、従来よりも効率的にソフトウェア開発を進め、顧客のニーズに迅速に対応できます。
DevOpsとは?
DevOpsは、「開発(Development)」と「運用(Operations)」を組み合わせた造語で、組織がアプリケーションやサービスを迅速に提供できるようにするための方法論・ツール・カルチャーなどの総称です。開発エンジニアと運用エンジニアが、企画構想から開発を経て本番サポートに至るまでのライフサイクル全体にわたって密接に連携することで、従来のやり方よりも迅速に製品を市場へリリースすることができます。実際、運用担当者と開発者は、同じツールに相乗りすることで作業をよりスムーズかつ迅速に進めることができます。
DevOpsは開発チームと運用チーム間の連携改善を目標とした、人と文化の双方にまたがる指針です。DevとOps、二つの用語の融合は、これまでばらばらだった二つのチームの業務の融合を象徴しています。「Dev」は狭義には開発者を指しますが、ソフトウェア開発に関わるQAやプロダクトチームなども含みます。「Ops」は運用エンジニア、システム管理者、保守担当者、リリースエンジニア、データベース管理者、ネットワークエンジニア、セキュリティ専門家などさまざまな職種を含みますが、一般的には開発者が作成したソフトウェアの保守・改修の担当という意味です。DevOpsの概念が登場する以前は、二つのチームは別々の環境で働き、一方が他方のタスクを完了するのを待っていました。しかし、現在ではDevOpsによって二つのチームは緊密に連携し、システムの瑕疵の発見から設計方針の変更に至るまで、より俊敏に行えるようになりました。
一般的にDevOpsは、IT業界における分業主体からワンチームへの文化変革と捉えられています。その原動力はシステム構築における「アジャイル」「リーン」などの動きと密接に連動しています。またDevOpsには、自動化ツールの活用を通じたソフトウェア駆動型のインフラ構築の進化という面もあります。
「DevOps」は2009年にパトリック・デボワが発明した造語です。「開発(Dev)」と「運用(Ops)」を合成したもので、これがそのままDevOpsの意味するところでもあります。DevOpsは、ソフトウェア開発のライフサイクルを短縮するためのプロセスや文化、マインドセットを含む幅広い概念であり、迅速にフィードバックループを繰り返すことで新機能・改修・アップデートを遅延せず多頻度に提供することを目標としています。
DevOpsがなぜ必要なのか?
開発者とシステム管理者は、お互いの円滑な協業を最も必要とする部門です。どの業務部門からも、つねに新機能や新サービス、新ビジネスなどの要求が絶えません。しかし一方で、それらの新要素はすべて信頼性できるインフラ上で運用され続けなければなりません。開発者は常に新しいソフトウェアを開発しますが、運用部門は運用を安定させ続けなければならず、往々にして安定稼働に時間を要します。これが、開発者と運用者が対立してしまう主な理由です。
DevOpsが効果を発揮する例を紹介します:
ある会社が人工知能(AI)を搭載した掃除ロボットを販売しています。開発チームはプログラムを開発し、運用チームは実社会におけるロボット本体とその運用基盤を管理しています。
開発チームは、ロボットが所有者を認識し、スマートデバイスから指示を受け、さまざまな清掃能力を持つプログラムを開発しました。一方運用チームは、それらを実行するロボットを製作しました。
1年の開発期間を経て、両チームがそれぞれ行った作業を統合しました。その時はじめて、ロボットの欠陥が判明します。一人の音声からしか指示を受け付けない、高い棚が掃除できない、等です。どちらのチームも、それぞれのテスト環境ではすべてが完璧に見えたにもかかわらず、納得のいく製品を生み出せなかったことに苛立っています。残念ながら、市場投入までの時間がますます延びてしまいました。
テクノロジーが進歩するにつれて、運用とソフトウェア開発が孤立した、いわゆるサイロ状態が原因となる落とし穴がより明確になってきました。DevOpsは、開発および運用に関わるすべての人を、一つの自動化されたワークフローに結びつけることで、この問題を解決するという提案です。このワークフローは、新しいソフトウェアがインフラ上で安定稼働するのに必要なすべてのオペレーション要件を確実に満たすためのものです。
それは従来の組織の壁を越えた共通の原則に基づいています。これらの原則には以下のようなものがあります。
- 優先順位、最終目標、およびそれらを達成するために必要な基本的な信念を設定すること。
- 問題解決のためのチーム内外の連携。
- 反復的なプロセスを自動化し、より高度な業務に時間を割けるようにすること。
- 本番環境を測定するパラメーターを設定し、運用へのフィードバックを統合すること。
- タスクを達成するために必要なスキルセットや専門知識を全員に共有すること。
DevOpsはどこから来たのか?
当初のDevOpsには、堅牢で柔軟かつ効果的なシステムを生み出すのに役立つさまざまなシステムや方法論が含まれており、現代のDevOpsへと受け継がれています。
エンタープライズシステム管理(ESM):運用エキスパート/システム管理者が持ち寄ったDevOpsの理想的なベストプラクティスです。構成管理やシステム監視、自動プロビジョニングやツールチェーンアプローチなどが含まれます。
アジャイル開発:アジャイルなソフトウェア開発とは、顧客・プロダクトマネージャー・開発者・品質担当などの緊密な連携によって、短期間でより良い製品を開発するための方法論です。DevOpsはアジャイル開発の考え方をソフトウェア開発から拡張したものです。
DevOpsのツール
ソースコードリポジトリ
このリポジトリは、開発者がチェックインして、コードに変更を加える場所です。リポジトリはチェックインされたコードすべてを管理し、誤って他の人のコードを上書きしないようガードします。
ビルドサーバー
自動でソースコードリポジトリからコードをコンパイルし、実行環境へと移送するツールです。
構成管理
サーバーとその環境の構成を定義します。
仮想インフラ
仮想インフラは、インフラやPaaS(Platform as a Servise)などのクラウドベンダーが提供しています。APIを使って、プログラミングや構成管理ツールを備えた新しいマシンを作成することができます。
テスト自動化
テスト自動化を使えば、構築パイプライン内で自動テストができます。これにより、デプロイ可能なビルドを確実に実装できるようになります。
パイプラインの統合
これは工場の組立ラインのようなシステムです。組立てられ完成したコードを本番環境またはプリプロダクション環境にデプロイするシステムです。
DevOpsをうまく実行するには?
DevOpsの進め方にはいくつかのバリエーションがありますが、すべてのDevOps文化に共通する方法があります。
- 協力:チームや個人が協力して作業する。
- 自動化:DevOpsはあらゆる局面で自動化が必要なため、ツールチェーンが非常に重要。
- CI/CD(継続的統合と継続的提供 Continuous integration and delivery):アジャイル開発から引き継いだ特徴。最終的にリリースするソフトウェアの迅速な開発とリリースを可能にする。
- 継続的テスト:各アプリケーションに関連するビジネスリスクを評価するのに役立つ、中央集権的な意思決定システムを構築するためのカギ。
- 継続的監視:開発から安定稼働までのソフトウェアの性能を評価することで、市場投入までの時間を短縮し遅延を防止する。
DevOpsのメリット
DevOpsの仕組みを理解し、正しい手順とプロセスを実施できるようになることで、多くのメリットがあります。
製品のデリバリー
DevOpsによる経営貢献はスピードです。イノベーティブな顧客対応・市場変化への適応・収益の底上げなどを高速化できます。DevOpsによる運用と開発のスムーズな相互作用がこれを促進します。
多頻度なデリバリー
製品リリースの速度が上がることで、リリースの頻度も上がり、製品/サービスの刷新もより速くなります。機能追加やバグの修正が速ければ速いほど、信頼できるブランドとしての地位は高まり、競争力を高めます。CI/CD(継続的統合と継続的提供)は、ビルドからデプロイまでの完全な自動化を提供するシステムです。
信頼性
DevOpsによって、プログラムのアップデートやインフラの更改における品質を保証できます。信頼性が高いほど、デリバリーのペースを上げることができるようになります。CI/CDは、いかなる変更も自動的にデリバリでき、かつインフラに影響がないことを保証する鍵となります。監視とログの実践は、どちらもリアルタイムでのパフォーマンスを把握するのに役立ちます。
スケーラビリティ
複雑で進化するシステムであっても、自動化によってスムーズかつ低リスクに扱えるようになることで、運用と開発のスケーラビリティを実現できます。
コラボレーションの向上
チーム間の相互作用が向上すると、より良いオーナーシップと責任感が生まれます。密接に協力し合うことで、責任の分担そしてワークフローの統合が可能になることで、製品の開発から実装までのムダを削減し時短を実現します。
セキュリティ
DevOpsは自動化されたコンプライアンスポリシーに則っているため、スケールアップしても複雑な制御や構成管理テクニックをさほど必要とせずにセキュリティを確保できます。
DevOpsの課題と解決策
どんな仕事の仕組みにも課題があります。DevOpsの導入も同様です。以下の解決策は、DevOpsで正しいスタートを切るのに役立ち、さまざまな工夫へと通じるものです。DevOpsの実施の問題と解決策の例を紹介します。
開発と運用の協業
どちらの部門もそれぞれ異なる文化を持っているため、統合しようとすると問題が生じる可能性があります。これまでのやり方をやめて、まったく新しいやり方を要求するのは大変なことです。
一つの解決策は、両部門の共通目標に注目することです。共通の目標に向かっていれば、目標達成が容易になり、そのために必要な新しいルールを受け入れることも容易になります。大事なのはオープンなコミュニケーションです。両部門のメンバーは誰もが自分の意見を言えるということを知っておくべきです。開発と運用のメンバーを交換することも、関係を円滑にする上で大いに役立ちます。
既存のDevOpsツールの統合
制作において重要なのは開発・テスト・デプロイのステップが正しく流れることです。これらは継続的かつ反復的に実行できる必要があります。もし各部門がこれらのステップに対して異なるやり方をしていると、統合が困難になり生産性も低下します。それらを一本化することは、どこかの部門が自分のプロセスを変更するということであり、混乱を招きます。
これを解決するには、一つの自動化システムに開発と運用を統合することです。自動化により、データ入力、分析、製品調査、マーケティングなどの反復的なタスクに費やす時間を短縮できます。さまざまな部門のプロセスを統合することによって、プロセスの整流化とコミュニケーション改善が期待できます。両部門でクラウドかオープンソースのソリューションの選択を話し合うことで、移行がよりスムーズになります。
レガシーシステムへの対処
開発、テスト、デプロイのループを正しく維持するためには、最新状態のシステムで作業する必要があります。しかし多くの場合、旧式のレガシーシステムに対処しなければなりません。システムのパフォーマンスや安定性に問題を抱えてしまう可能性があります。
これに対する解決策は、Iaas(Infrastracture-as-a-Service)への移行です。常に最新のハードウェア、サーバー、データストレージを利用することができます。また、マイクロサービスを使うことで、アプリケーションの構築とスケールが容易かつ迅速になります。
複雑化するシステムとセキュリティ
人工知能や機械学習、仮想現実や拡張現実など、今日のビジネスではさまざまな新技術が使われています。そうした中、セキュリティが最重要の課題です。
セキュリティ技術に精通した経験豊富な開発者を採用することで、最新の技術を導入しつつシームレスに運用を継続できるようになります。顧客に強力なセキュリティオプションを提供できることで、ビジネスにも好影響を与えるでしょう。最新のセキュリティへの投資は高く見えるかもしれませんが、その価値があります。
DevOps環境における一貫性
DevOpsにはさまざまなアプローチがあり、開発者間で異なる方法をとっている場合、生産性の低下やバグの増加につながる可能性があります。
これに対処するためには、協力と透明性のための仕組みを構築する必要があります。そのためには、従来の開発手法やデプロイ技術の知識を一旦白紙に戻し、再度学習しなおす必要があります。チームのメンバーがお互いにコミュニケーションをとり、お互いがどのような業務をしているかを知ることをお勧めします。朝礼やチェックインミーティングなどの仕掛けも役に立ちます。
DevOps成功のカギは、ゴールとそこに至る道筋の明確化です。それを支えるのがチームワークです。
DevOps導入の基本は自動化と最適化であり、そのために最適なテクノロジーを選択することが重要です。しかし最も重要なのは人です。組織の文化をどう変えていくかの問題は、エコシステムとしてのDevOpsのあらゆる面に影響します。DevOpsは、テクノロジーと人間の両輪によって推進されるのです。文化としてのDevOpsを取り入れるということは、チームの生産性を維持しつつ常に進化できるような環境を整備することと同義なのです。
関連製品
-
TIBCO
Cloud™ IntegrationSaaSからオンプレミスまで、企業のあらゆるビジネスアプリケーションをリアルタイムかつ活用可能な状態で連携させるアプリケーション統合スイート詳しく見る