DevOpsのフローとDevOpsの実践に必要な技術
DevOpsに関わるエンジニアの役割
さて、ここまでDevOpsの一連の流れと、そこで使用されるツールや環境について解説してきました。これらのツールや環境は当然ながら使う人がいることに加えて、それらを利用できる環境を構築する必要があります。前述の通りDevOpsにおいては今までとは異なる技術を使ったり、同じ技術でも考え方を変えたりする必要がありますが、それに伴ってエンジニアが果たすべき役割の範囲は異なってきます。
ここからは、DevOpsにおけるエンジニアにはどのような役割があるのか、また、それぞれがどのような形で各技術に関わっていくのかを解説します。
開発チームと運用チーム
まず、DevOpsでは「開発チームと運用チームのコラボレーションを強化する」のが重要なコンセプトの1つです。「開発チームと運用チームの境目を曖昧にする」という表現もよく使われます。しかし、日本のシステム開発の実態は、DevOpsが前提とする開発チームと運用チームのあり方とは異なる部分が少なくありません。特にエンタープライズ領域で見られるようなシステムでは、開発を外部のシステム開発会社に発注し、運用自体は自社のIT部門で行うというケースが多く見られます。このような形態では、開発チームと運用チームでそもそも会社が異なるという分断が起き、境界を曖昧にすることが難しくなってしまっています。
とは言え、分断があるからといってDevOpsが実践できないわけではありません。かつては「コラボレーションを強化する」と言うと開発チームと運用チームが仲良くするといった人的なコラボレーションが想像されることもありました。しかし、DevOpsで重要なのは「プロセス面と情報面でのコラボレーション」です。これらのコラボレーションはチーム同士が同じ空間にいなくても技術や仕組みで実現できます。
例えば、先ほどの継続的デリバリーの概念でリリース準備までを開発チームが責任を持ち、本番環境へのデプロイを運用チームが責任を持つといった役割分担がされているとします。その際、CI/CDの技術を使えば、開発チームがテスト環境へアプリケーションをデプロイする仕組みと、運用チームが本番環境へとデプロイする仕組みを共通化できます。また、先ほどの運用監視からフィードバックへの流れも運用チームから開発チームへのコラボレーションを強化する仕組みとなります。
もちろん、開発チームと運用チームのコラボレーションを強化するには、技術的アプローチだけでなく組織的、文化的アプローチも加えて実施する必要がありますが、仕組みを抜きにしてはDevOpsにおけるコラボレーションは実現できません。
開発エンジニアとインフラエンジニア
チームとしては開発チームと運用チームに分類しましたが、エンジニア個人のスキルという側面では開発エンジニアとインフラエンジニアで分類できます。これらの役割はDevOpsとは関係なく、従来のシステム開発にも存在してきた役割ですが、DevOpsではそれぞれの役割が変化します。
まず、開発エンジニアの視点では自動化への対応強化が必要となります。開発エンジニアの主な役割はアプリケーションのコードを作成し、正しく動作するアプリケーションを作ることです。正しく動くアプリケーションを作るために実施するのが各種テストです。従来の開発では手作業でテストを行うこともありましたが、DevOpsにおいてテストはCIパイプラインの中で自動化されるため、コード化されたテストケースを用意する必要があります。ここで言うテストとは単体テストだけでなく、結合テストやE2Eテストなども含まれる場合があります。結合テストやE2Eテストは自動化の難易度が高いため従来通り手作業でテストを実施する場合もありますが、単体テストに関しては自動化は必須です。また、アプリケーションで使用するライブラリなどはコンテナイメージの作成時に読み込むため、開発者がコンテナの設定を理解する必要があります。従来は自分の開発環境のみを理解すれば良かったのですが、実行環境としてのコンテナが開発環境だけではなく、本番環境でも使用される点に注意が必要となります。
一方、インフラエンジニアの視点では「手段」と「範囲」の両面で変化があります。まず手段の面では、インフラ構築が手順書に沿った手作業からIaCへ変化します。主な作業はIaCのコード作成とその結果構築された環境が正しく動作するかの検証です。IaCツールに準じたコードの書き方を学ぶ必要はありますが、手順書を書いて手作業で構築するよりも作業量は減り、なおかつ構築の確実性が増します。また、範囲の面ではCI/CDの環境が含まれるようになります。従来はアプリケーション実行環境の構築がメインでしたが、CI/CDの環境を構築するのもインフラエンジニアの役割です。CI/CDのインフラ構築にあたっては単にCI/CDツールを導入するだけでなく、CI/CDのプロセスを実行する設定、テストやビルドに必要な環境の設定なども必要になってきます。
おわりに
今回は、DevOpsの全体的なフローとそこに関わる技術について概要を説明しました。また、合わせてそれらの技術を扱うエンジニアの役割がDevOpsを採用することによってどう変化するのかといった点も紹介しました。
次回以降は、それぞれの技術を少し深掘りしつつ、その概念を説明していきたいと思います。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- DevOpsを始めるときに「何をやるべきか」を理解しよう
- インフラエンジニアの視点で見る、DevOpsを実現するためのツールとは
- DevOpsはここから始めよう
- DevOps、CI/CDパイプラインでもコンテナは大活躍!
- 知っておくべきDevOpsの「4つの原則」
- 生産性の向上と脆弱性リスクの低減を両立─ 開発者ファーストのセキュリティプラットフォーム 「Snyk」がもたらす効果・効用
- DevOpsのサイクルをコードで管理し、プロセスを自動化する「CI/CDパイプライン」
- SIの労働生産性を高めるIaCとは?ITエンジニアのためのコミュニティ「IaC活用研究会」キックオフイベントレポート
- CI/CDの現場への定着も手厚くサポート─圧倒的なスピードのDevOpsを実現する「CircleCI」のインパクト
- OCIが指し示すクラウドネイティブへの道筋