DevOpsを実現するために行うこと・考えること 1

DevOpsを始めるときに「何をやるべきか」を理解しよう

本連載ではプロジェクト運営、インフラエンジニア、開発者のそれぞれの視点から、DevOpsを始めるにあたって具体的に何を考慮すべきかを紹介していきます。第1回の今回は、プロジェクト運営の立場から決めるべきことを紹介します。

新村 剛史

2023年4月14日 6:30

はじめに

「これからプロジェクトでDevOpsを実践しよう」としたとき、どのような技術や知識が必要になるのか、何をしなければいけないのか、色々と調べるかと思います。世の中にはDevOpsに関するWeb記事や書籍は数多くあり、それらから十分に知識を得ることができます。しかし、実際にプロジェクトを立ち上げ、推進していくためには具体的に何を行うべきか、何を考慮すべきといった情報はあまり世の中に流通していません。

そこで、本連載ではプロジェクト運営、インフラエンジニア、開発者のそれぞれの視点から、DevOpsを始めるにあたって具体的に何を考慮すべきかを紹介していきます。第1回の今回は、プロジェクト運営の立場から決めるべきことを紹介します。

DevOpsを実現するために必要な人材と知識

まずは、プロジェクトの体制について考えてみたいと思います。DevOpsをプロジェクトに適用しようとした場合、必要となる人材やその人材が持つべきスキルセットがどのように変わるかを理解する必要があります。従来の開発の延長線上にありつつも、新しいパラダイムを伴うDevOpsを実現するためには、既存のチームの役割からDevOpsを実践するためのチームの役割への認識のアップデートが必要となります。

Devの役割とOpsの役割

図1:Devの役割とOpsの役割

DevOpsにおけるDevとOpsの役割

DevOpsは「Dev(開発)チームとOps(運用)チームが協力してプロジェクトを進めていく」手法です。従来の開発プロジェクトではDevチームがアプリケーションを開発して、Opsチームがそれを受け取り、構築したインフラ上にデプロイするという流れでアプリケーションを利用できる状態にし、運用していたかと思います。これがDevOpsとなるとその役割はどのように変わるのでしょうか。

DevOpsの観点では、Devチームの役割が大きく変わるわけではありません。自動化の恩恵でやるべき作業自体は減少し、開発の速度は向上しますが、動くアプリケーションを開発するという役割は同じです。ただし、Devチームが今までGitによるバージョン管理やテストコードの作成を蔑ろにしてきた場合は、これを適切に実行する必要があります。今まで手動で行ってきた部分を自動化するためには、これらの取り組みは欠かせません。

一方、Opsチームは従来のアプリケーションの稼働環境のみではなく、開発におけるCI/CD環境の構築と運用もその役割となります。CI/CD環境は安定した運用を目指すアプリケーションの稼働環境とは異なり、効率的に開発プロセスが進むように構築、改善を行っていく必要があります。

DevOpsインフラを実現するためのエンジニア

Opsチームの役割が広がることで、Opsチームのエンジニアには新しい知識が求められます。CI/CD環境を構築するための知識は、従来のアプリケーションの稼働環境を構築する知識とは異なり、開発プロセスの自動化が主なものとなります。そのためにはCI/CDを実現する様々なツールやGitリポジトリといった新しい技術を習得する必要がありますし、インフラの構築方法もIaC(Infrastructure as Code)といった手法を習得する必要があります。さらに、これらの技術や手法を用いて環境を構築するだけでなく、Devチームと協力してより良い開発ができるように改善する必要もあります。

プロジェクトでDevOpsを実現するためにはこれらの知識を持ったエンジニアが必要となるため、これらのスキルを持つ人材を育成するか獲得しなくてはいけません。とはいえ、人材不足が叫ばれる昨今ですし、人材の育成にも時間がかかってしまい、なかなかDevOpsを実践できないということも珍しくありません。そのような場合は、外部の助けを借りることも解決方法の1つです。

どのような開発プロセスにするのか

では、CI/CDを構築できるエンジアがいればDevOpsを始められるのか、と言えば、そうではありません。CI/CDの主な役割は開発プロセスの自動化です。CI/CDを構築するためには、どのような開発プロセスにするのか、どこを自動化の対象とするのかを明確にする必要があります。

DevOpsにおける開発プロセスの例 width=

図3:継続的デリバリーと継続的デプロイメント

継続的デリバリー

継続的デリバリーでは、自動化のゴールをリリース可能な状態への準備と位置付けます。高頻度で本番環境へのリリースを行わない場合や、本番環境へのリリース前に人によるチェックが必要な場合などは、継続的デリバリーで本番環境へのリリース直前までを自動化するようにします。

具体的な例としては、コンテナ環境であればコンテナリポジトリに登録するまでだったり、モバイルアプリであれば配信環境にアップロードするまでなどの方法が考えられます。

ただし、本番環境へのリリース自体を手作業で行うのは得策ではありません。継続的デリバリーにおいてはリリース前に人による検証作業が入るだけで、本番環境へのリリースは人的ミスを排除する観点で機械的に行なうことが望ましいです。

継続的デプロイメント

一方、継続的デプロイメントでは、本番環境へのリリースまでを自動化します。SaaSのようにアプリケーションの改善をいち早くサービスに取り込むことで、継続的サービスに対する満足度の向上を実現する場合などは、継続的デプロイメントを採用します。

継続的デプロイメントにおいては、継続的デリバリーとは異なり人による検証作業が入らないため、自動化されたプロセスの中でその作業を行う必要があります。具体的には、アプリケーションに対するブラックボックステストを行うようなE2Eテストなどが挙げられます。また、検証作業を自動化したからと言って、リリースされたアプリケーションに問題がないという保証はできません。そのため、全ての環境に一気にリリースをするのではなく、部分的に新しいリリースを行うブルーグリーンデプロイメントやカナリアリリースなどのリリース方法も検討する必要があります。

おわりに

今回はプロジェクト運営の視点から、DevOpsを始めるにあたって具体的に考慮すべきことを解説しました。次回以降はインフラエンジニアの立場でOpsの役割として、開発者の立場でDevの役割として、DevOpsを始めるにあたっての具体的に何を考慮すべきかを、弊社のそれぞれの分野の担当エンジニアから紹介します。

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored