DevOpsエンジニアの仕事内容を解説!必要なスキルや需要・将来性は?実際の求人事例を元に紹介します
最近、「DevOpsエンジニア」という職種をよく目にするようになりました。このDevOps(デブオプス)という単語。実は明確な定義が無い故に言葉だけが独り歩きしていますが、実際のところはDevOpsとは何なのでしょうか。この記事ではDevOpsの概念を紐解き、DevOpsエンジニアの仕事内容を詳しく見ていきます。
目次
DevOps(デブオプス)とは
DevOpsという用語は、開発を表す“Development”と運用を表す”Operations”という言葉が組み合わさった造語です。
ではDevOpsの定義とは何でしょうか。
DevOpsの定義
DevOpsは、開発チームと運用チームの間のギャップを埋めて生産性を高めることでユーザーにより高い価値を迅速に提供し続けるという概念です。
この概念が生まれた背景には、システム開発の現場でしばしば生じる開発チームと運用チームの対立があります。
このチーム間の対立から様々な障害・非効率が発生し、結果としてユーザーへの迅速な価値提供に悪影響を及ぼしています。
DevOpsはこれを改善するために生み出されたシステム開発運用の手法・活動なのです。
DevOps誕生の原点
DevOpsの考え方は、2007年にベルギー政府のデータセンターの移行を手がけたITコンサルタントのPatrick Debois氏によって生み出されました。
“DevOps”と明確に呼ばれるようになったのが2009年に開催されたオライリー社主催の「O’Reilly Velocity 09」というカンファレンスです。
このカンファレンスに登壇したのが、当時写真共有サービスFlickrのエンジニアだったJohn Allspaw氏とPaul Hammond氏でした。
両氏はここで「10 Deploys a Day:Dev and Ops Cooperation at Flickr」というタイトルのプレゼンテーションを発表しました。
その内容は「開発側と運用側が共通の目標に向かって協調すれば一日に10回以上デプロイするような高速な開発を実現できる」というものでした。
ここからDevOpsの一大ブームが巻き起こります。
開発チーム(Dev)と運用チーム(Ops)の対立構造
両氏は発表の中で、開発チームと運用チームの対立の原因をこう分析しています。
すなわち、開発チームの役割が「新しい機能を開発する」ことである一方、運用チームの役割は「システムの安定稼働」であるということです。
この役割の違いによってシステム開発の場で生じる対立を解決するために考え出された手法・改善活動がDevOpsなのです。
DevOpsの具体的な手法(課題とメソッド)
両氏はFlickrの開発チームと運用チームが実践したDevOpsにおいて、以下のように課題を解決しました。
課題1:手動での環境構築による非効率・統一性の無いインフラ環境
インフラの構築は実行環境の自動構築を行う仮想化ツールのDockerや構成管理ツールのAnsible・Chefを用いることで自動化が可能です。
また、バージョン管理ツールのGitなどを導入し、開発チームと運用チームで共有すればインフラ環境に一貫性を持たせることができます。
課題2. 手動でのビルド・デプロイ
CI/CDツールであるJenkinsを導入することにより、ソースコードのビルドやテストを自動化することができます。
課題3. 組織間の情報共有不足
チャットツールのSlackを導入することで、メールと比べて飛躍的にコミュニケーションを円滑化させることができます。
また、課題管理ツールのJira Softwareはタスク管理・工数管理・進捗管理に有用です。
課題4. 部署間・チーム間の理解や配慮の欠如
この課題は組織文化の改善によって解決します。そのポイントは以下の4点です。
・Respect(互いに尊重し合う)
・Trust(互いを信頼し合う)
・Healthy attitude about failure(失敗に対する健全な態度)
・Avoiding Blame(非難しない)
DevOpsエンジニアの役割と仕事内容
DevOpsの概念とその手法については大体ご理解頂けたと思います。
では、DevOpsエンジニアとは具体的にどのような職種なのか見ていきましょう。
DevOpsエンジニアとは
DevOpsエンジニアは、一言でいえば開発から運用まで幅広い知識・スキルを備えたITジェネラリストです。
各ツールを駆使し、ソフトウェアの迅速な機能開発・更新を行うための継続的デリバリー環境を整えることがDevOpsエンジニアの役割です。
DevOpsエンジニアの仕事は多岐に渡り、主に以下の4つが挙げられます。
仕事内容①リリースエンジニアリング
リリースエンジニアリングは主にアプリケーションコードのビルドとデプロイです。
DevOpsに欠かせない概念として、CI(継続インテグレーション)とCD(継続的デリバリー)があります。
開発者が書いたコードを定期的にマージする事で負担を減らし、変更内容に自動化したテストを実施する事で、効率化と品質保証が狙いです。
CI / CDツールの選定・プロビジョニング・保守・ビルド/デプロイスクリプトの作成及び保守などが含まれます。
仕事内容②インフラ環境のプロビジョニングとシステム管理
インフラ環境のプロビジョニングとシステム管理は、サーバー・ストレージ・ネットワークリソースの展開と保守を指します。
ツールを用いて過去の変更履歴を管理するバージョン管理およびライブラリ管理もDevOpsエンジニアの仕事です。
これには、最新のバージョンアップで不具合が起きた場合にロールバックできる、過去バージョンの不具合の修正が簡単に行えるといったメリットがあります。
また、ツールを用いる事で人為的ミスをなくす目的もあります。
仕事内容③セキュリティ管理
セキュリティの侵害を想定し、防ぐ事も仕事内容のひとつです。
技術の移り変わりが非常に早いDevOpsですが、セキュリティを脅かす脅威の発展も日々進んでいます。
今後ますます高度化が進むなかで、最新の情報をキャッチアップする事が求められます。
仕事内容④DevOpsを取り入れた組織文化の浸透
DevOps式の組織文化とは、先述の課題4で挙げた4つの組織文化です。
この概念を開発・運用の両チームメンバーへ浸透させ、チーム間の協調関係を構築するのもDevOpsエンジニアの重要な役割です。
インフラエンジニアとの違い
システムの安定稼働という点においては、DevOpsエンジニアもインフラエンジニアも同じような役割を担うと言えます。
違いは高速化、ひいては開発プロセスの円滑化という点でしょう。
ただ安定的に稼働させるのみでなく、業務効率化を図る事が出来るだけの上級スキルが求められるという事になります。
DevOpsエンジニアに求められるスキル
DevOpsエンジニアは開発・インフラ管理・システム管理・DevOpsツールなど、開発と運用の両方について幅広い知識を備えている必要があります。
具体的に求められるスキルは以下の通りです。
コミュニケーション能力と協調性
DevOpsエンジニアは、チーム・マネージャー・顧客とコミュニケーションを取り、互いに協力し合う環境を整えることが重要です。
これらのいわゆる「ソフトスキル」は見過ごされ、過小評価されることがよくありますが、DevOpsの実現には欠かせないスキルです。
システム管理の経験
サーバーのプロビジョニングと管理・デプロイ・セキュリティモニタリング・ネットワーク管理などのシステム管理の経験が求められます。
DevOpsツールの使用経験
先の課題1〜3で挙げたようなDevOpsの実践に必要なツールを理解し、使いこなす必要があります。
構成管理ツールの使用経験
Chef・Puppet・Ansibleなどの構成管理ツールの使用経験が必要です。
コンテナオーケストレーションツールの使用経験
コンテナのデプロイから管理までを自動化するKubernetesなどのコンテナオーケストレーターツールの使用経験も必要になります。
継続的インテグレーションと継続的デプロイ(CI/CDツールの使用経験)
継続的インテグレーションと継続的デリバリー(CI / CD)は、DevOpsアプローチの要となる手法です。
CI / CDツールは基本機能としてシステム構築・テスト・展開のプロセスの自動化を備えています。
CI / CDツールにはオンプレミス型とクラウド型があり、オンプレミス型ではJenkins・Drone、クラウド型ではTravis CI・CircleCIなどがあります。
DevOpsエンジニアは、上記の内一つ以上のCI / CDツールの構成とデプロイの経験が必要です。
また、CI / CDツールの効果を最大限に発揮させるために他の開発組織と緊密に連携する必要があります。
システムアーキテクチャとプロビジョニングのスキル
Infrastructure as Code(IaC)にも精通している必要もあります。
IaCとは、DevOpsソフトウェア開発からクラウドインフラストラクチャリソースの管理までを最適化するIT管理プロセスです。
Amazon Web Services(AWS)・AWS CloudFormation・Terraformなどを使用したインフラストラクチャのモデル化の経験も必要です。
コーディング・スクリプティング・アジャイル開発の知識
従来のシステム管理では、反復的なタスクを自動化するためのシェルスクリプトが作成されていました。
それに加えて高度なソフトウェア開発・コードレビュー・ソース管理などのアジャイル開発についても理解している必要があります。
共同管理スキル
効果的なDevOpsの実践のためには、チーム間の協力が必須です。
DevOpsエンジニアは、多くの異なるエンジニアチームをまとめていく必要があります。
一つ例を挙げると、開発者への迅速なフィードバックの提供です。
DevOpsエンジニアはテストの速度・有効性・出力を向上させるために品質保証チーム(QA)との協力が求められます。
DevOpsエンジニアの資格
DevOpsエンジニアのポジションを探す際、資格を保持していれば有利になることがあります。
2022年現在はAWSとLinux Professional Institute(LPI)、Microsoft、Googleが認定試験を提供しています。
AWS認定 DevOpsエンジニア-プロフェッショナル
AWS環境において2年以上のシステム運用・管理の経験を持つエンジニア向けの資格試験です。
Linux Professional Institute DevOps Tool Engineer
システム管理・ソフトウェア開発の分野で豊富な経験を積んだ技術者向けの資格試験です。
開始当初は英語のみでしたが、2019年7月より日本語での提供も開始されました。
Azure DevOps Engineer Expert
Microsoftが提供するAzureの開発者もしくは管理者としての認定を受けた上級者向けの資格試験です。
試験ではDevOps戦略における設計、各種プロセス、インフラ実装に渡る幅広い知識が必要となります。
Professional Cloud DevOps Engineer
業界経験3年以上の方に推奨される選択式の資格試験です。
Googleが提唱するSREと言う考え方による試験で、難易度は高めに設定されています。
Google Cloudプラットフォームを活用したDevOpsエンジニアの実力の証明になる試験です。
DevOpsエンジニアの年収
幅広いスキルと豊富な経験が求められるDevOpsエンジニアですが、その年収はスキル・経験によってかなり幅があります。
大体500万円〜1500万円、大企業では700万以上になることが多いようです。
開発チームのマネジメント経験があったり多くのDecOpsツールに精通しているなどといった特殊スキルがある場合は高収入が期待できるでしょう。
高収入DevOpsエンジニアの条件
DevOpsエンジニアに必要なスキルとして、幅広い知識を備えている必要があるとご説明しました。
特に理念とも言える「Respect」「Trust」「Healthy attitude about failure」「Avoiding Blame」を理解し、実践する実行力やコミュニケーション能力は必須です。
土台となるインフラ設計・構築はもちろん、ユーザーの声をPLANに反映するフィードバックループの運用経験から活かされるモニタリングが強みになります。
また、パブリッククラウドの活用が一般的なDevOpsの特性上、その知識・スキルとしてスケーリング、死活監視自動化が特に重要です。
採用するDevOpsのモデルによってアプリのライフサイクル全般に携わるのであれば、セキュリティに関する知識の深さも、高収入DevOpsエンジニアを目指すうえでは必要と言えるのではないでしょうか。
DevOpsエンジニアの需要と将来性
DevOpsエンジニアの人気の高まり
DevOpsエンジニアの人気はここ数年で急速に高まり、LinkedInは2018年に最も採用された職種の1つであると宣言しました。
アメリカの大手転職口コミサイトGlassdoorの2020年の人気職業ランキングではDevOpsエンジニアが5位にランクインしています。
さらにアメリカのUpskilling 2020で実施された採用担当者向けのアンケートでは、51%が最近採用した・採用する予定であると回答しました。
DevOpsエンジニアの今後の需要と将来性
システムの運用はオンプレミス環境からクラウド環境でのサービス利用が主流となって来ています。
総務省の調べでは、日本のパブリッククラウドサービス市場は2021年の段階で1兆5,879億円で、前年比28.5%増でした。オフィスの移転・縮小に伴うクラウドへの移行やDX、データ駆動型ビジネスを進めるためにクラウドを活用したICT基盤の強化が進むことなどによって今後も拡大すると予想しています。
またIDCは2021年~2026年の年間平均成長率は18.8%で推移し、2026年の市場規模は3兆7,586億円になるとの予測です。(参考:IDC「国内パブリッククラウドサービス市場予測」)
技術の進化と共に開発に携わるエンジニアの数は増加し、ツールは多様化しつつあります。
複雑化していくソフトウェアの開発において、デプロイや運用監視などのプロセスを自動化するDevOpsの手法を導入する企業は増加しています。
開発環境を整備し、プロセスの自動化を推進してチームの生産性を向上させるDevOpsエンジニアは今後さらに不可欠な存在となるでしょう。
DevOpsエンジニアになるには?
学習ロードマップ
1.プログラミング言語の学習
まずはプログラミング言語を学ぶところから始めましょう。具体的には次のような言語の習得が望ましいです。
- Python・Ruby・Node.js・Go・ Rust・ C・ C++など
2.サーバー管理知識の習得
インフラ構築の知識を深めるため、各OSのコンセプトについても学習します。具体的には次のようなサーバー管理の知識です。
- プロセス管理・スレッドと並行性・ソケット・I/O管理・仮想化・メモリストレージとファイルシステム
3.Linuxディストリビューションを使ってみる
DevOpsでのシステム構築においてはLinuxのOSが採用されることが多いため、よく使うコマンドは知っておきましょう。実際にディストリビューションを使ってみる事をおすすめします。
4.セキュリティについて学ぶ
次のようなネットワークとセキュリティの知識を身につけましょう。
- HTTPS・FTP・SSL・TLS
5.自動化について学ぶ
DevOpsエンジニアに欠かせない自動化を学ぶために、サーバーに備わっている機能を理解する必要があります。そのため、セットアップについての知識を身につけましょう。
- プロキシ・ロードバランサ・ミドルウェア
6.インフラ構築のコード化
インフラのコード化(IaC=Infrastructure as Code)には再利用が可能、高速かつミスなく構築が行えるというメリットがあります。よく使われるツールとして次のようなものが挙げられます。
- Chef・Ansible・Docker
7.CI/CDツールについて学ぶ
継続的インテグレーション(CI) 継続的デリバリー(CD)ツールを学ぶ事で、リリース速度向上の術を身につけましょう。日本語でも情報を得やすい次のツールがおすすめです。
- Jenkins
8.監視ツールについて学ぶ
ソフトウェアとインフラの監視体制を整えるために、モニタリングする項目、優先順位、監視ツールを選ぶ必要があります。テストを自動的に実行するツール、モニタリングするための監視ツールなど、最適なものを選択するための知識が問われます。
9.クラウドプロバイダについて学ぶ
システムの運用においてオンプレミス環境ではなくクラウド環境が主流になりつつある昨今では、DevOpsエンジニアがクラウドプロバイダを扱う可能性も高まっているのが実情です。将来性の項目で解説した通り、需要の高いDevOpsエンジニアを目指すのであれば必須だと考えられるでしょう。
代表的なクラウドプロバイダは以下の通りです。
- AWS・MicrosoftAzure・GCP
実際の求人事例
以下ではDevOpsエンジニアの実際の求人例について、業務内容・必須スキル・年収をご紹介します。
仮想通貨におけるバックエンド開発部のDevOpsエンジニア
仮想通貨取引所の開発や付随するシステムの改善・開発。
仮想通貨ノードの構築・保守やAWS を用いたインフラ保守運用・コンテナ化による運用コストの削減など。
必須スキルは、Webアプリケーション開発経験・AWS環境でのシステムの構築運用経験・インフラ知識。
想定年収:650〜1000万円
オンラインショップのDevOpsエンジニア
サイトの品質向上・迅速かつスムーズな運営の実現。
Webおよびバックエンドシステムの運用・ベンダーを含む関係者の調整・課題の発見及び改善手法の提示・開発環境の整備など。
必須スキルは、大/中規模アプリケーションの開発運用経験・サーバーインフラストラクチャの知識・Linux(3年以上)・システム運用経験など。
想定年収:700〜800万円
まとめ
DevOpsエンジニアに求められるスキル・経験は多岐に渡り、これら全てを短期間でゼロから身に付けるのは難しいでしょう。
しかし、ネットワークやインフラ開発・システム管理など何らかのベースがあるIT技術者であればハードルは下がるでしょう。
昨今では先に挙げた通り認定試験も提供され始め、DevOpsエンジニアに必要とされるスキルセットも定まってきています。
この機会に必要なスキル・知識を習得し、DevOpsエンジニアを目指してみてはいかがでしょうか。
あわせて読みたい関連記事
この記事を読んでいる人におすすめの記事