最近、IT 業界における DevOps 導入の急速な拡大について考えることが増えました。DevOps の普及により、チームや組織におけるソフトウェアの構築方法やリリース方法が変化しています。かつて数週間、数か月、数年かかっていた開発・リリースのサイクルが、今では数時間、数分にまで短縮されました。これは、継続的インテグレーションおよび継続的デリバリー (CI/CD) の手法や原則が実践されている証と言えるでしょう。
CI/CD は、現代のソフトウェア開発の中心的な要素です。それぞれのチームや組織の状況に合わせてカスタムのソフトウェア開発プロセスが構築され、そのプロセスを最適化するためのフィードバック メカニズムによってさまざまなインサイトが獲得されています。また、より緊密なコミュニケーション戦略が展開され、高度な協力体制と迅速かつ建設的なフィードバック ループが生み出されています。業界全体でも、Continuous Delivery Foundation (CDF) という独自団体が設立されたほど、CI/CD がソフトウェア開発に不可欠であることが認識されています。CDF が掲げるのは次のようなミッションです。
Continuous Delivery Foundation (CDF) は、継続的インテグレーション/継続的デリバリー (CI/CD) を採用する急成長中のプロジェクトの多くを、ベンダーに対する中立的な立場から支援します。業界トップの開発者、エンド ユーザー、ベンダー間の中立的なコラボレーションを促進し、CI/CD のベスト プラクティスと業界仕様の策定をさらに推し進めます。CDF のミッションは、広く成長し続けている継続的デリバリー エコシステム内のプロジェクトを成長させ、維持することです。
CI/CD 分野がこのように成長している限り、個人が CI/CD に特化したスキルを身につける必要があることは明らかです。しかし、CI/CD に特化したスキルとはどういうものでしょうか。イメージできなくても、ご心配には及びません。「CI/CD エンジニア」が果たす新しい役割について私の考えをご説明します。
CI/CD エンジニア
初めにお断りしておくと、バズワードを基にした新しい役職の説明は、このコミュニティの皆さんにとっては不要かもしれません。しかし私は、近い将来 CI/CD エンジニアが開発チームにとっての貴重な資産としての地位を確立する日がやって来ると確信しています。おそらく皆さんは次のような疑問をお持ちでしょう。
-
CI/CD エンジニアにはどのような特性があるのか
-
他のエンジニアリングの役割に対してどのような責務を果たすのか
この記事を執筆するにあたり、開発者、SRE、QA エンジニア、スクラム マスターなど、コミュニティのさまざまなメンバーと CI/CD エンジニアについて意見を交わしました。そのときには必ず先に「あなたなら、CI/CD エンジニアの役割と職務についてどう説明しますか」と質問してみました。
よく聞かれたのは次のような回答です。
-
DevOps エンジニアにアシスタントは必要ない
-
リリース マネージャーと似ているように思う
-
DevOps エンジニアと CI/CD エンジニアの違いがわからない
-
CI/CD エンジニアには、先頭に立って CI/CD を進め、チームのモチベーションを維持する責任がある
-
組織内の CI/CD ツールおよびプラットフォームの正常性と運用に直接責任を持つ担当者である
-
チームの開発とリリースの運用状況を最適化するための知識を持った人材である
集まった意見を私自身の考えと照らし合わせてみたところ、この CI/CD エンジニアという役割の重要な要素がより明確になってきました。
役割にかかわる特性は、その人が持つべきスキルに関係しています。そして、役割に伴う職務とは、その人が持つべき責任の範囲を指します。このように分解して考えていくことで、集中して執筆することができました。まず、この役割を担う人物にかかわる特性について説明し、次に CI/CD エンジニアの職務に対する私の考えを述べていきます。
CI/CD エンジニアの特性
CI/CD エンジニアが持つべき理想的なスキルを 5 つ挙げてみましょう。
- 優れたコミュニケーション能力
- 鋭い分析力
- 複雑なプロセスを理解可能な要素に分解する能力
- プロセスの自動化と最適化に関する技能
- チーム構築とチーム コミュニケーションの戦略策定能力
これですべてを網羅しているわけではありませんが、足がかりとしてはまずまずではないでしょうか。では、これらの特性についてより詳しく説明していきます。
優れたコミュニケーション能力
この役割は、間違いなく縦割りのプロセスに組み込まれることになるため、さまざまなチームとうまくやり取りする必要があります。適切にコミュニケーションがとれる能力は、この役割にとって欠かせません。
鋭い分析力
この役割が担う業務の大部分では、さまざまな概念を深く理解すること、関連する領域へのかかわりや影響を見極めることが求められます。個々の状況を正確に評価することは、非効率的なプロセスを改善するうえで非常に重要なステップとなります。
複雑なプロセスを理解可能な要素に分解する能力
複雑なトピックをわかりやすい要素に分解できることは、多くの役割に求められる特性ですが、CI/CD では特に重要です。鋭い分析力と複雑な概念についての説明能力は、チームが現在の運用状況と不十分だった点を把握するために必要になります。運用状況を正確に把握できれば、新たな解決策を講じて、望ましい状態を実現し、維持できます。
プロセスの自動化と最適化に関する技能
不十分なところを特定できれば、プロセスの有効性を低下させている問題点やボトルネックを明らかにして、現実的な方法で対処できます。たとえば、ステップが順番に実行されるプロセスを想像してみてください。あるステップが完了してから別のステップが開始されるような、「ブロッキング」と呼ばれるプロセスです。私の経験上、連続的に実行されるプロセスの多くには、このブロッキングを解除して並列に実行する手段も残されています。このような最適化策を考案し、うまく調整できることは、この役割において特に有益です。
チーム構築とコミュニケーションの戦略策定能力
これは、上記の特性をひとまとめにして、さらにチームや組織内で信頼を醸成し維持する能力を加えたような特性です。信頼とは、どれだけ信任され、信用されているかということです。人は、取り組みを推奨しようとしている人物が信頼を寄せる相手だった場合、その意思決定に賛同し、サポートすることに抵抗感が少なくなります。この特性によって目指すところは、意思決定に関する合意を形成し、すべての利害関係者に利益をもたらす計画を実行することです。
CI/CD エンジニアの職務
ここからは、CI/CD エンジニアが果たすべき 5 つの主な職務について私の考えを述べていきます。
- CI/CD の実践ルールを確立する
- CI/CD の実践ルールを繰り返し見直し、修正する
- CI/CD ツールやプラットフォームを管理する (必要に応じて)
- パイプラインの構成を組み立て、メンテナンスする
- プロセスを自動化する
CI/CD の実践ルールを確立する
CI/CD を導入すると、効率性が大幅に向上します。どのようなプロセスで実践するかを利害関係者が決定することで、ソフトウェア開発が最適化され、さらに促進されます。CI/CD エンジニアは CI/CD のあらゆることに関して権限を持ち、権限を持つ者として関連プロセスの確立と実装に積極的に関与します。
CI/CD の実践ルールを繰り返し見直し、修正する
実践ルールを一度確立した後も、チームで継続的に再検討して、現在の運用が最適にサポートされているかどうかを確認することが重要です。CI/CD エンジニアは、各チームがどのように活動し、他のユニットとどのように連携しているかを深く理解することができるユニークな立場にあります。何が機能していて何が機能していないかを見極めたうえで、是正措置を決定して提案する権限を持ちます。反復的に見直すことにより、ソフトウェア開発プロセスを一貫して把握し、改善のための選択肢を洗い出せるようになります。
CI/CD ツールやプラットフォームを管理する (必要に応じて)
CI/CD の実践ルールを確立して取り入れたら、次のステップは、関連プロセスの実行を容易にする CI/CD ツールやプラットフォームを活用することです。CI/CD プラットフォームによってプロセスが実際に運用され、指定したパイプラインの実行が自動化されます。CI/CD ツールの実装と管理には、DevOps のスキルも確かにかかわってきますが、これについては少し Ops に比重を置くほうが適切なのではないかと考えます。というのも、CI/CD ツールが着実に動作するように手を打つことは、間違いなく「オペレーション」の領域に属するからです。またこの職務は、アーキテクチャや運用状況によっても変わってきます。
私が知っている限りでは、CI/CD アーキテクチャは 2 種類の形態で運用されています。
マネージド CI/CD
CI/CD アーキテクチャは、CircleCI などのサードパーティ ベンダーが提供しています。そうしたベンダーのサービスを利用すると、技術チームはほとんど労力をかけずに、基盤となる CI/CD インフラストラクチャをプロビジョニング、管理、スケーリングできます。これらのサービスは開発に直接的に役立ち、CI/CD の難しい部分がすべて取り除かれるように設計されています。ソフトウェア開発環境が強化され、多大なリソースや時間を必要とする CI/CD インフラストラクチャの管理にエンジニアリング チームが煩わされることもありません。
セルフホスティング/オンプレミス CI/CD
私の考えでは、マネージド CI/CD はあらゆる組織に注目されるべきですが、データ関連の法律や政府の規制などの事情により、一部の組織ではセルフホスティング型のプラットフォームも必要とされています。セルフホスティング CI/CD では、CI/CD インフラストラクチャのすべてをチームでプロビジョニング、管理する必要があります。インフラストラクチャを全面的にチームが管理するということは、接続、サーバー/ノード、オペレーティング システム、採用した CI/CD ツールを計画、実装、管理しなければならないということです。また、手間をかけて用意したインフラストラクチャ上で CI/CD ツールを安全に動作させる必要もあります。DevOps チームに代わって多くの時間と労力を注ぎ込むことになり、運用がより複雑になります。
CI/CD アーキテクチャが何であれ、CI/CD の効率化は欠かせません。ツールが運用可能になったら、その状態を維持しなければパフォーマンスが低下するおそれがあります。そして当然ながら、数多くの CI/CD ツールが提供されており、その中から最適なツールを選別することは容易ではありません。複数のソリューションを吟味してから、チームのニーズに最も適したツールを選択することをお勧めします。
CI/CD エンジニアは、これらの CI/CD インフラストラクチャの一部またはすべてを担当することになります。理想的を言えば、この職務は CI/CD エンジニアと DevOps エンジニアで分担したいところです。CI/CD エンジニアが CI/CD ツールを管理し、DevOps マネージャーが基盤アーキテクチャを管理するとよいでしょう。少なくとも、CI/CD エンジニアは、基盤となるホスト インフラストラクチャをはじめ、採用した CI/CD プラットフォームに精通していなければなりません。
パイプラインの構成を組み立て、メンテナンスする
すべての CI/CD ツールはパイプライン構成という形態をとり、そのメカニズムを通じて CI/CD プロセス内で実行するさまざまなステップやセグメントを指定します。パイプラインの構成方法は、GUI (グラフィカル ユーザー インターフェイス) を使用したり、コードで指定したり、使用する CI/CD ツールによって異なります。いずれの場合も、CI/CD パイプラインの構成と保守は必須であり、それは紛れもなく CI/CD エンジニアの仕事です。
CI/CD パイプラインの構築、管理、実行は、CI/CD エンジニアという役割が果たすべき最も重要な職務となります。パイプライン構成とは、指定したステップの実行を編成することを指します。つまり、必要な処理を実行するために CI/CD ツールをプログラムすることです。
CI/CD エンジニアは、パイプラインが適切に定義され、最適なパフォーマンスが発揮されるよう対処します。パイプラインの目的とその中で発生するトランザクションを深く理解し、DevOps チームと連携して、パイプライン内のステップの調整と最適化を図ります。また、パイプラインを文書化し、関係者全員がソフトウェアの構築、テスト、保護、デプロイ方法を確認できるようにします。
プロセスを自動化する
自動化は CI/CD の核心部分です。パイプライン コマンドの処理、プラットフォーム間の接続、サードパーティ サービスとの有益な連携が簡単に行えるようになります。その核心部分まで掘り下げてみると、継続的インテグレーションおよび継続的デリバリーの運用を強化する自動化を設計し、管理することが、CI/CD エンジニアの役目だと言えます。有能な CI/CD エンジニアになるには、経験の豊富さは必ずしも問われませんが、自動化の基礎知識は必須です。
CI/CD エンジニアの技術スキル
最後に、CI/CD エンジニアに求められる技術的スキルを挙げておきます。
- スクリプトの記述 (言語は問わない)
- ソース コードの解釈、記述 (言語は問わない)
- インフラストラクチャ資産 (ネットワーク、サーバー、OS、DB) の管理
- ソフトウェア パッキング ツール (.exe、.deb、.rpm、Docker) の知識
- バージョン管理ツール (Git、Subversion、Mercurial) の知識
- クラウド プロバイダー (AWS、GCP、Azure) の管理
- セキュリティ/脆弱性スキャン ツールの知識
- コード カバレッジ分析ツールの知識
- モニタリング ツールの知識
これらのスキルはすぐに必要なわけではありません。CI/CD エンジニアの役割を担いながら、不足しているスキルを習得し、磨いていけばよいのです。
まとめ
ここまで、CI/CD エンジニアと名付けた新しい役割について説明し、この役割に直接関係すると思われる特性や職務をまとめてきました。CI/CD エンジニアという役割が存在するとしたら、これらの特性や職務に対する考えをおろそかにはできません。
私の提案する特性と職務は、このように並べて検討してみると、既存の複数の役割の一部を組み合わせた新しい役割であることがわかります。そして、これは的確であると自負しています。CI/CD エンジニアは、開発者、運用担当者/SRE、リリース マネージャー、スクラム マスター、クラウド インフラストラクチャ アーキテクト、ビジネス アナリスト、システム インテグレーター、セキュリティ管理者、ネットワーク エンジニアを少しずつ合わせた存在です。負担の大きな立場ですが、一部またはすべての役割の確かな経験と知識を有する人は、優れた CI/CD エンジニアになれるでしょう。
繰り返しになりますが、これらは CI/CD エンジニアを形成するものについての私見です。皆さんはこの役割についてどうお考えになりますか。Twitter で @punkdata 宛てにご意見をお寄せください。ぜひ、この考察を一緒に発展させていきましょう。
最後までお読みいただき、ありがとうございました。