DevOpsエンジニアとは?仕事内容・年収・スキル・将来性
開発者(Development)と運用者(Operations)が連携し、よりスピーディーに開発をおこなうDevOpsという考え方が普及し、インフラ構築・運用の自動化やオペレーションの改善などを支える「DevOpsエンジニア」の求人需要も高まっています。
今回は、そんなDevOpsエンジニアの仕事内容、年収、必要なスキルを解説し、転職や独立に役立つ資格についても紹介します。
DevOpsエンジニアとは
DevOps(デブオプス)を実践して、より高速な開発を行うために欠かせない職業が「DevOpsエンジニア」です。開発方針やチームの文化に気をくばりながら、バージョン管理、環境構築やデプロイ、監視といった業務を効率化し、ビジネスの価値をより確実かつ迅速に顧客へ届ける役割をにないます。
DevOpsエンジニアは、システムの保守・運用だけでなくインフラ周りの開発までを担当し、大規模なデータや最新ツールを扱う機会が多くなるのが特徴です。そのため、好奇心や技術的な探求心が求められる職業です。また、開発者と運用者の間に入り、双方のコミュニケーションを取りまとめる必要もあります。
DevOpsとは
DevOpsとは、開発「Development」と、運用「Operations」を合わせた言葉です。開発とは様々なプログラムを駆使してシステムを作ることで、運用とは完成されたシステムを使って実際にプログラムを稼動させます。DevOpsは、この2つが協調してビジネスの価値を高める意味合いがあります。
DevOpsエンジニアの仕事内容
DevOpsエンジニアは、開発スピードの向上やサービスの安定運用を実現するための幅広い業務を担当します。具体的な仕事として、ミドルウェアやクラウドなどインフラ環境の構築・運用、パフォーマンスの監視・チューニング、運用・開発改善を目的としたアプリケーションの改修などがあげられます。
そのほか、DevOps関連技術の調査、サービス課題抽出と解決提案、スケーリング・自動化を見据えた運用体制の改善などチーム全体に影響する重要な仕事を任される機会も多くなっています。
DevOpsエンジニアの年収
DevOpsエンジニアの平均年収は、500万円~1500万円程度といわれており。スキルや経験によりかなり幅があります。、AWSなどのクラウドサービスに精通し開発経験が豊富なエンジニアやDevOpsチームのマネジメント経験があるような希少価値が高い人材では1000万円以上の年収になることも少なくありません。
米国での評価も高いDevOpsエンジニアは、Glassdoorの発表した2019年の職業ランキングで6位にランクインしおり、年収の中央値は約1160万円。Indeedの2017年ランキングで3位と人気の高い職業です。
インフラエンジニアとの違い
DevOpsエンジニアは、開発者と運用者の間で起こる問題を予防して、円滑に運用していく役割があります。サービスの安定稼働を担うという点ではインフラエンジニアとしての立ち位置で仕事をおこないますが、運用の自動化や開発の高速化を担当する点は従来のインフラ担当者との違いになります。
例えば、運用者が何か不具合を見つけても、プログラムに詳しくないので何故不具合が起きるのか分かりません。そこで実際に開発者にそのトラブルを報告しますが、これだと問題が起きてから解決するまでに時間がかかってしまいます。しかしDevOpsの手法であれば、開発者と運用者の中間的な役割があり、問題が起きた段階ですぐに自身で対処ができます。
また、何故問題が起きるのかをすぐに判断できるので、的確に開発者側に修正点を報告できます。
DevOpsの手法
次に、DevOpsを実現するために重要な手法と概念を紹介します。これからDevOpsエンジニアを目指す場合は、覚えておきましょう。
継続的インテグレーションと継続的デリバリー (CI/CD)
システム開発者が複数いたり、すでに稼動している別々のプログラムを統合したりすると、高い確率でエラーが出てしまいます。そのシステムだけでは問題が無くても、結合する部分でプログラムがうまくかみ合わない場合に起こるエラーです。そうならないために、予め重要なプログラムを統一しておくことで、エラーなどの無駄な時間を短縮できます。これを継続的インテグレーションと言います。また、継続的インテグレーションを拡張した考えとして、予めシステムコードを変更したらテストから運用までの準備を自動的に行うことを、継続的デリバリーと言います。
バージョン管理
バージョンコントロールとは、自動的にコードのビルドやテストを実行してくれて、バグなどの問題点を検出してくれます。これにより、複数人でコードを共同編集して何か問題が起きても、改訂番号や変更履歴を追跡できるので簡単にコードを回復することができます。また、問題がなければ、そのまま本番環境までデプロイされます。継続的インテグレーションと似ていますが、継続的インテグレーションは、リリースの一歩手前の状態で止まっていてデプロイまではされません。
アジャイル開発
アジャイルソフトウェア開発とは、大規模なシステム全体を計画的に作るのとは違い、優先度の高いシステムから作っていく手法です。プロジェクトには常に変更や修正が必要とされ、顧客のニーズに対応していく必要があります。従来のやり方で開発をしていると、エラーの発見やリリースするまでかなりの時間が必要になります。しかし、アジャイルなソフトウェア開発では、仕様変更からエラーの発見までが素早く行えます。例えば、「顧客情報の管理」「売り上げの管理」「従業員の勤怠管理」の3つのシステム開発をするとします。
従来なら、この3つの開発がすべて完了してからリリースしますが、アジャイルの場合は、「顧客情報の管理」だけが完成した時点ですぐに実装からテスト、運用までを行います。すぐにテストや運用をすることで、顧客が機能を試したり問題点や修正点を発見したりできます。「顧客情報の管理」のシステムを、細かいところを煮詰めずに簡単に作ってすぐに顧客に試してもらい、変更して欲しい部分や追加して欲しいプログラムを洗い出します。そうすることで、エラーの発見から顧客の要望までを短時間で見つけて修正できるようになります。
コードとしてのインフラストラクチャ(Infrastructure as Code)
インフラストラクチャとは、一度開発したプログラムを他でも使い回しすることで、新しいシステム開発を行う場合は、ゼロからコードを打ち込むとかなりの時間が必要になります。そこで、一度作成した再利用できるコードを利用すれば作成の期間を短縮できます。また、すでに稼動しているプログラムはヒューマン エラーのエラーも無くて使い勝手が良い為、問題も発生しにくいメリットもあります。
構成管理(Configuration Management)
Configuration Managementは構成管理という意味で、例えばシステムからデータベース、サーバーなど、古いシステムや開発ツールが旧型になるのを防ぎ、最新の状態にしておくことを言います。古い情報を元にして開発などをしてしまうと、どこかでエラーなどのリスクが発生する恐れがあり、それを防ぐために構成管理ツールなどを使用して、システムの構成を望ましい状態に維持できるようにします。
DevOpsエンジニアに必要なスキル
ここでは、DevOpsエンジニアとして就職・転職するために必要なスキル要件を紹介します。プログラミングからサーバー管理、ネットワークからインフラコードなど、DevOpsエンジニアに求められるスキルはかなり多く、様々な分野に精通していないといけません。
ツールやテクノロジーの知識と理解
必要な知識は多種多様で、ツールから最新のテクノロジーなど多方面の知識と理解力を求められます。しかも、一度覚えた知識でもある程度すると古くなってしまうため、常に新しい知識を増やしていく必要があります。
サーバー負荷・スケーラビリティ確保の経験
スケーラビリティとは、システムの負荷や増大に対して柔軟に拡張することを言います。ネット環境でのプログラムでは、サーバーが必要不可欠です。そのサーバーに負荷がかかった場合は、サーバーのパフォーマンスチューニングと、ロードバランサーを使った解決方法があります。基本的にロードバランサーを使って、増加した負荷を分散する能力が問われます。
インフラ・ネットワークの理解
構成管理ツールなどを使用するには、インフラ・ネットワークの理解があると便利です。サーバーは24時間365日稼動していて、停止して休むことはありません。そのため、強固で安定したネットワーク設計が重要です。また、クラウド上でネットワーク機器を使用する場合もあるので、ネットワークエンジニアとしての経験や知識もあると活かせます。
スクリプト言語でのプログラミング
プログラミングの言語は、大きく分けるとスクリプト言語とコンパイラ言語の2つになりますが、構成管理ツールなどは、主にスクリプト言語を利用します。そのため、スクリプト言語でのプログラミングができると重宝されます。
セキュリティやテストスキル
ネットワークなどの外部からの影響を受けやすい環境では、セキュリティやテストスキルはとても重要です。最悪大事なデータの流出などの問題もあります。そのため、脆弱性や外部からの攻撃を未然に防いだり、不具合が発生した時に対処したりとテストスキルを持って対策ができる人材は重要になります。
クラウドサービスの利用
クラウドサービスとは、ソフトなどのアプリケーションをサーバー上で稼動させることで、ストレージやコンピューティングなどのリソースを必要に応じて利用する形態を言います。構成管理ツールなどもAWSやHeroku、Azureなどのパブリッククラウドを使う場合が多いため、これらの利用経験が必要です。また、クラウドサービスごとにアカウントの管理やセキュリティ確保の仕組みが違うので、それぞれのクラウドサービスの利用経験が必要です。しかもこういったクラウドサービスは、利用した分の費用が発生します。そのため、知識が乏しくて利用経験が無い状態だと、業務として仕事をするには不安になります。
ビジネス・対人スキル
DevOpsエンジニアは、プログラミングの知識はもちろん、組織全体の管理のようなことをするので、様々な人とのコミュニケーションが重要になります。開発側と運用側との円滑な情報のやり取りができると作業効率も上がり、エラーなどの問題にも対処しやすくなります。
DevOpsエンジニアの資格
DevOpsエンジニアとして働く上で、資格を持っていると有利になる場合があります。資格はその人の知識レベルをはかる上で、重要な要素のひとつです。
AWS認定DevOpsエンジニア – プロフェッショナル
AWSのサービスを使用した開発や、セキュリティ、リファクタリングなどAWSに特化した資格があります。AWSの認定資格には「クラウドプラクティショナー(入門)」「アソシエイト(中級)」「プロフェッショナル(上級)」の3段階のレベルに分かれていて、合計6種の認定があります。その中でもAWSを使った開発から運用管理まで、高難易度で技術者向けの「DevOpsエンジニア」の資格があります。
DevOpsエンジニアの需要と将来性
システムの複雑化やクラウドなどの移行により専門的な分野が増えていき、これらをうまくまとめられる人材が今後さらに必要になります。そのため、DevOpsエンジニアの需要は今後も高まっていくでしょう。
DevOpsツール・OSSに精通した人材の需要は高い
OSS(オープンソースソフトウェア)は、オペレーティングシステムで使うLinuxや、データベースの管理であるMySQL、Web上のシステム制御で使うJava、Perl、PHPなどのプログラム言語があります。特に大容量のデータを扱う上で、負荷を減らしてスムーズに行うには、分散処理やコンテナの技術は必要不可欠になります。また、目的や用途によって最適な構成に違いがあるので、様々なOSSや最新のツールに精通した人材の需要はこれからも高くなります。
NoOpsと運用エンジニアの仕事の変化
ITインフラ技術が進歩している中で、運用エンジニアの仕事も変化しています。特にパブリッククラウドを利用したシステム開発が一般的となり、仮想マシンの動作やネットワークの設定などが簡単にできるようになりました。ソフトを使って設定作業ができるため、運用作業が自動化されることで、以前のように手作業でひとつひとつ設定する必要が無くなりました。これにより、「DevOps」による開発と運用の協調という考え方が生まれました。また、システム運用作業を最小化する「NoOps」という概念も出始めました。今後は、さらに自動化が進み、エンジニアの負担が軽減する可能性があり、保守・運用を担うインフラエンジニアの仕事にも影響を与えると考えられています。
広い視点を持つ運用担当者へ
運用作業の効率化に伴い、自動化によって手作業での運用作業の割合が減り、その分をインフラ設計や開発などに割り当てたり新サービスが完成するまでを自動化したりするようになりました。例えば、ある部門が新しいサービスをサーバーにアップロードするだけでそのシステムの動作テストをして、リリース情報管理システムにその状況を記録します。それを運用部門がチェックして、デプロイするといったことを行います。これまではそれぞれの部門が別々に情報伝達していましたが、自動化によってその手間が軽減できるようになりました。そのため、運用エンジニアは個別の運用作業が減少する中で、広い視点を持って運用プロセス全体の設計や改善をしていくことが必要になります。
AIを仕事にするためのキャリアノウハウ、機械学習・AIに関するTopics、フリーランス向けお役立ち情報を投稿します。