資料公開|なぜDevOpsやCI/CDが必要なのか? 内製化やモダンアプリ開発の事例に学ぶ。

公開 : 2022.09.16  最終更新 : 2023.05.31

2022年9月16日にオンラインセミナー『なぜDevOpsやCI/CDが必要なのか?内製化やモダンアプリ開発の事例に学ぶ。』を開催いたしました。

この記事では、クラウドを活用したシステム開発やモダンアプリ開発の事例を通して、DevOpsやCI/CDに関する知識を身に着け、組織に導入する際のポイントや注意点を説明します。

動画で見る

DevOpsとは

DevOps(デブオプス)とは、Development(開発)とOperation(運用)を連携する手法の総称で、両者が協力することで迅速かつ柔軟に変化に対応できる開発環境を整えるための考え方や仕組み指します。
従来の開発プロセスでは長い期間をかけて複数の機能を開発し、数ヶ月に一度や1年に1度のペースでまとめてリリースすることが多く、リリース後はしばらく大きな変更をせず運用するのが一般的でした。
それに対して、DevOpsでは週に一度や数週間に一度程度の短期間でできた機能から順次リリースすることを繰返し行います。半年間同じ機能のまま運用し続けるという状態ではないので、開発と運用の密接な連携が必要不可欠になりますが、DevOpsがうまく回れば従来のやり方と比較して機能のリリースが早まるのはもちろん、リリース後の改修や追加機能開発も迅速に実施できるようになります。

ビジネススピードに対応するために短いサイクルでシステムの開発・改善を繰り返す「アジャイル開発」が普及し、小規模なリリースを頻繁に実施することが求められるようになってきたことが、DevOpsが求められるひとつの背景として挙げられます。

なぜ今DevOpsなのか?

本来、開発からリリースまで素早く行うDevOpsはシステム開発のあるべき姿だといえます。では、今までDevOpsが実現できていないのは何故なのでしょうか?

大きな理由として、開発と運用は求められる専門知識や技術の違いから部署や組織が分かれていることが多く、両者の間に「壁」が存在していたことが挙げられます。
例えば、運用チームには開発チームでは要求されないインフラの専門知識などが必要であったため、開発のメンバーが運用側の作業も担うのは難しいという考え型がこれまでの常識でした。
その結果、開発と運用の連携や引き継ぎにどうしてもコストが発生していました。

一方で、近年はクラウドなどの最新サービスや技術を活用することで運用に必要な労力や専門知識が軽減されるようになり、開発(Dev)と運用(Ops)の境界が曖昧になってきています。
例えば、従来は運用専門のメンバーが担っていた作業の多くを、人手をかけずクラウドサービスに任せられるようになったため、開発メンバーで運用側の作業も担えるようになってきたといえます。
また、開発環境と本番環境に違いがあって当然だった以前とは異なり、最近は開発の段階で本番環境と同じ、もしくはほぼ同等の環境をつくることが容易になったことも開発と運用の一体化が可能になった要因といえます。

従来の開発とアジャイル開発の違いについて知りたい方は、こちらの記事も併せてご参照ください。 「デザイン思考、アジャイル開発、DevOpsを学ぶ

DevOpsにおける主な手法

DevOpsの実現に貢献する要素はさまざまありますが、まず代表的な手法を5つ紹介します。

  • マイクロサービス
    システム設計の手法。システムを細かい「サービス」に分割して、それらサービスを連携させることでひとつのシステムを動かすという考え方で、拡張性・柔軟性に優れている。
  • CI/CD :  継続的インテグレーション/継続的デリバリー
    開発したコードのビルド・テスト・デプロイを自動化すること。早期のバグの発見やリリースの高速化が可能になる。
  • IaC : Infrastructure as Code
    インフラをコードとして管理すること。インフラ構築の自動化やバージョン管理が可能になり、環境の再現が容易になる。
  • モニタリングの自動化
    システムのパフォーマンスやログを監視すること。自動で監視してアラートを通知することで、運用効率化や問題の早期発見が可能になる。
  • 活発なコミュニケーションの促進
    DevOpsはチーム全体でスピード感のあるコミュニケーションが重要となる。従来のメールとファイルのやり取りではなく、チャットツールやwebベースのプロジェクト管理ツールを活用することで、無駄のない開発や運用が可能になる。

 

NCDCでは、マイクロサービスの導入支援も行っています。 マイクロサービスについて詳しく知りたい方は「マイクロサービスとは?」を併せてご参照ください。

DevOpsとCI/CD

DevOpsにおける主な手法をいくつか紹介しましたが、その中から今回はCI/CDについて詳しく説明します。
開発と運用の間には「壁」があると前述しましたが、この壁を超えるために必要な要素の一つがCI/CD だといえます。

CI/CDは、開発と運用の境界にある、開発した機能を本番環境にリリースするための煩雑な作業(ビルド・テスト・デプロイ・リリース)を簡略化・自動化する手法です。
CI(Continuous Integration)は「継続的インテグレーション」を意味し、自動で「ビルド」、「テスト」を実施します。
CD(Continuous Delivery)は「継続的デリバリー」を意味し、自動でアプリを「デプロイ」 、「リリース」します。

既存のよくあるデプロイプロセスはほとんどが手作業だったため、時間を要し、負担がかかる煩雑な作業でした。ユーザーの少ない夜中に一度システムを停止して一晩かけて実施するようなケースが多いと思います。
複数の変更点(数ヶ月間の開発成果)をまとめてリリースするために確認事項も多く、負荷が高いためにそう高い頻度で行うことはできなかったのです。

一方、CI/CDのプロセスでは、従来手作業だった作業の多くを自動化するのでリリース作業が簡単にできます。変更単位の実施でも問題がなく、テストも自動化されているため確認作業も簡略化され、リリース頻度の向上につながるのです。

CIにおけるテスト

CI(継続的インテグレーション)では、多くのテストの自動化に取り組みます。テストの自動化は難易度に対して得られる効果が大きいところから導入するのがおすすめです。全てを自動化するのは容易ではないため、プロジェクトの規模や重要度などを考慮して、どこまで自動化するのか検討する必要があります。

まずは、効果の大きい2つのテストを説明します。

  • 静的解析
    コードを実行せずに、コーディングルールに違反している箇所や脆弱性のある箇所を洗い出す。バグや脆弱性の検出のほかに、コードの可読性や保守性の向上が可能。
  • 動的テスト(単体テスト・結合テスト)
    ソースコードを実際に実行して、コードが想定通り動くかを確認する。テスト用のコードを書いて動かすことで実行できる。

動的テストの方はテスト用のコードが必要なため静的解析よりは手間がかかりますが、単体テストまでは導入の難易度に対して得られる効果の方が大きくなるはずなので、導入してみるのがお勧めです。

次に、UIテストについて説明します。

  • UIテスト
    画面を実際に操作して、画面の表示や画面崩れがないかを確認します。自動化するには専用ツールの導入や設定が必要です。

UIテストの導入は難易度が高くコストがかかるため、人が手動でテストを行うのと比較して自動化の効果を見つつ段階的に進めていくことが重要です。

CI/CDが実現すると開発が楽になる

リリース作業が素早くできること、テストが自動化できること以外に、開発速度の向上もCI/CDのメリットとして挙げることができます。
先に、CI/CDができる背景として、従来は多くの専門知識が求められていた本番環境の構築が簡単にできるようになったことを紹介しましたが、それは本番同等の開発環境も簡単に作れることを意味します。
手間なく本番同等の開発環境が用意できれば、​開発中の動作確認も楽にできるようになるため、開発速度も向上します。

CI/CDによりリリース時のミスも減らせる

このようにCI/CDを実現すると多くのメリットがありますが「本番環境へ自動で適用されるのは怖い」という不安を聞くこともあります。その場合は、例えば「管理者が承認したときのみ本番適用が実行される」など、誤操作を防ぐ設定をすることが可能です。​開発者が本番のソースコードを直接触れないようにアクセス権を設定することもできるので、​承認や権限を含めて事前の設定をしておけば、人が手作業でリリースすることに比べてミスを減らすことが可能です。

DevOpsの実現と内製化

クラウドの活用とCI/CD

ここからは、DevOpsの実現に向けた具体的な準備について説明します。
従来のシステムでDevOpsができていなかったのであれば何からの理由があるはずで、複雑なシステムのままDevOpsに取り組もうとしてもテストやリリース作業を自動化することは困難だといえます。
そのため、はじめに従来型のシステムからクラウドのサービスなどを活用して処理を自動化しやすい(クラウドに適した)システムに変更する必要があります。

例えば、従来型のシステムではWebアプリをリリースする際に次にあげる10の手順が必要だったとします。

  1. ハードウェアやVMの設定をする
  2. OSの設定する
  3. Webサーバを構築・設定する
  4. ビルド環境を構築・設定する
  5. アプリのソースコードを用意する
  6. ビルドする
  7. 稼働中のシステムを止める
  8. アプリを置き換える
  9. 再稼働する
  10. 動作確認する

この10の手順を維持したまま各手順に自動化の設定をしていくことはとても大変であまり効率のよいやり方ではありません。

一方で、クラウド利用を前提とした構成に作り変えて、AWS Amplifyというアプリを高速に構築できるサービスを利用すると、以下のような手順で簡単にWebアプリをリリースできるようになります。

  1. ブラウザで、AWSの画面からGitHubのリポジトリを連携する
  2. GitHubに最新のソースコードを置く→AWSが自動でリリースする

クラウドが利用できない場合のCI/CD

もちろん、クラウドを使用していない既存プロジェクトに、上記ようなのクラウド利用を前提とした構成を適用するのは難易度が高いため、最初から本番に適用するのはリスクが大きくなってしまいます、その場合、まずは開発環境だけを自動化することもプロジェクトの改善に有効です。
実際に、本番環境にクラウドが使用できないオンプレミスが必須のプロジェクトで、​開発環境だけクラウドを使って自動でデプロイすることで、開発の効率化ができている事例もあります。

DevOps, CI/CDと内製化

ここまでDevOpsやCI/CDのメリットについて説明してきましたが、これらのメリットを享受するために、以下2つの理由から内製化のチームへの導入が向いています。

1つ目に、チームで一体的な運用がしやすいことです。
外注の場合、契約やセキュリティの問題で外部メンバーとの間にどうしても「組織間の壁」が存在してしまいます。一方で、内製化の場合はこの壁は取り除けるので素早い動きがしやすく、また、対象が業務システムなどの場合は利用者も社内にいるのでフィードバックも迅速に行うことができます。

2つ目に、高度なインフラ要員が不要なことです。
前述したとおり、DevOpsでは外部サービスやクラウドを活用することで実現するので、従来のようにインフラ専門の人材がいなくても開発チームを立ち上げることができます。そのため、今後内製化を進める場合は最初からDevOpsを目指すのが向いています。

DevOpsやCI/CDの実例

ここからは3つの実例を用いて、DevOpsやCI/CDについて説明します。

技術的な話や専門用語が増えますが、そこまで詳しい知識がない方でも、どんなツールがあって何をできるのかイメージを掴んでいただくことはできると思います。

例1. AWSとGitHubを利用したCI/CD

1つ目は、前述したWebアプリを簡単に作れるAWS Amplifyをフル活用した例です。
ソースコードをGit Hubで管理し、GitHub内に本番用のソースコードを置くことで、バックエンドやフロントエンドの自動デプロイを実行できる仕組みになっています。一部、GitHub内でテストを完結するGitHub ActionsというCI/CDツールを使用していますが、基本的にはAWSの仕組みをフル活用して構築したアプリの実例です。

本番リリースをする場合、作業自体は10分、あとは自動でデプロイしてくれるのを待つ時間が20分、トータル30分程度で完結できます。従来までのリリース作業と比較すると、労働時間を大幅に短縮できるのではないでしょうか。

そのほかDevOpsの要素として補足すると、運用と監視を行うAmazon Cloud Watchという仕組みを使ってエラーやアラートをSlackに自動通知することもでき、何か起きた場合もすぐに対応することが可能です。

例2.AWSのみで構築したCI/CD

2つ目に、AWS上だけで完結する例を紹介します。セキュリティの関係でGitHubが使用できない場合など、参考にしてみてください。
AWSが持つCodeシリーズの中から、ソースコード管理をAWS Code Commit、CI/CDはAWS Code Pipeline とAWS Code Buildを使用します。 Codeシリーズを用いることで、自社のAWSアカウント内だけでコード管理からCI/CD、自動デプロイをして利用者が使用するところまで完結できます。

例3.AzureでのCI/CD

3つ目は、Azureの例を紹介します。
Azure DevOpsを使用してAzure内だけで完結することが可能です。ソースコード管理はAzure Reposを、CI/CDにはAzure Pipelines(テスト・ビルド)とAzure Web Apps(デプロイ)を使用し、アプリの本体を自動でテストとデプロイできる仕組みになっています。また、Azureにも運用監視ができるAzure Monitorがあり、運用監視を効率的に行うことができます。Azure DevOpsを使用すると、Azure ADで開発者の一元管理ができることが大きなメリットとして挙げられます。

CI/CDツールの紹介

よく使われるCI/CDツールを紹介します。全てリンクを付けていますので、詳細は各サイトをご参照ください。

CI/CDツール​

  • GitHub Actions
    開発プラットフォームGitHubに付属するCI/CDツール​
    世界中で使われているため、世の中の知見も多く非常に使いやすいツールです。
  • GitLab CI/CDGitLab Runner
    オープンソースの開発プラットフォームGitLabのCI/CDツール​
    セキュリティ上、GitHubが使用できない場合はこちらを使用すると良いと思います。
  • Azure Pipelines
    Azureの開発プラットフォームAzure DevOpsが提供するCI/CDツール​
  • CircleCI
    Circle CIが提供するCI/CDツール。複数のプラットフォームに対応​
  • ArgoCD
    Kubernetesへのデプロイを自動化するCI/CDツール

次に、CI/CDを便利にするサービスやツールを紹介します。

クラウドサービス​
AWS​

  • AWS Amplify
    ウェブアプリやモバイルアプリを簡単に構築​
  • AWS Lambda
    インフラを管理することなくコードを実行​

Azure

  • Web Apps
    ウェブアプリを簡単に構築、デプロイ、管理​

Google​

  • Firebase
    モバイル・Webアプリケーションを簡単に構築できるプラットフォーム​
  • Cloud Functions
    クラウド上で簡単にコードを実行できるGCPのサービス​

その他、便利ツール​

  • Serverless Framework
    サーバレスなアプリケーションを管理・デプロイできるツール

DevOpsやCI/CDを導入する際の注意点

クラウドやCI/CDを使って開発効率化を進めることが望ましいですが、リスクやデメリットもゼロではないので、DevOpsやCI/CDを導入する際の注意点も3点ご紹介します。

1つ目に、作業が簡単なツールほど制約が多いことです。
例えば、​CI/CDを動かす環境の処理時間や通信量、同時実行回数に対する制約(または課金)には注意が必要です。​ハードウェアに依存する機能を動かそうとすると(たとえば画像処理などが)うまく作動しない場合もあります。

2つ目に、クラウドに依存しすぎるとローカル環境でのテストがしづらい​ことです。
簡単なテストだけを行いたい時でも毎回クラウドに繋ぐ必要があると不便に感じることもあるかもしれません。

3つ目に、適切に管理できないと必要以上の費用が発生することです。​
例えば「コードを修正する度にiPhoneのアプリをビルドする」というCI/CDを作った場合、修正のたびに自動的にクラウド上のMacが動き続けるため高額な請求になることがあります。​このような場合は自動ビルドを1日1回に抑えるなど、適切な設定が必要です。

なんでも一律にDevOpsやCI/CDを導入するのがベストというわけではないので、検討の段階でプロジェクト規模や影響度を考慮した最低限の慎重さは必要です。

DevOpsやCI/CDのご相談はNCDCへ

NCDCは、AWSの「内製化支援推進AWSパートナー」に参加しており、豊富な実績と知識で内製化をサポートすることが可能です。
クラウドネイティブなシステムの設計や、柔軟なシステム運用を可能にする先進的な開発手法などの知見・技術をお伝えすることで、ユーザー企業が自走できる開発チームを社内に立ち上げる支援をしています。
DevOpsやCI/CDの導入はハードルが高いとお悩みの方は、ぜひ一度NCDCにご相談ください

ページトップへ

お問い合わせ

NCDCのサービスやセミナー依頼などのお問い合わせは
下記のお電話 また、お問い合わせフォームよりお気軽にご連絡ください。

050-3852-6483