DevOpsエンジニアとは、アプリケーションやシステムの開発スピード向上とサービスの安定運用の両方を実現するための仕組みづくりをするエンジニアのことを指します。開発と運用の両方に関わることから、アプリケーションやシステムの開発・改善から、クラウドなどのインフラ環境の構築・運用まで、幅広い業務をこなすことが求められます。
そもそも「DevOps(デブオプス)」とは何かというと、「Development(開発)」と「Operations(運用)」を合わせた造語です。端的に言うと、開発側と運用側が協力し、アプリケーションやシステムの開発スピードを担保しつつ、サービスの安定運用も実現させるという考え方です。
開発スピードを上げるという点からアジャイル開発と混同されやすい考え方ですが、こちらは後ほど解説いたします。
DevOpsエンジニアは、ITエンジニアの職種の1つとして挙げられますが、ITエンジニア未経験からいきなり目指せる職種ではなく、幅広いスキルの獲得や豊富な経験を積む必要があります。その分、年収は500万円~1500万円が相場であり、ITエンジニアの平均年収452万円(※doda社調べ)と比較すると高い傾向があります。
今後、システムの複雑化やインフラ環境がクラウドなどへの移行により専門的な分野が増えていくことが予想されるため、ますますDevOpsエンジニアの需要は高まると考えられます。
この記事では、今注目されているDevOpsエンジニアの概要に触れつつ、どのようにしたらDevOpsエンジニアになれるのかを解説していきます。
Contents
DevOpsエンジニアは開発に関わるという点でインフラエンジニアと異なる
DevOpsエンジニアは、ITエンジニアの職種の中でもあまり聞きなれない職種ですが、インフラエンジニアと比較されることが多いです。理由としては、どちらもサーバー管理などに携わる職種であるためです。
DevOpsエンジニアとインフラエンジニアの違いを簡単に表にまとめましたので、まずは下記を参考にしながら、DevOpsエンジニアのイメージを掴んでください。
◆DevOpsエンジニアとインフラエンジニアの違い
DevOpsエンジニアとインフラエンジニアの違いを端的に言うと、アプリケーションやシステム開発まで携わるかどうかという点です。DevOpsエンジニアとインフラエンジニアのどちらもネットワークやサーバーに関する業務を行いますが、DevOpsエンジニアはそれにプラスして、アプリケーションやシステム開発まで関わります。
つまり、DevOpsエンジニアはインフラエンジニアの先のキャリアだと考えるとイメージしやすいでしょう。そのため、DevOpsエンジニアはインフラエンジニア以上に、知識や経験が求められる職種です。
DevOpsエンジニアが担う役割はズバリ自動化!
ここからは、DevOpsエンジニアに求められる役割を解説していきます。先ほど解説したように、DevOpsとは、開発の「高速化」とシステムの「安定運用」実現するために生まれ経考え方ですが、実際にそれを実現するDevOpsエンジニアはどんな役割を求められるのでしょうか?
ここからは、DevOpsエンジニアの役割について具体的に説明いたします。
システムを安定運用させるために必須「インフラのコード化」
インフラのコード化とは、コードでインフラ設定を記載しておき、システムやソフトウェアの実行環境や開発環境の構築作業を自動化することです。
インフラ構築における、用意した設計書にしたがってコマンドを打っていくという作業は、規模が大きくなればなるほど非常に手間がかかり、莫大なコストと工数が必要になります。また、人の手で作業を行う場合、どうしてもヒューマンエラーが起こりやすいという問題点もあります。
仮に、インフラ設定を一度コードで記述してしまえば、あとはコード実行するだけでインフラ環境を自動で構築できます。また、同じコードを実行するので、大量のサーバーを構築する際にもヒューマンエラーもなく、同じ環境を作ることができるのです。複数のサーバーで同じ環境を再現できることとで、インフラ設定の差異に起因した問題が起きづらくなります。
システムの「安定運用」を実現させたい、DevOpsエンジニアにとって、インフラ構築時の工数削減とヒューマンエラーをなくすことのできる、「インフラのコード化」は押さえておくべき重要スキルです。
ただし、インフラのコード化を行うためには、インフラ構築のためのスキルが必要で、スキル習得などの学習コストがかかります。さらにインフラエンジニアとしての業務経験が必要となる場合があります。
開発を高速化させる「CI/CDパイプラインの構築」
アプリケーションやシステム開発の「迅速化」を目指すDevOpsエンジニアにとって、CI/CDパイプラインの構築は最重要スキルです。
CI/CDパイプラインとは、CI/CDを実践するために必要な一連のステップを自動化したものです。このCI/CDとは、ソフトウェア開発を高速化するため、ビルドやインテグレート、テストなどを自動化し、すぐに本番環境にリリース可能な状態にする手法のことです。
CI(継続的インテグレーション)とは、コードに変更があると、ビルドからテストまで自動化する手法。
CD(継続的デリバリー)とは、テストを通過したソフトウェアを自動で本番環境にリリースできる状態にする手法。
◆CI/CDパイプライン
つまり、CI/CDパイプラインを構築することで、
ビルド → インテグレート → テスト → リリース → デプロイ
の一連のステップを自動化することができます。コードに変更があると、ビルド~テスト~デプロイまでのステップが自動化されるため、開発プロセスのリードタイムを短くすることができます。
このことで、開発側の担当者全員が構築したパイプラインを活用することでソフトウェアのリリースを高速化できます。
CI / CDツールにはオンプレミス型とクラウド型があり、オンプレミス型ではJenkins・Drone、クラウド型ではTravis CI・CircleCIなどがあります。DevOpsエンジニアは、用途に合わせてツールを使い分け、CI/CDパイプラインを構築する必要があります。
管理コストや作業時間の削減につながる「マネージドサービスの知見」
マネージドサービスとは、サーバーの運用管理・保守などの一部をアウトソーシングできるサービスを指します。
サーバーを安定的に運用するためには、ハードウェアの調達から、機器・回線の管理、トラブル対応まで非常に幅広い業務が発生しますが、サーバーの運用管理・保守には専門的な知識を要するため、専門人材が必須でコストや負担が多くかかります。
この負担を抑えられるのが、マネージドサービスです。マネージドサービスを使いこなすことができれば、障害対応やセキュリティ対策といったことに割く人員を減らすことができるので、業務の効率化が図れるため、結果的にシステムの安定運用につながります。
社内にいるエンジニアの全員が、インフラに関する知識が豊富なわけではないので、上手くマネージドサービスを活用して、管理コストや作業時間を削減するというのもDevOpsエンジニアに求められる役割の一つです。
DevOpsエンジニアに求められる役割は、自分で手を動かして作業をするというよりは、開発側や運用側が、より業務を遂行できるための仕組みづくりを担うことです。
2021年版: DevOpsエンジニアになるためのロードマップ
ここからは、実際にDevOpsエンジニアになるためには何をすべきかを解説していきます。
なおこちらで記載する内容は、「2021年版: DevOpsエンジニアになるためのRoadmap」の記事を参考にさせていただきました。ぜひこちらの記事もご覧ください。
では早速、DevOpsエンジニアになるためのロードマップを解説していきます。全部で9工程あります。
◆DevOpsエンジニアになるためのロードマップ
1.プログラミング言語を学ぶ
システム開発を行うには、プログラミング言語を習得しておく必要があります。できれば、Java・Python・Rubyのどれか一つは押さえておきましょう。
それぞれの言語の特徴として、Javaは基本的にどんな環境でも使える、Pythonは比較的シンプルで理解しやすい、Rubyは日本発祥のプログラミング言語のため、日本語での情報収集がしやすい、コードがシンプルで読みやすいことから初心者でも始めやすいといったことがあります。
2.OSのさまざまなコンセプトを理解する
これは「Operations(運用)」の領域です。従来は、OSやハードウェアに関してはシステム運用管理者やサポート担当者だけが責任を持っていましたが、DevOpsエンジニアは、システムやインフラの両方に関わるため、OSなどの分野の知見も要求されます。
プロセス管理やメモリストレージとファイルシステムなど重要なシステムについては勉強しておく必要があります。
3.サーバー管理を学ぶ
サービスを安定的に運用するためには、サーバーを構築してシステムや環境を作る必要があります。
具体的には、アプリケーションやサービスの稼働状況、CPU やメモリなどリソースの使用状況のモニタリングから、システムのアップデートや、改善すべきプログラムの修正、障害発生時の対応などを行う必要があるため、サーバーに関する全般的な知識を身に付けておく必要があります。
4.ネットワークとセキュリティに関して学ぶ
技術の進化によりさまざまなものと繋がれるようになった分、昨今はセキュリティ被害も増加の一途にあります。セキュリティ対策が不十分であれば、顧客情報などの重要データの流出につながるため、ネットワークとセキュリティに関しても学んでおきましょう。
DNS、FTP、SSLなどの、基本的ですが必要不可欠なものについては必ず押さえておきましょう。
5.ミドルウェアを理解しセットアップする方法を学ぶ
ミドルウェアとは、コンピューター内のアプリケーションとOSの中間的な処理を行なうソフトウェアのことです。Webサーバーやアプリケーションサーバー、データベース管理サーバーがミドルウェアに該当します。
◆ミドルウェアについて
Webサーバーやアプリケーションサーバーの構造を理解し、さらに立ち上げる(セットアップする)方法を学ぶことで、システムについての理解が深まります。そうすることで、システム運用の効率化やインフラ環境構築の自動化を考えるステップに進んでいくことができます。
6.インフラのコード化を学ぶ
インフラのコード化は、先ほど説明した通り、コードでインフラ設定を記載しておき、システムやソフトウェアの実行環境や開発環境の構築作業を自動化することです。
インフラをコード化するメリットとして、「別環境を作る際にまた手動で同じ作業を行う必要がなくなる」「現在のインフラやサーバーの構成を把握することが容易になる」「手順書管理をしなくてもよくなる」というメリットがあります。
7.CI/CDパイプライン構築ツールを学ぶ
こちらも先ほど説明した通り、CI/CDとは、ソフトウェア開発を高速化するため、ビルドやインテグレート、テストなどを自動化し、すぐに本番環境にリリース可能な状態にする手法のことです。
CI/CDパイプラインを構築するためのツールは、オープンソースから商用のものまで色々ありますが、CI/CD全てを1つのツールで自動化することは難しく、開発工程に合わせてツールを組み合わせてCI/CDパイプラインを作るのが一般的であるため、複数のツールの使い方を覚える必要があります。
8.ソフトウェアとインフラの監視手法を学ぶ
ミドルウェアのセットアップやデプロイメント以外に、ソフトウェアとインフラの監視もDevOpsエンジニアの重要な役割です。
監視とは、具体的に、アプリケーションやネットワーク、サーバー、OS、ミドルウェアの機能に異常や問題がないかを常時確認することです。
監視を行うためのツールはすでに様々なものが提供されているので、DevOpsエンジニアはその中から適切なツールを、会社のニーズに合わせて選択できるようになる必要があります。
9.パブリッククラウドについて学ぶ
パブリッククラウドとは、企業や個人など不特定多数のユーザーに対し、インターネットを通じて、サーバーやストレージ、データベース、ソフトウェアなどのクラウドコンピューティング環境を提供するサービスのことを指します。具体的には、AWS(Amazon Web Services)やIBM Cloud、GCP(Google Cloud Platform)などが該当します。
自社でサーバーを保有する必要がないため、昨今、パブリッククラウドの利用が急速に普及しており、すでに多くの会社が、サーバーをクラウド環境に移行しています。DevOpsエンジニアにとってパブリッククラウドに関する基礎知識を学んでおくことは非常に重要です。
有名どころの、AWS、GCPはチェックしておきたいパブリッククラウドです。
以上が、2021年版のDevOpsエンジニアになるためのロードマップです。DevOpsエンジニアはITエンジニアの一種であるため、もちろんプログラミング言語を習得しておく必要がありますが、それだけでなく、さまざまなツールの扱い方やインフラ(特にクラウド)の知識が求められます。
記事冒頭で説明した通り、DevOpsエンジニアは幅広い知識や豊富な経験が必要となるため、アプリケーションエンジニアやインフラエンジニアの先につながる職種といえます。その分目指しがいのある職種なのではないでしょうか?
「DevOps」は仕組み、「アジャイル開発」は開発手法
先ほど紹介したように、「DevOps」とは、「Development」と「Operations」を合わせた造語です。開発側のアプリケーションやシステムを迅速に開発したいという目的と運用側のシステムを安定的に稼働させたいという目的が相反するという背景から、DevOpsという考え方が生まれました。
つまり、開発側は、システムをより良いものにしていくために、一般的には「新機能の追加、既存機能のアップデートをしていこう」という方針をとります。これに対して、運用側は、ユーザーがいつでも安心してサービスを利用できるようにするため、システムや機能にトラブルが発生することをなるべく避け、「安定して稼働しているものは、なるべくそのままの状態にしておく」という方針をとることが多いのです。
この矛盾を解消するために生まれたのが「DevOps」という概念です。
そして「アジャイル開発」とは、「素早い」や「機敏な」という意味があり、具体的には、アプリケーションやシステム開発を行う際、「計画→設計→実装→テスト」という開発工程を短い期間で何度も繰り返す手法です。
作りたいシステムを大まかに決めた後は「計画、設計、実装、テストの反復(イテレーション)」を繰り返し、比較的早期にシステムをリリースします。システムのリリース後は、ユーザーやクライアントからのフィードバックをもとに、システムの改良を繰り返して行う流れであり、臨機応変・柔軟にシステムを作っていけることがメリットです。
このアジャイル開発は、「ウォーターフォール開発」と対をなす開発手法です。ウォーターフォール開発は、「設計→開発→実装→テスト」という開発工程を、各工程に分けて段階的に開発していく手法です。ウォーターフォール開発の大まかな手順は、システムに搭載する機能や細かな仕様をすべて決めてから開発がスタートし、その後、1つひとつの工程をしっかりと完了させながら行う、というものです。「前の工程には戻らないこと」を前提に開発が進行するので、すべての工程が完了した後に、晴れてシステムやソフトウェアがリリースされる仕組みです。以前までは多くの企業がこの手法で開発を行っていました。
しかし、システムやアプリケーションをリリースした際に、リリース後に改善点を発見したり、ユーザーからもっとこうしてほしいというフィードバックを受けることは日常茶飯事であり、ウォーターフォール開発で時間をかけて開発を行っても、後々、改修作業はどうしても発生します。
このことから、「計画→設計→実装→テスト」を短期間で何度も繰り返すアジャイル開発は、ユーザーニーズに対応しやすいという観点から、この開発手法を取り入れる企業が増えています。そしてアジャイル開発は、開発スピード向上とサービスの安定運用の両方を実現する「DevOps」と非常に相性がいいです。
アジャイル開発を取り入れることで、DevOpsエンジニアは、「開発スピード向上」させつつ、開発側と運用側が協力できる仕組みを作り「サービスの安定運用」を実現することができるため、現在需要が高くなっているのです。
◆アジャイル開発とウォーターフォール開発の違い
ちなみに、DevOpsはという言葉が使われるようになったのは、2009年に開催されたオライリー社主催の「O’Reilly Velocity 09」というカンファレンスです。
このカンファレンスに登壇した、当時写真共有サービスFlickrのエンジニアであるJohn Allspaw氏とPaul Hammond氏が発表したプレゼンテーション「10 Deploys a Day:Dev and Ops Cooperation at Flickr」の中で、DevOpsが使用されていました。
このプレゼンテーションの内容は、「開発側と運用側が共通の目的に向かって協力することで、1日に10回以上デプロイするような高速な開発を実現できる」というものでした。
(※デプロイとは、簡単に説明するとプログラムを使える状態にすることです。)
ITの進展やDX推進により、ますます需要が高まるDevOpsエンジニア
DevOpsエンジニアは現在需要がどんどん高まっている業種です。
理由としては、ITの進展やDX(デジタルトランスフォーメーション)の推進とともにシステムなどの開発における開発期間の短縮、変更等への柔軟な対応が求められる傾向が強まっているからです。
先ほども解説しましたが、現在はサービスをリリースした後も、ユーザーからのフィードバックを受けながらサービスをより良くしていくことが求められる時代であるため、開発だけでなく改善スピードも「高速化」しつつ運用の「安定化」に貢献できるDevOpsエンジニアの需要は高まっています。
こちらの「日立製作所に聞く、大規模開発におけるDevOpsやDevSecOpsの現在地」の記事よると、日立製作所でもDevOpsという考え方が取り入れられることもあるようです。
記事によると、DevOpsが注目されている背景として、日本でも多くの企業や組織が取り組み始めたDXがあるとされています。一般的にDXは新規ビジネスが主目的であり、新しいものを作るためにビジネスモデルが明確でなく、システムの仕様も固定的ではありません。
そのため、開発後リリースしてからも、浮き彫りになった課題点を改善していき、安定した運用を行う必要があるため、DevOpsという考え方が採用されています。このように昨今では、大手企業・中小ベンチャー企業を問わず、DevOpsという考え方は注目され始めています。
今後は、AWSやGCPといったパブリッククラウドの需要も伸びていることからも、そういった分野に精通しつつ、開発側にも関わることのできるDevOpsエンジニアはより一層されることが予測されます。
まとめ
この記事では、DevOpsエンジニアについて解説してきました。幅広い知識に精通しているかつ、豊富な経験が求められることから、DevOpsエンジニアになるための道のりは険しいです。
DevOpsエンジニアになるための方法に正解はありません。しかし、ITエンジニア未経験者がDevOpsエンジニアを目指すのであれば、インフラエンジニアやWEBアプリケーションエンジニアで経験を積んだ後にステップアップするというのが、比較的なりやすい方法でしょう。
弊社ではITエンジニアのための転職エージェントサービス「GTalent(ジータレント)」、エンジニアが企業と直接繋がることができるスカウト・求人情報サイト「GitTap」を提供しています。日本で働く外国人ITエンジニア、グローバルな環境を求める日本人ITエンジニアの方のために、さまざまな採用案件を取り扱っていますので、ぜひ「G Talent」「GitTap」のサービスページもご覧ください。
外国人ITエンジニアの転職・求人なら G Talent(ジータレント)
外国籍ITエンジニアに特化した採用プラットフォーム GitTap(ギットタップ)