2018年の最先端DevOpsエンジニアになるためのロードマップ

@rana_kualuさんの

- [2018年の最先端フロントエンドエンジニアになろう](https://qiita.com/rana_kualu/items/5986ceab8fd4e353de1b)
- [2018年の最先端バックエンドエンジニアになろう](https://qiita.com/rana_kualu/items/19ab559dddbca6674417)

という翻訳記事のDevOps版という感じですが、[HackerNoon](https://hackernoon.com/)に投稿された[The 2018 DevOps RoadMap](https://hackernoon.com/the-2018-devops-roadmap-31588d8670cb)という記事が個人的に大変参考になりましたので、翻訳してみました。

ちなみに関連記事として

- [2018年の最先端バックエンドエンジニアに必要なスキルについて考えてみました。](https://qiita.com/poly_soft/items/fb649573c19b7a5c0227)

という私の記事もございますので、併せてご参照頂けますと幸いです。


# はじめに

DevOpsは最近非常にホットなトピックで、私の友人や同僚、シニア開発者のほとんどは、DevOpsエンジニアになるために非常に熱心に取り組んでおり、組織やチームの中で「DevOpsのチャンピオン」として自分自身をセルフプロデュースしていいます。

私自身は、ソフトウェア開発とデプロイプロセスの改善に直結しているDevOpsのメリットはしっかり把握しているつもりですが、限られた経験から言うならば、**DevOpsエンジニアになることは決して簡単ではありません**。

たくさんのツールの知識や豊富な実践経験が必要であることを考えると、優秀なDevOpsエンジニアになるための正しい道を選ぶのは非常に難しい作業です。

私は[Javaブロガー](https://javarevisited.blogspot.com/)ですが、ブログの読者の多くから下記のような質問が頻繁に送られてきます。

- **どうすればDevOpsエンジニアになれますか？**
- どのツールを学べばよいでしょうか？
- ベストプラクティスはありますか？
- MavenやJenkinsは学ぶべきでしょうか？
- **DockerやKubernetesはどうですか？**
- インフラ構築の自動化はDevOpsエンジニアの作業範囲ですか?
- ChefやPuppetやAnsibleを学んだ方が良いでしょうか？
 
私は、自分自身の乏しい経験から、こういった質問に答えるために真剣に努力してきましたが、有用性が高くて再利用可能な回答をすることが今まで出来ませんでした。

しかしもう心配はいりません。本日私は、DevOpsエンジニアになりたいと心から願っている皆さんのための最高のリソースを紹介します。

それが**The 2018 DevOps RoadMap**です。

私は昨日ネットサーフィンをしているときに[Kamranahmedse](https://github.com/kamranahmedse)のこの[素晴らしいGitHubページ](https://github.com/kamranahmedse/developer-roadmap)に出会いました。

このページは、フロントエンドエンジニア、バックエンドエンジニアのための有用なロードマップを提示していますが、それだけでなく、DevOpsエンジニアになるためのロードマップも提示しているのです。

このロードマップは、DevOpsエンジニアの具体的な役割を説明しているだけでなく、DevOpsエンジニアの職域をカバーするためにどのようなツールが必要かというのも明示してくれています。

ビジュアル的にも魅力的で、簡単に参照出来るように印刷してデスクの上に置いておくことが出来ます。

このロードマップをコンプリートするために、便利なオンラインコースも本文内でいくつか紹介しておきましたので、皆さんはそれらのツールを学んでスキルを改善していってください。

# 2018年の最先端DevOpsエンジニアになるためのロードマップ

とにかくこちらが、私の話している「The 2018 DevOps RoadMap」です

![devops.png](https://qiita-image-store.s3.amazonaws.com/0/22932/9a748067-461d-db10-8b9a-7eb78a60fa6b.png)


https://github.com/kamranahmedse/developer-roadmap

それではロードマップを順番に見ていって、2018年のDevOpsの達人になるために必須のスキルをどのように学べばいいかを考えていきましょう。

## 1.プログラミング言語を学ぶ


皆さんは間違いなく下記の主要なプログラミング言語のうち1つは経験があることでしょう。

- Java
- Python
- JavaScript

もしこれらの言語の経験がなくても、下記のオンラインコースで学ぶことが可能なので心配はいりませんが、これらの言語の内最低でも1つは習得しておくことを強くお薦めします。

### Java

あなたがJavaを学びたいなら、Udemyの[Complete Java MasterClass](https://www.udemy.com/java-the-complete-java-developer-course/)は素晴らしいコースです。Java11に対応しています。

### Python

あなたがPythonを学びたいなら、Udemyの[Complete Python BootCamp](https://www.udemy.com/complete-python-bootcamp/)は私のお気に入りのコースです。Pythonの最もポピュラーなバージョンであるPython3を学べます。

### JavaScript

あなたがJavaScriptを学びたいなら、Udemyの[Mosh Hamdani’s JavaScript Basics for Beginners](https://www.udemy.com/javascript-basics-for-beginners/)を見過ごしてはなりません。

もしあなたが無料のコースから学ぶことを好む場合は、私の[Java](https://javarevisited.blogspot.com/2018/08/top-5-free-java-8-and-9-courses-for-programmers.html)、[Python](http://www.java67.com/2018/02/5-free-python-online-courses-for-beginners.html)、[JavaScript](http://www.java67.com/2018/04/top-5-free-javascript-courses-to-learn.html)に関する無料コースのリストをいつでもご参照ください。

## 2.OSの様々なコンセプトを理解する

ここはOps(運用)の領域です。以前は、OSやハードウェアに関してはシステム運用管理者やサポート担当者だけが責任を持っていましたが、DevOpsにおいては、開発者にもこの分野の知見が要求されます。

このロードマップが提示しているように、最低でも「プロセス管理」「スレッドと並行性」「ソケット」「I/O管理」「仮想化」「メモリストレージとファイルシステム」に関しては知っておく必要があるでしょう。

我々のほとんどはOSにはLinuxを使用していますので、Linuxを良く知るためにUdemyの[Linux Administration BootCamp](https://www.udemy.com/linux-administration-bootcamp/)で学ぶことをお薦めします。
 
あなたが無料のコースから学ぶことを好む場合は、私の[free Linux courses](http://www.java67.com/2018/02/5-free-linux-unix-courses-for-programmers-learn-online.html)のリストをご参照ください。

## 3.サーバー管理を学ぶ

Linuxプラットフォームを使用するDevOpsエンジニアにとって、ターミナルにおけるコマンドの使用法に習熟することは非常に重要です。

BashやKsh等のLinuxシェル、あるいはfindやgrepやawk、sedやlsof、そしてnslookupやnetstat等のネットワークコマンド等の知識は不可欠です。

あなたがこれらのツールやコマンドの知識をブラッシュアップしたいなら、Pluralsightの[Linux Command Line Interface (CLI) Fundamentals](https://www.pluralsight.com/courses/linux-cli-fundamentals)は役に立つでしょう。

Pluralsightは開発者にとってのNetflixのようなものです。既に6000以上の、最先端テクノロジーに関するハイクオリティなオンラインコースが提供されており、それをいつでもどこでも学ぶことが出来ます。(私は主に旅行や通勤の際に学んでいます)

シェルスクリプティングに関する他のコースも知りたい場合は、私の[best courses to learn shell scripting](https://javarevisited.blogspot.com/2018/02/5-courses-to-learn-shell-scripting-in-linux.html)をご参照ください
 
## 4.ネットワークとセキュリティに関して学ぶ

孤独の時代は過ぎ去り、今日の世界では全てのものが繋がっているので、そのことがネットワークとセキュリティの重要性をさらに高めています。

良いDevOpsエンジニアになりたければ、基本的なネットワークとセキュリティのコンセプト、例えばDNS、OSI参照モデル、HTTP、HTTPS、FTP、SSL、TLS等に関しては必ず知っておく必要があります。

これらに関する知識をアップデートしたいなら、Ed LibermanによるPluralsightの[TCP/IP and Networking Fundamentals for IT Pros](https://www.pluralsight.com/courses/tcpip-networking-it-pros)をお薦めします。

## 5.ミドルウェアを理解しセットアップする方法を学ぶ

- 注：原文では「What is and how to setup ___」というサブタイトルでしたが少々分かりにくいと判断して意訳させて頂きました。

DevOpsのチャンピオンとして、サーバになにがセットアップされているのか、どのようにセットアップすれば良いのかを知る必要があります。それによってやっと「自動化」について考えることが出来るのです。

一般的に、DevOpsエンジニアはIISやApache、Tomcat等のWebサーバのセットアップ方法を把握しておく必要があります。

キャッシュサーバ、ロードバランサ、リバースプロキシ、ファイアウォール等に関しても同様です。

あなたがこの分野に関する初学者なら、Colt SteeleによるUdemyの[The Web Developer Bootcamp](https://www.udemy.com/the-web-developer-bootcamp/)をお薦めします。

## 6.インフラのコード化を学ぶ

この分野はおそらくDevOpsエンジニアにとって最重要で、かつ非常に広大な領域でもあります。

DevOpsエンジニアとして、DockerやKubernetes等のコンテナ技術、AnsibleやChefやSaltやPuppetのような構成管理ツール、TerraformやCloudFormationのようなプロビジョニングツール等に関しては必ず知っておく必要があります。

以下は、これらのツールを学ぶ上での私のお薦めオンラインコースの一覧です。

もしあなたがDockerを学びたいなら、Udemyの[Docker Mastery: The Complete Toolset From a Docker Captain](https://www.udemy.com/docker-mastery/)はその最初のコースとしてベストでしょう。DevOpsエンジニアが知っておくべきツールに関して包括的に網羅されています。

もしあなたがKubernetesを学びたいなら、[Learn DevOps: The Complete Kubernetes Course](https://www.udemy.com/learn-devops-the-complete-kubernetes-course/)をお薦めします。Kubernetesにおけるビルドとデプロイ、そして管理手法に関して学ぶことが出来ます。

もしあなたがChefを学びたいなら、[Chef Fundamentals: A Recipe for Automating Infrastructure](https://www.udemy.com/chef-fundamentals-a-recipe-for-automating-infrastructure/)よりも優れたコースは他にありません。Chefを学びたいならおそらく現時点でこのコースが最良でしょう。

Dockerの学習に関してさらに他の選択肢を知りたい方は[10 essential courses for DevOps Engineer](https://javarevisited.blogspot.com/2018/09/10-devops-courses-for-experienced-java-developers.html)をチェックしてみてください。

## 7.CI/CDツールを学ぶ

- CI：継続的インテグレーション
- CD：継続的デリバリー

これもまたDevOpsの達人やDevOpsのチャンピオンにとっては非常に重要な分野です。(例えばCIやCDのパイプラインの構築等)

CI/CDの領域には、Jenkins、TeamCity、Drone等のたくさんのツールがありますが、私は少なくとも「Jenkins」を学んでおくことを強くお薦めします。

Jenkinsは広く使われており、現在のマーケットではおそらく最も成熟したCI/CDツールです。

もしあなたがJenkinsについて学びたいなら、Udemyの[Master Jenkins CI For DevOps and Developers](https://www.udemy.com/the-complete-jenkins-course-for-developers-and-devops/)よりも素晴らしいコースは他にありません。このコースは単純に言って最高のコースで、私のJenkinsに関するほとんどのスキルはこのコースで得ました。

無料コースがお望みなら、[6 free Jenkins and Maven courses for Java developers](http://www.java67.com/2018/02/6-free-maven-and-jenkins-online-courses-for-java-developers.html)をチェックしてみてください。

## 8.ソフトウェアとインフラの監視手法を学ぶ

ミドルウェアのセットアップやデプロイメントとは別に、監視もDevOpsの重要な領域です。そのため、DevOpsエンジニアはアプリケーションやインフラの監視方法について学ばなければいけません。

この分野には、例えばNagios、Icing、Datadog、Zabbix、Monit、AppDynamics、NewRelic等の様々なツールが存在します。

これらの中から適切なツールを、会社のニーズに合わせて選択出来るようになる必要があります。

## 9.クラウドプロバイダーについて学ぶ

クラウドは非常に重要な分野であり、あなたの会社のサービスは遅かれ早かれクラウド環境に移行することになるでしょうから、DevOpsエンジニアにとっていくつかのクラウドプロバイダーとそれに関する基礎知識を学んでおくことは重要です。

AWSは明らかにこの分野のリーダーですが、Google CloudやAzureも徐々に追いついて来ていますし、HerokuやCloud Foundry、Digital Oceanといった他のプレイヤーも存在します。

クラウドについて学び始める際には、Udemyの[AWS Serverless APIs & Apps - A Complete Introduction](https://www.udemy.com/aws-serverless-a-complete-introduction/)を強くお薦めします。これが現在のベストのコースでしょう。

無料コースがお望みなら、[free AWS courses](http://www.java67.com/2018/05/top-5-amazon-web-services-or-aws-courses-to-learn-online.html)をチェックしてみてください。

# 最後に

この記事を最後まで読んでくれてありがとうございます。おそらく「学ぶべきことが大量にあり、学ぶべきコースも大量にある。大変だ」と思ったことでしょう。でも心配はいりません。

あなたは既にこれらの分野の多くについて知っている可能性がありますし、無料の有用な学習リソースもたくさんあります。

私は特にUdemyのファンです。Udemyは非常に手頃な価格でたくさんのバリューを提供していますが、どういう学習リソースを使用するかはあなた次第ですし、ここで説明したような知識が一日の終わりに十分に身についているようなコースを選ぶべきです。

あなたのDevOpsエンジニアとしての旅に幸運を祈ります。簡単なことではありませんが、このロードマップとガイドを辿ることで、あなたは一歩ずつDevOpsエンジニアへと近づいていくことが出来るでしょう。

新しい投稿があった際に通知されるように、是非私のブログに登録してください。そしてTwitterで[@javarevisited](https://twitter.com/javarevisited)をフォローするのも忘れないでくださいね。

最後に、このような素晴らしいコンテンツを作ってくれた[@kamranahmedse](https://medium.com/@kamranahmedse)に心から感謝いたします。

# 訳者の所感

筆者の方およびロードマップをご作成された方は主に「オンプレ環境の開発者」を対象にされているようなのですが、最近の若いエンジニアの方たちの多くは「クラウドネイティブ」つまり「**クラウド環境でしか仕事をしたことがないし今後もおそらくクラウド環境以外使用しない**」方たちがほとんどだと思いますので、記事内で名前の挙がった技術のうち、「Jenkins」等のアンマネージドなCI/CDツール、「Zabbix」等のアンマネージドな監視ツール等の知識は不要(少なくとも事前に学んでおく必要はない)というのが訳者の意見です。

また今後は、専門のSREやインフラエンジニアを雇う余裕のない企業さんでは「**バックエンドエンジニアがDevOpsエンジニアも兼ねる**」というケースがどんどん増えていくと思うのですが、その際に「アンマネージドなツールやサービス」を使ってしまうと「運用の手間が格段に増えてしまう」という大きなデメリットがありますので、そういう企業さんでは基本的に「**クラウドのマネージドサービスだけでインフラを構築するというポリシーを徹底しておく必要がある**」のではないかと思います。

ちなみに記事内で最も驚いたのは、Udemyやその他のオンラインコースのDevOps系学習リソースの充実度です。海外では[DevOpsエンジニアが最も高給取り](https://japan.zdnet.com/article/35125400/)という調査結果もあるようで、それがオンラインコースの充実にも繋がっているのかなと思うのですが、海外と比較すると日本はDevOpsエンジニアの重要度があまり認識されていないようなので、バックエンドエンジニア兼DevOpsエンジニアとしては寂しい限りです(-_-;)

# 訳者おまけ

Youtubeの方で、Web系エンジニアやWeb系エンジニアに興味のある方たち向けの[雑食系エンジニアTV](https://www.youtube.com/channel/UC_HLK-ksslL-Z_2wiIZDlMg)というチャンネルをやっています。もしご興味ございましたらチャンネル登録してみて頂けると大変嬉しいです。

また、2019年から「[雑食系エンジニアサロン](https://kentakatsumata.net/archives/10)」というオンラインサロンも始めました。

Twitterの方でも「Web系エンジニアのキャリア戦略」を中心に色々と情報を発信しておりますので、もし宜しければフォローしてみてください。[@poly_soft](https://twitter.com/poly_soft)