devops
翻訳

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

@rana_kualuさんの

という翻訳記事のDevOps版という感じですが、HackerNoonに投稿されたThe 2018 DevOps RoadMapという記事が個人的に大変参考になりましたので、翻訳してみました。

ちなみに関連記事として

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

はじめに

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

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

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

私はJavaブロガーですが、ブログの読者の多くから下記のような質問が頻繁に送られてきます。

  • どうすればDevOpsエンジニアになれますか?
  • どのツールを学べばよいでしょうか?
  • ベストプラクティスはありますか?
  • MavenやJenkinsは学ぶべきでしょうか?
  • DockerやKubernetesはどうですか?
  • インフラ構築の自動化はDevOpsエンジニアの作業範囲ですか?
  • ChefやPuppetやAnsibleを学んだ方が良いでしょうか?

私は、自分自身の乏しい経験から、こういった質問に答えるために真剣に努力してきましたが、有用性が高くて再利用可能な回答をすることが今まで出来ませんでした。

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

それがThe 2018 DevOps RoadMapです。

私は昨日ネットサーフィンをしているときにKamranahmedseのこの素晴らしいGitHubページに出会いました。

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

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

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

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

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

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

devops.png

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

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

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

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

  • Java
  • Python
  • JavaScript

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

Java

あなたがJavaを学びたいなら、UdemyのComplete Java MasterClassは素晴らしいコースです。Java11に対応しています。

Python

あなたがPythonを学びたいなら、UdemyのComplete Python BootCampは私のお気に入りのコースです。Pythonの最もポピュラーなバージョンであるPython3を学べます。

JavaScript

あなたがJavaScriptを学びたいなら、UdemyのMosh Hamdani’s JavaScript Basics for Beginnersを見過ごしてはなりません。

もしあなたが無料のコースから学ぶことを好む場合は、私のJavaPythonJavaScriptに関する無料コースのリストをいつでもご参照ください。

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

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

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

我々のほとんどはOSにはLinuxを使用していますので、Linuxを良く知るためにUdemyのLinux Administration BootCampで学ぶことをお薦めします。

あなたが無料のコースから学ぶことを好む場合は、私のfree Linux coursesのリストをご参照ください。

3.サーバー管理を学ぶ

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

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

あなたがこれらのツールやコマンドの知識をブラッシュアップしたいなら、PluralsightのLinux Command Line Interface (CLI) Fundamentalsは役に立つでしょう。

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

シェルスクリプティングに関する他のコースも知りたい場合は、私のbest courses to learn shell scriptingをご参照ください

4.ネットワークとセキュリティに関して学ぶ

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

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

これらに関する知識をアップデートしたいなら、Ed LibermanによるPluralsightのTCP/IP and Networking Fundamentals for IT Prosをお薦めします。

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

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

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

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

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

あなたがこの分野に関する初学者なら、Colt SteeleによるUdemyの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はその最初のコースとしてベストでしょう。DevOpsエンジニアが知っておくべきツールに関して包括的に網羅されています。

もしあなたがKubernetesを学びたいなら、Learn DevOps: The Complete Kubernetes Courseをお薦めします。Kubernetesにおけるビルドとデプロイ、そして管理手法に関して学ぶことが出来ます。

もしあなたがChefを学びたいなら、Chef Fundamentals: A Recipe for Automating Infrastructureよりも優れたコースは他にありません。Chefを学びたいならおそらく現時点でこのコースが最良でしょう。

Dockerの学習に関してさらに他の選択肢を知りたい方は10 essential courses for DevOps Engineerをチェックしてみてください。

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よりも素晴らしいコースは他にありません。このコースは単純に言って最高のコースで、私のJenkinsに関するほとんどのスキルはこのコースで得ました。

無料コースがお望みなら、6 free Jenkins and Maven courses for Java developersをチェックしてみてください。

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を強くお薦めします。これが現在のベストのコースでしょう。

無料コースがお望みなら、free AWS coursesをチェックしてみてください。

最後に

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

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

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

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

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

最後に、このような素晴らしいコンテンツを作ってくれた@kamranahmedseに心から感謝いたします。

訳者の所感

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

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

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

訳者おまけ

Youtubeの方で、Web系エンジニアやWeb系エンジニアに興味のある方たち向けの雑食系エンジニアTVというチャンネルをやっています。もしご興味ございましたらチャンネル登録してみて頂けると大変嬉しいです。

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