Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

NCDC
September 16, 2022

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

ユーザーのニーズに素早く・柔軟に対応できるアプリケーション開発体制を整えるために、内製化やアジャイル開発、DevOpsに取り組む企業が増えています。
さらに、それを支える仕組みとして、CI/CD(継続的インテグレーション/継続的デリバリー)が注目を集めています。

内製化、アジャイル、DevOps、CI/CD…これらひとつ一つの言葉の意味は知っていても、何が重要なのか? 具体的にどのような体制で、誰が、どのツールを用いて実践すれば良いのか? 総合的に理解するのはなかなか難しいのではないでしょうか。

本セミナーでは、モダンなアプリ開発に欠かせないクラウドやCI/CDツール、アーキテクチャに関する豊富な知見を持つNCDCのコンサルタントが講師を担当。
DevOpsやCI/CDを実現した事例をご紹介しつつ、それらのプロジェクトで用いた基本的な考え方、主要ツール、導入時の注意点などをご紹介します。

NCDC

September 16, 2022
Tweet

More Decks by NCDC

Other Decks in Technology

Transcript

  1. 茨木 啓太 シニアITコンサルタント AWS Certified Solutions Architect – Professional 2

    NCDCにて、システムのインフラ構築からWeb サービスのバックエンド開発・モバイルアプリ開 発まで、幅広い領域での開発を担当 複数のプロジェクトで、AWS、Azure、GCPなどの クラウドを活用たモダンなアプリの設計・開発や、 DevOpsやCI/CDの構築・運用の実績を持つ
  2. 私たちにできること① l デジタルビジネスに必要な要素にフォーカスし、⼀元的に提供しています。 l スモールスタートでの検証から、本開発・継続的な改善までサポートします。 4 ワークショップを中⼼とし た合理的なプロセスで、ビ ジネスモデルの検討からUX デザインまで、迅速に⾏い

    ます。 関係者が多数いる場合の組 織横断、会社横断のファシ リテーションも得意です。 新規性の⾼いプロジェクト ではMVP(Minimum Viable Product)を⽤いた検証を⾏ うなど、⽬的に応じて段階 的な開発を企画します。 早い段階でモックやプロト タイプを⽤意してユーザの 評価を確認します。 ユーザとのタッチポイントとなる各種デバ イスのフロントエンドデザインから、クラ ウドサービスを駆使したバックエンドの開 発まで。多様なテクノロジーをインテグ レーションします。 l AI / IoT / AR l モバイル・ウェブ アプリ開発 l クラウドインテグレーション l システムアーキテクチャコンサルティング など ビジネスモデルのデザイン スモールスタート・PoC システム・インテグレーション ユーザ視点を⼤切にした アイデア・企画 モックやプロトタイプ の開発・検証 システム・アプリ開発 継続的な改善
  3. 私たちにできること② l 社内に最適な組織がない場合の組織づくりや、⼈材育成、エンジニアによる技術移管。そ してマーケティング等の⽀援まで、幅広くお客様をサポートします。 5 ビジネスモデルのデザイン スモールスタート・PoC システム・インテグレーション ユーザ視点を⼤切にした アイデア・企画

    モックやプロトタイプ の開発・検証 システム・アプリ開発 継続的な改善 DX推進やデジタルビジネスの創出時に求められるプロセスを多⾯的にサポート DX戦略⽴案 ⼈材育成 技術移管 マーケティング DX組織構築⽀援 アジャイル導⼊⽀援 ⼿法や技術の選定 ブランディング 実現した新規サービスの認知 拡⼤や販売の⽀援例 DXやデジタルビジネスの創出 を内製化していきたいお客様 への⽀援例
  4. Business 事業領域の推進 Design ユーザ視点での設計 Technology 技術による課題解決 Innovation • コンサルティング •

    新規サービス企画 • PoC⽀援 • デザイン思考 • UX/UIデザイン • モバイル・Web先端技術 • IoT / AI / AR • クラウドインテグレーション 6 NCDCのサービス体系
  5. そもそもDevOpsとは何か l Dev(開発)とOps(運用)をうまく連携するための手法の総称 10 • 計画をたてる • コードを書く • ビルドする

    • テストする Dev • リリースする(デプロイする) • オペレーションする • モニタリングする Ops
  6. 従来の開発とDevOpsの違い l 従来の開発 l 複数の機能を開発後に、まとめてリリース l リリース後は、同じ機能でしばらく運用を続ける 11 Dev(機能1) Dev(機能2)

    Dev(機能3) Ops リリース l DevOps l 短期間でのリリースを繰り返す l リリース後も、次の機能開発を素早く実施する Dev(機能1) Dev(機能2) Dev(機能3) リリース Ops リリース Ops Ops リリース 数ヶ月に1回しか リリースできない! 毎週リリースしても 運用が周る!
  7. なぜ、今、DevOpsなのか? l そもそもとして本来は、DevOpsが望ましい l なぜ、今までDevOpsが出来ていないのか? l Dev(開発)とOps(運用)が別のチーム → 壁がある l

    なぜ、別チームだったのか? l Opsにインフラや運用に専門知識が必要なので、開発とは別の専門のメンバーが必要 l これから( or 現在 ) は、どうなのか? l クラウド等の最新のサービスや技術によって、DevとOpsに境界がアイマイになっている l Opsに必要な労力や専門知識が軽減されている l 本番やそれに近い環境を作って開発することが容易になった 12 Dev(機能1) Dev(機能2) Dev(機能3) Ops Devチーム Opsチーム Dev Ops DevOpsチーム DevとOpsの連携や引き継ぎに大きなコストが発生 DevとOpsの一体的な運用が可能 壁 早く開発して、早くリリース 出来たほうがうれしい
  8. DevOpsにおける主な手法 l マイクロサービス l システムを細かい「サービス」に分割して、連携させることで動かすという考え方。 拡張性・柔軟性に優れている。 l CI/CD : 継続的インテグレーション/継続的デリバリー

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

    l 開発したコードのビルド・テスト・デプロイを自動化すること。 早期のバグの発見やリリースの高速化が可能になる。 l IaC : Infrastructure as Code l インフラをコードとして管理すること。 インフラ構築の自動化やバージョン管理が可能になり、環境の再現が容易になる。 l モニタリングの自動化 l システムのパフォーマンスやログを監視すること。 自動で監視してアラートを通知することで、運用効率化や問題の早期発見が可能になる。 l 活発なコミュニケーションの促進 l DevOpsはチーム全体でスピード感のあるコミュニケーションが重要となる。従来のメー ルとファイルのやり取りではなく、チャットツールやwebベースのプロジェクト管理 ツールを活用することで、無駄のない開発や運用が可能になる。 14 今回は主に CI/CDについて話します
  10. DevOpsとCI/CD l DevとOpsの壁を超える為に必要な要素の1つがCI/CD l DevとOpsの境界には、リリースの作業がある l リリース作業がこの作業が大変だと、、、 l リリース頻度が下がる l

    DevとOpsの連携しづらい 15 Dev(機能1) Dev(機能2) Dev(機能3) Ops リリース作業 これが大変!! リリースの作業を簡略化・自動化できるのがCI/CD
  11. CI/CDとは何か 16 l DevOpsを実現するために、ビルド、テスト、デプロイ、リリースを自動で行う仕組み l CI : Continuous Integration →

    継続的インテグレーション l 自動でビルドやテストを実施する l CD : Continuous Delivery → 継続的デリバリー l 自動でアプリをデプロイ / リリースする 既存のよくあるデプロイプロセス 開発 ビルド デプロイ/ リリース 運用 • 手動 テスト • 手順書ベー スで手動 CI、CDのプロセス 開発 ビルド デプロイ/ リリース 開発者 • マージを 切っ掛け に自動で 実行 テスト • マージを 切っ掛けに 自動で実行 • スクリプト 化されてい るがビルド の実行は手 動 • マージを 切っ掛け に自動で 実行 • ソース コードの 変更をリ リースブ ランチに マージ リリース作業がとても大変 →複数の変更をまとめて実施 →変更点が多いので、確認作業も大変 →リリースの頻度が落ちる 自動化により、リリース作業が楽になる →変更単位での実施しても問題ない →テストも自動化されているので確認も楽 →リリース頻度を上げることができる 開発者
  12. CIにおけるテスト l CIで実行するテストには下記のようなものが挙げられる l 全て自動化できるのが理想ではあるが、現実的に難易度が高い l 静的解析や単体テストなど、難易度に対して効果の大きいところから導入がお勧め 17 導入の難易度が高い l静的解析

    lコードを実行せずに、コーディングルールに違反している箇所や脆 弱性のある箇所を洗い出す lバグや脆弱性の検出の他に、コードの可読性や保守性の向上が可能 l動的テスト(単体テスト・結合テスト) lソースコードを実際に実行して、コードが想定通り動くかを、確認 する lテスト用のコードを書いて動かすことで実行 lUIテスト l画面を実際に操作して、画面の表示や画面崩れがないかを確認する l自動化するには専用のツールの導入や設定が必要
  13. クラウドの活用とCI/CD l 先程までの話で、こう思われた方がいるかも知れません l 正直、従来型のシステムでは大変です。 l ですので、クラウドのサービスを活用して、 自動化しやすいシステムに変えていくのことがお勧めです 19 •

    ハードウェアやVMの設定をする • OSの設定する • Webサーバを構築・設定する • ビルド環境を構築・設定する • アプリのソースコードを用意する • ビルドする • 稼働中のシステムを止める • アプリを置き換える • 再稼働する • 動作確認する 従来のwebアプリのリリース手順の例 • ブラウザで、AWSの画面からGitHub のリポジトリを連携する • GitHubに最新のソースコードを置く • AWSが自動でリリースしてくれる AWS Amplifyにリリースする場合 AWS上にアプリを高速に構築できるサービス テストやリリース作業を自動化はすればよいのは分かったが、 そもそもシステムが複雑すぎて自動化できない
  14. DevOps, CI/CDと内製化 l 内製化のチームには、DevOpsが向いています l 理由1 : チームで一体的な運用がしやすい l 外注の場合は、契約やセキュリティの問題で、外部のメンバーとの間にど

    うしても壁が出来てしまう l 利用者も社内なので、素早い動きがしやすい l 理由2 : 高度なインフラ要員を外部から入れなくてもよい l 外部サービスやクラウドを活用することで、インフラ専門の人材がいなく てもシステム開発が可能 20
  15. 実例1 : AWS上に構築したアプリ(ソースコード管理にGitHubを利用) l ソースコード管理 l GitHub l CI/CD l

    AWS Amplify (ビルドやデプロイ) l GitHub Actions (テスト) l その他 l Amazon CloudWatch で運用・監視 l エラーやアラートを slackへの自動通知 22 バックエンドの 自動デプロイ フロントエンドの 自動デプロイ このプロジェクトの本番リリース作業は、 毎回30分程度です! (作業10分、待機20分) CI/CD
  16. 実例2: AWS上に構築したアプリ(GitHubが使えない環境で、AWSのみを使って構築) 23 l ソースコード管理 l AWS CodeCommit l CI/CD

    l AWS CodePileline l AWS CodeBuild ソースコード管理やCI/CD含めて、 自社のAWSアカウントで完結しています! CI/CD
  17. 実例3:Azure上に構築したアプリ l ソースコード管理 l Azure Repos l CI/CD l Azure

    Pipelines (テスト・ビルド) l Azure WebApps (デプロイ) l その他 l Azure Monitorで運用監視 24 CI/CD アプリ本体 Azureでも、CI/CDで効率的なリリースが可能です! Azure ADで開発者の管理ができる
  18. よく使われるCI/CDツール l CI/CDツール l GitHub Actions l 開発プラットフォームGitHubに付属するCI/CDツール l 世界中で使われている為、世の中の知見も多い

    l GitLab CI/CD, GitLab Runner l オープンソースの開発プラットフォームGitLabのCI/CDツール l AWS Codeシリーズ ( CodePipeline, CodeBuild, CodeDeploy 等 ) l AWSが提供するCI/CDツール l Azure Pipelines l Azureの開発プラットフォームAzure DevOpsが提供するCI/CDツール l Cloud Build ( GCP ) l GCPが提供するCI/CDツール l CircleCI l CircleCIが提供するCI/CDツール。複数のプラットフォームに対応 l ArgoCD l Kubernetesへのデプロイを自動化するCI/CDツール 26
  19. CI/CDを便利にするサービスやツール l クラウドサービス l AWS l AWS Amplify l ウェブアプリやモバイルアプリを簡単に構築

    l AWS Lambda l インフラを管理することなくコードを実行 l Azure l Web Apps l ウェブアプリを簡単に構築、デプロイ、管理 l Google l Firebase l モバイル・Webアプリケーションを簡単に構築できるプラットフォーム l Cloud Functions l クラウド上で簡単にコードを実行できるGCPのサービス l その他、便利ツール l Serverless Framework l サーバレスなアプリケーションを管理・デプロイできるツール 27
  20. 個人的な苦労話と注意点 l 基本はクラウドやCI/CDを使って開発効率化を進めるべきですが、 リスクやデメリットがないわけではないです。 l 楽なツールほど、制約が多い l 例えば、 l CI/CDを動かす環境の処理時間や通信量、同時実行回数に対する制約(または課金)

    l ハードウェアに依存する機能を動かすのが大変(例えば画像処理とか) l クラウドに依存しすぎると、ローカル環境でのテストがしづらい l ちょっとしたテストでもクラウドに繋ぐ必要が出ることも l 適切に管理しないと、必要以上の費用が発生する l 例えば「コードを修正する度にiPhoneのアプリをビルドする」CI/CDを作る → クラウド上のMacが動き続ける → 高額な請求が来る 28 プロジェクト規模や社会的影響度に応じた、最低限の慎重さは必要
  21. DevOpsやCI/CDに関するトピック(FAQ) l CD/CDで、リリースが早くなること・テストを自動化できる以外のメリットはあるのか? l 開発も楽になります。本番環境が簡単に作れるということは、本番同等の開発環境も簡単に作れます。 開発中の動作確認も容易になるので、開発速度が早くなります。 l 本番に自動で適用されるのは怖いのですが、大丈夫? l 誤った操作を防ぐ設定が可能です。例えば「管理者が承認したときのみ本番適用が実行される」など

    l 開発者が本番のソースコードを直接触れないようにアクセス権を設定することも可能です l 承認や権限を含めて事前の設定ができていれば、人が手作業でリリースするよりもミスが少ないです l クラウドを使っていない既存プロジェクトに適用するのは、難易度が高そう。 l 最初から本番に適用をするのは、大変ですしリスクも大きい思います。 まずは開発環境だけを自動化するといったこともプロジェクトの改善に有効です。 l 実際に、本番環境がクラウドNG・オンプレ必須の案件で、 開発環境だけはクラウドを使って自動でデプロイすることで、開発効率化できている事例もあります。 l クラウドでOpsのハードルが下がると言っても、クラウドの知識の習得は必要ですよね? l 必要です。ただし、クラウドの全てを知っている必要はないです l 社内でのみ使うような簡単なツールであれば、アプリのデプロイ方法さえ知っていれば大丈夫 l 実際に何をすればいいかは、 l AWSなどのクラウドベンダーが公開している、チュートリアルやドキュメントを確認 l AWSなどのクラウドベンダーにサポートして貰う l NCDCに問い合わせる 29
  22. 内製化支援サービス l 「DevOpsをやってみたい。でもハードルが、高そう」と思われた方へ l NCDCでは「内製化支援サービス」を提供しています l 少しでも興味がありましたら、ぜひお問い合わせください l URL :

    https://ncdc.co.jp/service/insourcing/ l NCDCは、AWSの「内製化支援推進AWSパートナー」に参加しており、豊富な 実績と知識で内製化をサポートすることが可能です l https://aws.amazon.com/jp/blogs/psa/202203-inhouseit-with-aws-partners/ 31
  23. [参考]NCDCの内製化支援サービスの紹介 32 ⽇本企業のIT部⾨は従来「システムの安定稼働」を重視してきましたが、 近年は「ビジネス要求に応じてスピーディーにシステムを変化させるこ と」が求められ始めています。 こうした要求に応えるために、システムの内製化やアジャイル・ DevOpsの導⼊に取り組む企業が増えていますが、アウトソーシングか ら内製主体の体制に移⾏するには、社内に新たな知識・スキルを貯える ことが⽋かせません。 このサービスでは、NCDCが持つ技術⽀援やDX⽀援の豊富な経験を活か

    し、内製化に取り組む企業の⽀援を⾏います。柔軟なシステム運⽤を可 能にする先進的な開発⼿法や、クラウド活⽤術などの知⾒・技術をお客 さまの社内に蓄積していただくことで、外部ベンダーに依存せず⾃⾛で きる開発チームづくりをサポートします。 具体的には、内製化を検討しているお客さまの状況を伺い、NCDC側で 最適な計画を⽴案。⽀援が必要な領域に合わせてコンサルタント、エン ジニア、UXデザイナーなどの専⾨家をアサインします。 クラウドなどをうまく使って 柔軟なシステムを内製化したい 豊富なDX⽀援経験により 蓄積されたノウハウ システムのモダナイゼーション、 アジャイル開発、DevOps、 AI,IoTの活⽤、開発技術選定、 UX/UIデザイン... お客様 コンサルティング などを通じて 実践的な知識や スキルを移管 概要|ビジネス要求に柔軟に対応できる開発体制づくりを支援
  24. 本日のまとめ l DevOpsは 開発と運用をうまく連携するための手法の総称で、 システム開発や運用において本来あるべき姿 l DevOpsは、最新の技術やクラウド活用により実現可能 l CI/CDは、DevOpsの手法の1つで、テストやリリースを自動化 l

    リリース作業が楽になる l 開発も楽になる l リリース頻度を上げることができる l 「DevOpsをやってみたいけど、導入が大変そう」と感じたら NCDCに連絡する 34
  25. 事例|クラウドアーキテクチャコンサルティング 36 Client|メーカー(機械) Keyword|システムアーキテクチャ , AWS , IoT AWS上に国内最⼤級規模の IoTプラットフォームを構築。

    お客さまの課題 | 世界中で販売している農機から IoTでデータを取得しているため、オンプレミスの 既存データセンターではDB負荷が許容できない規 模になってきた。AWSに移⾏するため、技術⽀援 が必要だった。 ソ リ ュ ー シ ョ ン | Amazon Kinesis 、 Amazon ECS(Fargate)、Amazon RDS(Aurora)、Amazon Redshift、 Amazon S3など、AWSのクラウドベー ス製品をうまく活⽤したアーキテクチャを提案す ることにより、迅速かつ低コストでのスケールを 可能に。 NCDCの役割 | お客さまは「誰もやったことがな い未知の技術でも対応できる技術⼒が⾼く⼩回り のきくパートナー」を求めていた。当社の持つ PaaS領域での豊富な開発実績が評価され、⼤規模 かつ先進的なAWS移⾏プロジェクトを担当。
  26. 事例|クラウドネイティブなデータ収集・分析基盤の設計 37 Client|大学、空調機器メーカー Keyword| IoT , AWS ,システムアーキテクチャ センシングで最適な環境を。 IoTプラットフォームの設計。

    お客さまの課題 | IoTセンサーで取得した環境情報 をもとに空調・照明の⾃動制御を⾏い、最適な空 間を作る実証実験を⾏う。同時に空気や光、⼈の 流れといった環境情報のデータを収集、分析して 研究者に提供するためのIoTプラットフォームをク ラウド環境で構築したい。 ソリューション | AWSのクラウドサービスをうま く活⽤することで迅速かつ低コストでのスケール が可能なIoT基盤を設計。各種センサーや機器との 接続やユーザ認証などのユーティリティサービス も策定した。また、セキュリティ対策についても コンサルティングを実施。 NCDCの役割 | 豊富な知⾒を活かしクラウドに最 適化したシステム(クラウドネイティブアーキテ クチャ)を提案し、難しいと考えられていたお客 さま要望を満たす基盤の構築を実現。