DevOpsとは? アジャイル開発との違いやプロセス、導入方法などを解説!|東京のWEB制作会社・ホームページ制作会社|株式会社GIG

DevOpsとは? アジャイル開発との違いやプロセス、導入方法などを解説!

2022-12-04 制作・開発

AWSやAzureに代表されるクラウドサービスが急速に普及する昨今。それと同時に、「DevOps(デブオプス)」と呼ばれる開発概念も注目されてきています。

じつは、クラウドサービスとDevOpsは非常に相性の良い組み合わせで、DevOpsの考え方はクラウドサービスを利用してのソフトウェア開発には欠かせないといっても過言ではないでしょう。

しかし、そうは言ってもDevOpsの概念をイマイチ理解できていないIT担当者の方も多いのではないでしょうか。

今回はDevOpsのキホンから、混同されがちなアジャイル開発との違い、導入プロセスなどに焦点をあて解説していきます。

DevOpsとは

DevOpsとは、「開発(Development)」と「運用(Operations)」を組み合わせた造語です。開発チームと運用チームが連携し、柔軟かつスピード感をもってシステム開発に取り組むことを指します。

しかし、システム開発に携わったことがない方からすれば、「えっ、そんなの普通じゃないの?」と思われるかもしれません。

確かに、小規模なシステムならば、開発チームと運用チームが同じこともあります。ですがシステムの規模が大きいケースの場合、プログラミングを通じて機能の追加・改善を行う開発チームと、システムの保守・運用を行うチームが別々というパターンは多いです。

そして2つのチームが存在するということは、残念ながら利害関係の不一致から両者が対立するケースもあるということです。

開発チームも運用チームも、価値のあるサービスをユーザーに届けるという目的は同じはず。対立して足を引っぱり合うようなことは本来必要ありませんが、現実はトラブルが後を絶ちません。

もちろん、チームの内部対立で開発やリリースが遅れるようなことは絶対にあってはなりません。急速に変化し続けているビジネスシーンに対応するため、スピーディーなソフトウェア開発が求められている昨今ではなおさらです。

そこで、ありがちな開発チームと運用チーム間の対立を解消し、協力して円滑にソフトウェア開発を進めていこうというDevOpsの考え方が、急速に注目されるようになりました。

DevOpsとアジャイル開発の違い

DevOpsと同じような文脈でよく使われるものに「アジャイル開発」というものが存在します。

アジャイル開発とは、ソフトウェア開発手法のひとつで、従来型のウォーターフォール開発のように長いスパンをかけてソフトウェア開発を行うのではなく、ソフトウェアを機能ごとに小さく分割し、「計画→設計→開発→リリース」を短いスパンで何度も行い開発を進めることを指します。

DevOpsは、「開発チームと運用チームが協力することが何よりも大切」という考え方のひとつです。具体的なツールやワークフローだけを指す言葉ではなく、企業の文化や考え方といった組織的な面も含め、幅広い概念として用いられます。

一方アジャイル開発は、具体的な開発手法のことです。しかし、アジャイル開発を実現しようとすると、DevOpsの考え方やアプローチが必要となることから、両者は非常に関連性の高い概念と手法ともいえます。


アジャイル開発に強い開発会社の選び方とは? 現役エンジニアが解説!|東京のWEB制作会社・ホームページ制作会社|株式会社GIG

giginc.co.jp

og_img

アジャイル開発の費用/料金相場はいくら? 現役エンジニアが解説!|東京のWEB制作会社・ホームページ制作会社|株式会社GIG

giginc.co.jp

og_img

DevOpsのメリット

DevOpsを導入するメリットは、大きく分けて2つが考えられます。

メリット1. 開発スピードが早くなる

開発チームと運用チームが連携して作業を行うため、双方にとっての余計な作業がなくなり、開発プロセス全体が高速化します。それが素早いシステムリリースにもつながってきます。

Webアプリやスマホアプリなどは特に素早いリリースが求められています。リリースまでの時間を短縮することで、市場の需要やトレンドに合ったシステムやサービスが開発できるはずです。

メリット2. 生産性が上がる

生産性が上がることもメリットのひとつ。DevOpsはサービスをリリースするまでのスパンが基本的に短いため、ユーザーからのフィードバックを得やすいのが特徴で、システムの仕様ミスやバグを早期に発見することが可能です。

開発チームと運用チームの連携がスムーズにいけばいくほど、効率的な情報のやり取りが可能になります。これは不要な作業の工数を削減することにもつながり、時間や費用の無駄も減らせるでしょう。

DevOpsのデメリット

ここまでDevOpsのメリットをあげましたが、もちろんデメリットも存在します。

DevOpsはあくまで概念であり、フレームワークではありません。自由度が高いぶん、開発チームと運用チームが密に連携しあい、ブラッシュアップさせていくことが何よりも大切です。

そのため、チームや部署の間に壁があったり、変化を受け入れにくい社風だったりする場合、プロジェクト自体が頓挫する可能性もあります。

また、基幹システムの開発やスケジュールを厳密に管理する必要性のあるプロジェクトなどには、従来型のウォーターフォール開発が向いています。とりあえずDevOpsを導入するのではなく、プロジェクトや組織体制を考え、最適な開発手法を選びましょう。

DevOpsの7つのプロセス

DevOpsでは、開発チームと運用チームの両者が、積極的に連携しながら業務を進めていくことが大前提。しかも一時的な取り組みではなく、継続的に連携することが重要です。

ビジネスにおいて、継続的な改善を実行していく手法にPDCAサイクルが存在しますが、DevOpsにも同様に、継続的な改善を行うための7つのプロセスが存在します。以下のステップを順に、かつ継続的に回していくことが、DevOpsを導入するうえでは重要です。

1. プラン

プランでは、おもにアジャイル開発の手法を用いて、管理しやすいよう小さなタスク(機能)に分けて計画を立てます。

優先順位の高い機能や不要な機能の洗い出しを行うこと、またはユーザーからのフィードバックを継続的に収集し、それらを運用チームがまとめ、開発チームのために優先順位をつけてあげることも大切です。

開発チームと運用チームがアイデア、目標、要件、ロードマップ、ドキュメントなどをいつでも共有できる環境をつくることも、プランの役割といえます。

2. コード

プランで決めた開発要件に沿って、プログラマーがプログラミング言語を用いてシステムの開発を行います。

この段階でどのプログラミング言語を使うかは決まっているかと思いますが、言語の種類自体はそこまで重要ではありません。プログラミング言語はあくまで手段なので、要件に沿ったものが開発できる場合、極論ですがどの言語でも良いとまでいえます。

また、規模が大きいプロジェクトなどでは、プログラマーの数も当然多くなります。その際に複数人が同じ画面を同時に修正してしまうと、プログラムのバージョンがおかしくなり整合性が失われます。

そうならないためにも、ソースコードリポジトリ(プログラムのソースコードを一元的に管理する格納場所)の導入は必須です。代表的なソースコードリポジトリには、GitHubGitLabがあります。

なお、プログラムのバージョン管理もきちんと行っておきましょう。ツールを使うことで前のバージョンに戻したいケースにもすぐに対応できます。

3. ビルド

プログラマーによって書かれたコードは「ソースコード」と呼ばれます。

しかし、このソースコードはあくまで人間が理解できるもので、コンピューターには理解できません。これをコンピューターが理解できる状態に変換する必要があります。この変換作業を「コンパイル」と呼びます。

そして、換作業が完了すればそれで終了というわけでもありません。複数のファイルから構成されるプログラムの場合でも、最終的に1個のファイルに集約する必要があります。

バラバラに存在している複数のコンパイルされたファイルをひとつの実行ファイルとしてまとめ、実行できる状態にすることを「ビルド」と呼びます。

4. テスト

ビルドが完了すれば、実際に実行ファイルを動かしてみて、仕様通りの動きになっているのか、バグは含まれていないかなどを確認するテストに移ります。

動かせばすぐわかる仕様漏れやバグなら対処もカンタンですが、実際は「なぜこの動きをするの?」「データの整合性がとれていない」といった複雑な問題が発生しがちで、その場合はプログラムの内部まで確認する必要があります。

こうしたプログラム内部に潜むバグなどを見つけて改修する作業を「デバッグ」と呼びます。

一昔前は、机上デバッグと言ってソースコードを印刷し机上に並べて、頭の中でデータを流してプログラムを動かしバグを見つけていく手法がとられていました。

しかし今ではデバッグツールも多く揃えられており、プログラム内部で利用されている変数の値やプログラムを一時停止しての動作確認もできるので、ソースコードのどの部分にバグが潜んでいるかを効率的に見つけることができるはずです。

5. デプロイ

動作検証が終われば、次はデプロイです。デプロイ(deploy)には、「展開する、配置する」といった意味があり、システム開発におけるデプロイとは、開発したアプリケーションをサーバー上に展開・配置して、ユーザーが利用できる状態にすることを指します。

Webアプリケーションの場合、実行ファイルをWebサーバーやアプリケーションサーバーに展開・配置し、ファイルを実行することでアプリケーションが動くようになり、ユーザーが利用できる状態になります。

つまり、具体的には以下の作業をデプロイと呼びます。

・実行ファイルを動かしたい環境に展開、配置する
・実行ファイルを実行する

デプロイには基本的にアプリケーションの一時停止やサーバーの再起動が必要ですが、アプリケーションを稼働させたまま、あるいはサーバーの再起動を伴わず行うデプロイは「ホットデプロイ」と呼ばれています。

6. 運用

システムはリリースすればそれで終わりというわけではありません。そこから継続的にサービスを提供するための保守・運用作業が発生します。

保守・運用フェーズで両チーム間の業務を円滑にするポイントは、全員が同じ業務を見れるようにすることです。

たとえば、インシデントが報告された場合、システムのどこに問題があるかを結び付けられ、追跡できるか。またその修正が行われた際に、すぐにリリース可能か。こういった状況を両チームが共有し、作業にあたることが大切です。

インシデントを迅速に特定して修正できるように、保守・運用業務をひとつのプラットフォームにまとめて、ツール運用することも検討してみましょう。

7. フィードバック

リリース後は保守・運用と同時に、ユーザーからのフィードバックを継続的に集めることも必要です。

リリース初期の頃は、ありとあらゆるフィードバックが返ってくるでしょう。たとえ厳しい意見でも、そのフィードバックに耳を傾けることが大切です。

フィードバックを分析して取り入れると、短期的には開発のペースが遅くなるように感じるかもしれません。しかし、長期的に見れば開発効率が上がり、不要な機能をリリースすることもなくなります。

集めたフィードバックは運用チームでまとめ、開発チームに優先順位をつけて渡してあげましょう。そこから次の「プラン」がスタートして、プロセスが回っていきます。

DevOpsの導入方法

ここからは、具体的なDevOpsの導入方法について確認していきます。

1. 関連する部署を含めたプロジェクトチームを構築する

週一回、開発チームと運用チームの代表者数人が集まりミーティングを行い、部署に戻って会議内容を共有する。一見すると普通のミーティングに見えますが、これでは到底DevOpsとは言えません。

双方のチーム全員がリアルタイムで情報を共有し、部署や役職の垣根をなくし、お互いにサポートし合うと同時に、それを支えるためのツールを導入することが、DevOpsのスタートラインです。

また、チャットツールなどの発達により、オンライン上で文字だけのコミュニケーションも成立するようになりましたが、ときには対面でのコミュニケーションも大切です。

直接会話して確認しておけば解決できるような問題でも、会話がなかったために大きな問題となるケースは多いです。対面でコミュニケーションをとる場は必ず設けましょう。

2. 組織文化にDevOpsを浸透させる

DevOpsを企業の業務に活かすためには、組織文化にDevOpsを浸透させ、改善していく必要があります。DevOpsを成功させるためには、以下の4つの考え方が企業文化に必要だと言われています。

・Respect(尊敬)
・Trust(信頼)
・Healthy attitude about failure(失敗に対する健全な態度)
・Avoiding Blame(非難しない)

組織文化にDevOpsを浸透させることで、開発チームと運用チームが積極的に連携し、情報を共有すれば、対立に終止符を打つこともできるでしょう。

3. DevOpsを効果的に実現させるためにツールを活用する

▲出典:カゴヤのサーバー研究室

開発チームと運用チームがスムーズに連携するためには、ツールの活用が非常に重要です。ツールを使うことでDevOpsが導入しやすくなり、成果も上がりやすくなります。

なかでも、特に重要な要素となるのが、CI/CDツールの活用です。

【CI/CDとは?】

CI/CDとは、「Continuous Integration/Continuous Delivery」の略称で、日本語に訳すと、「継続的インテグレーション/継続的デリバリー」となります。

継続的インテグレーションとは、ソフトウェア開発において、本番環境へのデプロイ手前までのビルドやテストといった作業を自動化し、継続的に実行する仕組みのことを指します。代表的なCIツールとしては、JenkinsCircleCIが挙げられます。

継続的デリバリーとは、継続的インテグレーションを拡張したものです。こちらはデプロイまで自動化します。代表的なCDツールとしては、DockerAnsibleが挙げれます。 

つまり、ビルド・テスト・デプロイといった開発工程の作業を自動化し、継続的に行う仕組み全体を「CI/CD」と呼びます。CI/CDツールを活用すれば、開発担当者がプログラムを修正した場合、本番環境へリリースするまでの一連の作業が自動化されるわけです。

CI/CDツールを上手に活用すれば、リリースまで数ヶ月かかっていた作業が、たったの数時間で完了できることも少なくありません。スピードが求められるDevOpsでは、こういったツールの活用が必須です。

DevOps導入の注意点

最後にDevOps導入の注意点についても確認しておきましょう。

注意点1. セキュリティ対策に手間がかかる

頻繁なリリースを予定していない従来型のソフトウェア開発の場合、リリース前のテスト時にセキュリティ診断を実施することが一般的です。

一方DevOpsでは、高頻度でソフトウェアの改修・リリースを繰り返します。そのため、リリースのタイミングで毎回セキュリティ診断を実施するのは手間がかかりすぎてしまいます。

しかしセキュリティ対策をおろそかにするのは論外なので、短期間でのリリースサイクルと、セキュリティ対策を両立させる必要があります。

そこでセキュリティ対策として取り入れておきたいのが、セキュリティテストの自動化です。

自動化されたDevOpsのプロセスの中に、セキュリティテストも組み込むことで、テストの手間を削減し、より素早い開発を実現できるようになります。実際、自動化や継続的な改善といったDevOpsの考え方に、セキュリティの要素も含んだ「DevSecOps」と呼ばれるものも存在します。

こうしたセキュリティ対策は、開発の初期段階から盛り込んでおくようにしましょう。

注意点2. サービス品質の担保が難しい

DevOpsにおいては、開発スピードを重視するため、サービスの品質を保つことが従来より難しいとされています。

DevOpsは短いスパンでのシステムリリースを行うことが大前提にあるため、開発スピードは何よりも大切な要素です。

しかし、今まで行っていたリリースごとの綿密な設計や、大規模なテストの実施は難しくなります。バグを多く抱えたままリリースしてしまう危険が高まるのは事実です。

サービスの品質と開発スピードを両立するために必要なのは、先に見たDevOpsのプロセスを継続的に行える仕組みを作ること。AWSやAzureといったクラウドプラットフォームには、コードデプロイプロセスを簡単にできるサービスがあります。

こういったサービスを上手に活用することで、サービスの品質を担保しやすくなります。

DevOpsを導入したシステム開発はGIGにお任せください

システム開発・運用をスムーズにし、生産性の向上やリリース期間を早めるために、DevOpsは非常に有効な考え方です。

ただ、DevOpsを導入すれば開発・運用はそれでOKというわけではありません。企業としての「変化に対応するマインド」も、DevOps導入における大切な要素となります。

技術の進歩にすぐに適応できるような体制づくりはもちろん、変化を柔軟に受け入れ、継続的な改善プロセスを回すことで、よりクオリティの高いシステム開発ができるようになるはずです。

DevOps導入のご支援が必要な場合は、ぜひGIGにお問合せください。豊富なWebサイト制作実績が示すように、お客様と丁寧で密なコミュニケーションを重ねてきたと自負しております。




WebやDXで困っている方、お気軽にご相談ください

GIG BLOG編集部

株式会社GIGのメンバーによって構成される編集部。GIG社員のインタビューや、GIGで行われたイベントのレポート、その他GIGにかかわるさまざまな情報をお届けします。