目次
DevOpsとは何か?
DevOpsとは2009年にベルギーで開催された「DevOpsDays」から普及した造語になります。近年、このDevOpsという言葉はよく聞くことが多いのではないでしょうか。ここではDevOpsの意味や近年重要視されている理由を紹介します。
DevOpsの意味
DevOpsとは開発という言葉である「Development」と運用という言葉である「Operation」を組み合わせた言葉になります。DevOpsとは開発担当者と運用担当者またはインフラ関係者などシステムに関与する人がともに協力して開発や運用を進めていく体制や考え方のことを指します。
DevOpsの基本
DevOpsでは明確な定義が決まっていません。ここではDevOpsの概念を最もよく表していると思われるGene Kim氏の3つの原則をご紹介します。
体系的な思考
新しい機能を導入したい開発担当者とシステムを安定稼働したい運用担当者は本来の目的が折り合わないので、時には対立することもあります。そのような時にただ否定するのではなく、どのようにして目的を成し遂げるのか、失敗を回避していくのか建設的に議論することです。
フィードバックループの強化
プロセス改善の目的は主に作業の短縮と改善速度の向上です。DevOpsではフィードバックループの短縮と強化を重視し、クライアントに継続的に貢献することを重視しています。
継続的な試行と学習
アジャイル開発と深く関係があるDevOpsでは、継続的な改善、より優れた新しい方法を取り入れることを重視しています。そのため、ある程度リスクを背負って試行すること、リスクを減らすために継続的に学習することが重要です。
DevOpsが重視される理由
これまでのシステム開発は、「要件定義・設計・開発・テスト・リリース」というフェーズを順番にたどっていく、ウォーターフォール型開発が主流でした。しかし、ウォーターフォール型では開発期間が長くなる傾向にあり、市場の変化やユーザーの要望に迅速に応えることができませんでした。そこで、短期間で一連の流れを繰り返すアジャイル開発が普及しました。アジャイル開発では、迅速性が求められるため開発担当者や運用担当者、インフラ担当者などの連携が必要不可欠になります。
しかし、これまでのウォーターフォール型では各担当者は引継ぎ時や要件定義完了後の基盤構築の時の相談など限られたケースでしか関与していませんでした。そのため、既存の連携方法ではコミュニケーションミスが発生してしまいます。そこで、この問題を解決するために生み出された考え方がDevOpsです。DevOpsの考え方を導入することでお互いを尊重した効率的なコミュニケーションが可能となります。
さらにDevOpsの本来の目的はクライアントに効率的に効果のあるサービスを提供することです。そのため、考え方だけではなく進捗管理ツールやリリースを自動化するツールなどの効率化ツールもDevOpsでは着目されています。
DevOps導入のメリット
ここまでDevOpsの意味や近年重要視されている理由をご紹介しました。実際にDevOpsの概念を導入することで、どのようなメリットがあるのでしょうか。代表的なメリットを3つご紹介します。
迅速なチーム連携
DevOpsではコミュニケーションにおいて、以下の4点を重要視しています。これらはお互いの立場を理解しながら、建設的な意見を出し合うためには欠かせません。次の4点を組織に浸透させることで、迅速なチーム連携が可能となります。
Respect(相手を尊重する)
お互いの立場や考え方を理解し、相手を一人の人として思いやりのあるコミュニケーションを取る。
Trust(相手を信頼する)
相手の仕事を評価し役割をまっとうしてくれると信じて、仕事を依頼する。
Healthy attitude about failure(失敗を責めない)
失敗はどのような仕事にでも発生するべきものであると理解し、失敗したことに対して当事者のミスだと責めない。そして、失敗が発生した場合には問題解決および対策に前向きにコミュニケーションをする。
Avoiding Blame(非難しない)
相手の立場やミスに対して非難をしない。立場の対立や課題があったとしても、どのように解決するか、建設的な議論を行う。
高品質が保証される
DevOpsはクライアントに効率的に効果的なサービスを提供する概念です。コミュニケーションの改善だけでなく、構成管理ツールや自動的にビルドからテスト、デプロイまでを継続的に行ってくれるツール(CI/CDツール)の導入なども行います。導入することで、定型作業や作業管理、コンテンツ管理等を自動化ないしは効率化することができます。これにより、各担当者は建設的なコミュニケーションだけでなく、要件定義や開発、各担当との調整などより本質的な作業に力を入れることができるようになります。本質的な作業に力を入れることで、クライアントに高品質なサービスを提供することが可能になります。
セキュリティ
これまでのDevOpsでは主に開発と運用の2つに焦点が当てられていました。しかし、ペネトレーションテストなどのセキュリティ対策に関してはテストフェーズなどの後半のフェーズで行われていました。そのため、重大なセキュリティリスクなどによりリリースが遅れるリスクがありました。
そこで新たにDevSecOpsというセキュリティを足した考え方が、取り入れられるようになりました。DevSecOpsではソフトウェア品質とセキュリティというものを優先し、各フェーズでセキュリティ検証を行います。各フェーズで検証することでロジックやアーキテクチャなどの根本的な問題を早期に発見できます。その結果、セキュリティの向上や全体的な開発からリリースまでのサイクルを短縮することができます。このようにセキュリティ問題に対しても迅速に解決できるのはDevSecOpsのメリットと言えます。
DevOps導入のデメリット
DevOpsでは迅速に開発することができ、高品質が見込めるということでデメリットがないような感じがします。しかし、実際には以下の3つのようなデメリットが存在します。
専門知識・ノウハウが必要
DevOpsは企業の組織文化やコミュニケーション文化、ツールを大きく変えることになり、多くの知識やノウハウが求められます。例えば、コミュニケーションでは体系的なコミュニケーションを行うためのフレームワークを理解しておいた方がよいでしょう。DevOpsではツールも有効活用するケースが多く、どのようなツールが効果的か、どのようにツールを利用するかなどの専門知識も求められます。また、急にDevOpsを始めるのは難しいでしょう。スモールスタートで経験を蓄積することや、DevOpsの概念・具体的な導入方法を理解しているエンジニアを確保するなどのノウハウの取得も求められます。
スケジュール管理が難しい
従来の開発方法では要件定義からテスト、リリースまで順番に対応していくので、大まかな納期が決まっています。一方、DevOpsはお客様の要望に対して柔軟に対応することが求められます。そのため、頻繁に改修が発生するため、現時点でスケジュール全体のどこまで進んでいるかの把握が難しくなります。
また、これまでは開発担当と保守担当でそれぞれ別にスケジュールを引いていました。しかし、DevOpsでは開発担当と保守担当の綿密な連携が必要となるため、全体でのスケジュール管理が求められます。関与する人員が増えるため、その分スケジュール管理が難しくなります。
大規模開発に適さない場合がある
DevOpsではスケジュールの流動性や担当者間のコミュニケーションを密に取る必要があることから、一般に9人程度が目安と言われています。そのため、開発規模が大きくなる企業のメインシステムではDevOpsを取り入れた開発は困難になる傾向があります。
また、大規模な開発になればなるほど、クライアントの変更要求も多くなるでしょう。そのため、DevOpsの考え方を活用した開発を行うと、いつまで経っても開発が完了しない可能性もあります。対応方針としては、大規模システムを9人程度のチームが組めるようにシステムの領域を分割する方法があります。分割できないようであれば、DevOpsを導入するのではなく、ウォーターフォール型で開発したほうが効率が良いでしょう。
アジャイル開発との違い
DevOpsとアジャイル開発とは、何が違うのかと考える人も多いのではないでしょうか。ここではアジャイル開発の概要を紹介したうえで、アジャイル開発とDevOpsの違いを紹介します。
アジャイル開発とは何か
アジャイル開発とは「要件定義・設計・開発・テスト・リリース」の一連の流れを機能単位などの小さい粒度で繰り返し行うのが特徴です。クライアントの重要度の高い機能のみを先行して開発ができるため、クライアントのビジネスチャンスを広げることができます。
また、スモールスタートをすることでユーザーは早めにシステムに触れることができます。その結果、システムでできることのイメージが付きやすくなり、認識齟齬が発生しにくくなります。繰り返しブラッシュアップしていくことが目的となるので、一回ですべてを構築するウォーターフォール型よりも開発期間が長くなる傾向にあります。
アジャイル開発とDevOpsの違い
アジャイル開発とDevOpsというのは密接に関係しています。DevOpsというのはアジャイル開発が普及してきた中で、より改善するため、組織の文化を改変するために生まれた考え方になります。
したがって、アジャイル開発は「開発手法」であり、DevOpsとは「開発に伴う考え方・概念」であると考えると良いでしょう。
DevOpsの具体的な流れ
ここではDevOpsの一般的な流れを紹介します。DevOpsではこの一連の流れをサイクル的に繰り返すことが求められます。
計画
このフェーズではクライアントの要望を確認し、次にコーディングする機能の要件や具体的なタスク、スケジュール感を決めます。また、保守・運用担当者やインフラ担当と逐次情報共有をするためのコミュニケーションパスを確認します。
コーディング及びビルド
計画時に決定した要件に合わせて、設計書の作成とコーディングを行います。
テスト
作成した機能に関してテストを行います。保守・運用担当者やインフラ担当にも確認してもらい本番環境に適応してもよいことを確認してもらいます。またDevSecOpsを取り入れている場合には、このタイミングでセキュリティの確認を行い、問題がないか確認します。
プロビジョニング及びデプロイ
ネットワークやコンピュータの設備などリソースと今回構築した機能を本番環境に適応します。この時はインフラ担当、保守・運用担当、クライアントとも十分に話し合い、クライアントの業務に影響がないタイミングで本番環境に適応するようにします。
監視
保守・運用担当は該当の機能が正しく動いているか、周辺機能に影響を及ぼしていないか確認しながら、システムの監視を継続します。クライアントは機能のリリースが完了したらユーザーの使用感などのフィードバックを確認し、次の改善に活かします。
DevOps導入のポイント
DevOpsの導入は組織の文化や一人ひとりの考え方に関連するため、なかなか導入までのハードルが高いのが実情です。ここではハードルが高いDevOpsの導入ポイントを説明します。
関係者の理解獲得
1つ目は関係者の理解獲得です。とは言ってもいきなり関係者全員の理解を得るのは難しいでしょう。まずはキーパーソンの理解を得るようにしましょう。例えばクライアントにサービスを提供する会社であればPMやPL、自社のシステム部門であれば、部長や課長などの管理職に理解を求めるようにしましょう。
その後、理解を得た管理職者を中心に開発担当者、運用担当者、インフラ担当者などの各担当者に説明をしてもらい、理解を獲得するようにしていくと良いでしょう。
適切な目標設定
2つ目は適切な目標設定です。いきなりDevOpsの考え方やDevOpsに適したツールを導入しようと考えても、何をいつすれば良いのか分かりません。その結果、アクションが明確にならず、挫折してしまうでしょう。そのため、導入には適切な目標設定が必要不可欠です。
目標設定ではただ画一的にスケジュールを策定するのではなく、自社の状況や文化を確認して策定するようにしましょう。例えば、これまでの自社の開発経験がウォーターフォール型しかない場合では、DevOpsの考え方を理解してもらうのは難しいでしょう。一方、アジャイル開発を中心としている会社では、すでにメンバーはコミュニケーションなどに課題を感じていて、導入が容易になる可能性があります。
DevOpsエンジニア育成の重要性
DevOpsエンジニアとはDevOpsを導入するために、以下のような仕事を行う人材になります。
- 開発担当者と運用担当者、インフラ担当者間の適切なコミュニケーションを支援する
- CI/CD環境の構築や運用、自動化を行う
- コミュニケーションツールやタスク管理ツール、構成管理ツールなどのDevOpsを支援するツールの導入・運用を行う
DevOpsはクライアントにより良いサービスを迅速に提供するために今後も必要不可欠な考え方になります。また、迅速にサービスを提供できることにより、クライアントのロイヤリティが向上し、自社の利益にもつながります。そのためDevOpsの考え方を理解し、上記のスキルを身に着けたエンジニアの育成はますます重要になるでしょう。
まとめ
DevOpsは組織の文化やエンジニア一人ひとりの考え方を変えなければなりません。また、DevOpsを支える様々なツールの導入も検討しなければなりません。そのため、DevOpsの導入には様々なハードルがあることでしょう。
しかし、一度DevOpsを導入してしまえば、クライアントに高品質のサービスを迅速に提供できるようになり、自社の発展にも貢献できるでしょう。
ぜひ、DevOpsエンジニアを育成して、DevOpsの導入を検討してみてください。
—————————————————————————————————————
システム開発、アプリ開発、新規事業立ち上げ、DX化の推進でお困りではありませんか?
日本全国には開発会社が無数にありますが、Webサービスやアプリサービスのスケール(規模拡大)を実現するビジネス推進力やシステムの堅牢性、可用性を意識した設計力・技術力を持つ会社は、多くはなく、弊社は数少ないその一つ。お客様のご要望通りに開発することを良しとせず、お客様のビジネス全体にとって最適な解を模索し、ご提案ができるビジネス×テック(技術力)×デザインの三位一体型の開発会社です。ITやDX全般に関して、何かお困りのことがございましたらお気軽にご連絡いただけたらと思います。
—————————————————————————————————————