COLUMN誰でもわかる!お役立ちコラム

AWS活用支援コラム

DevOpsってなに?CI/CDって?

DevOpsとは何か?

クラウドを利用していると、DevOpsという言葉を耳にすることが多いかと思います。DevOpsとは、いったいどういうもので、どういうメリットがあるのか、本記事で記載していきます。

DevOpsの定義は?

まず、『DevOps』という言葉に、明確な定義はない、ということに注意しましょう。DevOpsとは、高速でアプリケーションをリリースするためのツールの組み合わせや企業文化、方針、ナレッジを指します。『Dev』はDevelop、すなわちアプリケーションやプロダクトの開発プロセスを指します。

『Ops』はOperation、つまりアプリケーションやプロダクトの運用プロセスを指します。高速でアプリケーションをリリースし、品質やサービスの向上がビジネス上の目的であるDevの担当者と、システムを安定稼働させることがビジネス上の目的であるOpsの担当者は、目的の違いが背反しています。

これらの異なる目的を持った者同士が、ビジネスの成功のために互いに協調し、ツール等でシステムの運用品質・リリース速度を向上させていくことが、DevOpsの意味であり、目的になります。

誤解されがちなDevOps

DevOpsという言葉自体があいまいなものであるため、解釈の上では様々な誤解も生じてしまいます。よくある誤解について、それぞれ説明していきます。

誤解1. DevOpsは「DevOpsエンジニア」を雇えば大丈夫だ

DevOpsは先述の通り文化やツールの組み合わせであるため、人を雇えば達成できる、というものではありません。Process、People、Productの”3P”の視点をもって、バランスよく目指していくことが大切です。

誤解2. DevOpsは最新のツールを採用することだ

DevOpsにとってツールの組み合わせが重要であることはもちろんですが、最新のツールが必ずしもいいわけではなく、組織や、予算に見合った効果が期待できるツールを適切に選択していくことが重要です。

誤解3. DevOpsはシステム部門だけの問題だ

DevOpsの最大の目的は、高品質で高速なリリースを繰り返し、ビジネスの成功やプロダクトの競争力を強化することが目的です。したがって、マーケティング部門や、デザイン部門、経営管理部門も積極的にかかわっていくことが成功のカギとなります。また、ツールを導入するといった一定の初期投資が必要になるため、経営層の理解も必要です。

誤解4. DevOpsはレガシーな環境に適用できない

レガシーな環境であれば、DevOpsのような文化を根付かせることは経営層や周囲の理解等が必要になり、長い道のりになることは間違いないですが、ツールの導入や業務プロセスの変換といった、着手しやすい領域から実践していくことは可能です。

AWSでのDevOps導入を実現するスタイルズのDevOps(CI/CD)導入支援サービスはこちら→

DevOpsとアジャイル開発との違いは何か?

DevOpsとアジャイル開発は、アプリケーションを高速でリリースするための仕組みとして同列に語られることが多いですが、それぞれ全く別の概念になります。

アジャイル開発とは何か

アジャイル開発とは、ソフトウェアやシステムを開発する手法の1つです。旧来のウオーターフォールとよく比較されるモデルです。アジャイル(Agile)を直訳すると「素早い」「機敏な」という意味になり、システム開発におけるフェーズを、大きな期間で区切ることなく、小さな期間での実装とテストを繰り返して開発を進めていきます。

具体的に言うと、数日~1週間で区切ったイテレーション(iteration)と呼ばれるサイクルを繰り返して開発を進めます。一方でDevOpsは、対立することが多かった開発担当者と運用担当者の連携を強化するための考え方や仕組みのことを指しています。

CI/CDとはなにか?

CI/CDとは、「Continuous Integration/Continuous Delivery」の略で、日本語では継続的インティグレーション/継続的デリバリーと呼ばれています。CI/CDはシステムやアプリケーションの変更を常に自動でテスト、自動で本番環境にリリースを行う、といったシステム開発の仕組みを意味します。CI/CDを取り入れると、バグを素早く発見したり、変更を自動でリリースしたりできるようになります。

CI(Continuous Integration 継続的インティグレーション)とは?

CIとは、CI/CDのなかでも、システムやアプリケーションの変更を常に自動でテストすることを指しています。通常、アプリケーションやシステムの開発者はコーディングが完了したあと、テストをおこない、問題がなければコードリポジトリにコードをPushする、といったことを行っています。

このような開発プロセスを手動で行っていると非常に時間がかかってしまい、高速なアプリケーションの改善が不可能になります。このような状態を改善する為に、アプリケーションのビルドや変更テスト、リポジトリへのPushを自動化する仕組みを、CIといいます。

CD(Continuous Delivery 継続的デリバリー)とは?

CDとは、CI/CDのなかでも、自動で本番環境にリリースを行う個所を指しています。従来であれば、テスト済のノードは安全に本番環境へリリースする為に、メンテナンス時間を設定し、手順の用意や承認プロセスを経た後に、操作ログなどの監査証跡を取得しながらリリースを行っていました。

このプロセスを手動で行っていると、コードの変更プロセスを高速で行っても、リリースの部分がボトルネックになってしまい、アプリケーションの変更が高速化されませんでした。CDの仕組みの中ではこれらのプロセスをほとんど自動で行い、システムやアプリケーションの変更を高速で行います。

CI/CDを導入するメリット

CI/CDを導入する最大のメリットは、ビジネススピードの向上です。どのようにビジネススピードが向上するのか、順を追ってみていきます。

  1. テスト自動化ツールによる手戻りの防止が行われ、テスト工程の削減による長期的なコスト削減が見込める
  2. 小さな失敗と成功を高速で繰り返すことによるナレッジの蓄積が行われ、アプリケーションやプロダクトの改善を高速で行う文化が定着する
  3. ナレッジの蓄積が積み重なることにより、成功のためのナレッジが雪だるま式に定着し、品質が向上する。
  4. リリース・デプロイの自動化が進み、人的ミスが加速度的に減少する。リリース・デプロイの速度と品質が向上する。
  5. コストを削減しつつ、品質とスピードが向上する状態が作られるため、ビジネスの高速な変化に即座に対応することができる。

上記のような環境が整っていると、競合他社のアプリケーションよりもビジネスの変化に容易に対応できるようになります。BtoCのアプリケーションはもちろんのこと、BtoBのアプリケーションにおいても、法改正への対応や、顧客からのフィードバックをシステムに反映することが高速になり、顧客満足度の向上につながります。

AWSでのDevOps導入を実現するスタイルズのDevOps(CI/CD)導入支援サービスはこちら→

CI/CDパイプラインに必要なツール

CI/CDを行うツール群をひとまとめに、「パイプライン」と呼ぶことがあります。このパイプラインを構成するために必要なツールについて、それぞれ見ていきましょう。

コードリポジトリ/成果物リポジトリ

アプリケーションのコードは統一的に管理することで、コードのデレーションなどを防止し、安全なコードの変更が可能です。Git(具体的には、GitプラットフォームとしてのGitHub、GitLab)は、差分のチェックやレビューコメントの付与などが容易に行えます。

CIツール

自動テストを行うツールになります。広く使われているツールとして、JenkinsやCircleCIが挙げられます。

構成管理ツール

ITシステムのインフラがどのように構成されているかを記録する目的で使います。CI/CDでは時折インフラの構成変更も行うため、draw.ioやWikiなどで構成管理を行うのもいいですが、インフラの構成もAWS CloudFormationやAnsibleなどのInfrastructure as Code(IaC)ツールを用い、アプリケーションと同様にコードで管理しておくといいでしょう。

ビルドツール

コードを、本番環境で動作できる形式にアプリケーションを構成することをビルドといいます。AWS CodeBuildやMavenといったツールが挙げられます。

テストデータ準備ツール

データベースなどを利用するアプリケーションでは、テストデータの用意も必要です。Generatedata.comなどでデータを生成し、S3やGCSといったストレージに格納して再利用可能な状態にしておく、といったアクションが考えられます。

テストツール

実際にテストを行うツールです。アプリケーション単体なら先述のJenkinsもテストツールとして活用可能ですが、Webアプリ、モバイルアプリといった場合にはSeleniumやAWS Device Farmも利用してみるといいでしょう。

まとめ

ビジネスを高速に改善させるためには、アジャイル開発やCI/CDといった考え方を取り入れて、アプリケーションの高速開発を実現することが重要です。後続の記事では、AWSにおいて、CI/CDを実現するための各種サービスやその実践方法をご紹介します。