AWS開発で「CI/CD」を導入するメリットとは?
はじめまして、パーソルプロセス&テクノロジー(以下パーソルP&T)のKeisuke.Yです。
今回のエンジニアブログでは、私が入社以来開発業務で触ってきたAWSに関連して、「CI/CD」について皆さんにご紹介しようと思います。
自分のプロジェクトの経験もご紹介しますので、「『CI/CD』ってよく聞くけど、何ができるんだろう?」というエンジニアの方に是非ご覧いただければ幸いです。
自己紹介
システムソリューション事業部(以下SSOL)エンタープライズソリューション統括部、東海インテグレーション部 アプリケーション開発グループのKeisuke.Yです。
パーソルP&Tには、新卒で2019年に入社しました。 入社から2年間はAWS Lambdaのアプリケーション開発業務を経験。AWSに関する知識を深めるためにAWS資格を2つ取得し、3つ目を目指して勉強中です。
プライベートでは、最近ゲーム「大逆転裁判」をプレイしました。そして、作中人物として出てきた夏目漱石の著書を読んでみたくなり、今は「三四郎」を少しずつ読み進めています。
はじめに
アプリケーションを開発したり改修したりすると、想定通りに動くことを確認するテストをしますよね。テストはアプリケーションの品質を保証するもので、言うまでもなくとても重要です。
テストで実施する確認そのものは単調なことも多いですが、間違いがないかをチェックすることが目的である以上、気を抜けません。また、例えば想定する状況が複雑である場合、手作業だと状況設定そのものに間違いが生じがちで、それを防ぐために何度も確認が必要になることもあります。
しかし、開発や改修のたびに都度テストの設定をし、実施すると大変膨大な作業になります。開発や修正した部分に限定して、その部分だけテストすればいいのでは?なんて思うかもしれませんが、当該部分が本当に他の部分に影響がないと断言することは難しく、影響があるのであれば毎回前箇所でテストを実施しない限り品質の保証はできません。
重要だけど、時間がかかるテスト。これを自動化して、生産性を高める開発手法が「CI/CD」です。そして、そんな「CI/CD」を簡単に導入できるクラウドサービスがAWSです。
AWSとは
まずは、ご存知の方も多いかと思いますが、クラウドサービスAWS(アマゾンウェブサービス)について改めて説明します。皆さんが通販で利用するECサイト「Amazon.com」が提供する、パブリッククラウドサービスです。
クラウドサービスを利用し開発するメリットとしてよく言われるのは、導入のしやすさと運用・管理の手間が少ないことです。
自前でサーバーを用意する(オンプレミス)場合は、サーバーの購入や物理的な設置、管理のための設定が必要となりますが、クラウドサービスを利用する場合は既に準備されたリソースを借りることができます。サーバー環境の管理もクラウドサービス側で提供してくれるため、利用側は管理をする必要がありません。
一方、デメリットとして、クラウドサービスはインターネットを介して共有する仕組みである以上、通信障害のようなインターネット上での問題があると利用できなくなってしまいます。また、クラウドサービス側が提供するリソースそのものに障害が発生した場合、オンプレミスなら自分たちで対応できますが、クラウドサービスでは基本的に問題が解消されるのを待つことしかできません。
AWSもクラウドサービスの一つとして、上述のメリット・デメリットを持っていますが、特にクラウドサービス側から提供されるサービスが多岐にわたる、という強みがあります。ストレージやデータベースのような基本的なものから、機械学習(ML)、AI、IoTといった最新技術を活用するためのサービスまで揃っています。
これら提供されるサービスの中には、今回テーマとしている「CI/CD」のためのサービスも存在します。
「CI/CD」とは
「CI/CD」とはContinuous Integration(継続的インテグレーション)とContinuous Delivery(継続的デリバリー)の略称です。
継続的インテグレーションは、ソースコードの変更を反映させると自動的にビルドし、テストをする開発手法です。継続的デリバリーは、そこからさらに拡張し、実稼働の環境へリリースする準備を完了させる、またはリリース自体を完了させるまでを自動化する開発手法です。
「CI/CD」が実現できれば、自動テストにより開発者の手間が削減されることはもちろん、早期のバグ発見が可能になり、品質と生産性の向上が見込めます。
私が実際に担当したプロジェクトの事例
まずはAWSと「CI/CD」についてご説明しましたが、ここからは私が実際に関わったプロジェクトの事例をお伝えできればと思います。
私は先日、大手自動車メーカーグループ企業様の動的施設情報収集システム(地図上の施設における動的情報を収集するシステム)の開発を担当しました。
このシステムは複数のアプリケーションから成り、データの受信、変換、登録をそれぞれ別のアプリケーションで処理していたのですが、当初の想定以上に実装された機能が多くなり、開発スケジュールが逼迫し、時間が足りない状況が続いていました。
度重なる機能追加に伴い、テスト確認内容がどんどん増えていくのにテストに割ける時間は減る一方。毎回の確認事項と手順の多さに苦労をしていたのですが…もっとテスト工程を効率化できないかを調べ、「CI/CD」という手法を知ることができました。
このプロジェクトの開発ではAWSを利用しており、私自身AWSの知見を増やすため資格の勉強を並行して行っていた中で、AWSには「CI/CD」のためのサービスがあることを知り、導入に挑戦することになったのです。
AWSで「CI/CD」を導入するメリット
数あるクラウドサービスの中から、AWSを選ぶ利点は先述した通り、充実した開発サービスの提供にあるのですが、その中には「CI/CD」のためのサービスが存在します。「AWS Codeシリーズ」と言われるものです。
Code Commit : ソースコードをGit管理するサービス
Code Build : ビルドやテストをするサービス
Code Deploy : ソフトウェアのデプロイを自動化するサービス
Code Pipeline : 継続的デリバリーサービス
Code Commitでソースコードを管理し、Code Buildで自動テストを行い、Code Deployがテストしたソフトウェアをデプロイします。Code Pipelineでこれらの工程をまとめて、一つの流れ(パイプライン)として管理することができるようになります。
例えば上記のパイプラインでは、それぞれの開発者がソースコードを変更して共通リポジトリである「Code Commit」にプッシュまたはマージすると、自動的に「Code Build」がビルドとテストを行います。問題がなければ次工程である「Code Deploy」に自動遷移し、ビルドされたソフトウェアをLambda(AWSのサービス。プログラム実行環境。)にデプロイされます。
Code Build上で煩雑な確認事項・手順を設定してさえおけば、プッシュ・マージのたびに自動的に実行され、問題なければそのままデプロイまでを完結できるため、これによりテストにかかる時間を大幅に削減することができました。
さらにAWSが提供するサービスを利用すれば、私が経験したプロジェクトのように一つのシステム内に複数のアプリケーションが存在する場合、あるアプリケーションをデプロイした際に他のアプリケーションに問題が生じていないかを確認するテスト(所謂結合テスト)も自動化することができます。
※具体的には、Event Bridge(イベントを受信して、他のサービスのトリガーにできるAWSのサービス)を利用し、CodeDeployの成功をトリガーに結合テスト用のCodeBuildを実行するよう設定します。
終わりに
今回は自分のプロジェクトの経験をもとにAWSで「CI/CD」を導入するメリットを紹介いたしました。
このような自動化技術を活用することで、開発工程の品質を高めつつ効率化することは、結果的にパーソルグループのビジョンである「はたらいて、笑おう」の実現にも繋がっていくと思っています。
皆さんの実務に少しでもお役立ていただければ嬉しいです、最後までお読みいただきありがとうございました。
パーソルクロステクノロジーでは幅広いポジションで積極的に採用中!
超上流から関われるプライム案件にジョインしていただけるエンジニアを募集しています。企画から保守運用まで一気通貫で関われるSIerの組織で、エンジニアとしてのキャリアアップを目指しませんか?
現在募集中の職種は、以下リンクの事業領域「システムインテグレーション」をご覧ください。
弊社のTechコミュニティにご登録頂いた方には、今後もこのようなエンジニアブログの情報や、イベント開催情報をいち早くお届けいたします。SNSをフォローする感覚でお気軽にご参加ください。