こんにちは。
エンジニアのくるくるです。
今回はインフラ周りのお話です。
対象としては、フロントエンドエンジニアやサーバーサイドエンジニアで、インフラ周りにも少し興味が出てきたぞ、、、という人向けです。
(がっつりインフラエンジニアとして働いている人向けではありません。)
インフラエンジニアがいる会社では、インフラエンジニア以外のエンジニアがインフラ周りのことを触ることはほぼないかと思います。
しかし、インフラエンジニアが足りない会社では、サーバーサイドのエンジニアがインフラ周りも少し触らないといけないという状況が生まれてきます。
また、個人でプロジェクトを立ち上げてWebサービスを作る場合、あなたがサーバーサイドエンジニアであろうとフロントエンドエンジニアであろうと、インフラ周りの最低限の知識を持っておく必要があります。
(とはいえ、もちろんインフラ周りは全てHerokuに丸投げというパターンもあります。)
普段インフラ周りを触っていないと、「インフラ」と聞くだけで少し身構えてしまいます。
インフラとはかなり巨大な分野で、どこから手をつけたらいいのか分からないという人がほとんどかと思います。
どこから手をつけたらいいか分からないから、結局何も手をつけられない、という人もいるかと思います。
今回は、そのような人向けに、インフラ周りのことで最低限知っておくべきことは何なのか、どの分野を勉強するべきなのかなどについて書いていきます。
また、その分野を勉強する際のおすすめの本も紹介していきます。
インフラ周りで学ぶべき分野
まず、「インフラ」と一口で言っても様々な分野があることを知っておくべきです。
全てを学ぶのは、インフラエンジニアでない限り不可能ですし、全てを学ぶ必要はありません。
インフラが専門でない人が学ぶべきインフラ周りのことは何なのかですが、簡単に言えば
「一人でWebサービスを構築・運営する際に必要となる知識」です。
この知識が、インフラを学ぶ際に最低限必要となる部分です。
具体的に分解してみると、本番環境を構築するためには、サーバーを立てる必要があります。
最近でしたら、とりあえずはAWSでいいかと思います。
もちろんVPSを借りるのも全然ありだと思いますが、それはAWSで本番環境を構築できるようになってからでいいかなと個人的には思っています。
ただ、基本的にはAWSであろうとさくらのVPSであろうと、基本的な部分は同じですので、どちらでも大丈夫です。
AWSを使うとして、実際にそこにOSをインストールし、DBをインストールし、Webサーバーをインストールし、物によってはアプリケーションサーバーをインストールする必要があります。
これがまさに、インフラ周りで重要になってくる部分です。
基本的に、OSはすでにインストールされている状態ですので、そこについて詳しく学ぶ必要はないかと思うかもしれませんが、OSは種類によって特徴がちょっとずつ違います。
(ここでいうOSはLinuxのことを指します。)
サーバーを構築する際に、OSのことを最低限知っておくのは非常に重要となります。
もしあなたが初めて本番環境を構築するのであれば、比較的情報の多いCentOSを使うのをおすすめします。(CentOSはLinuxのOSの最も有名な1つです。)
OSのインストールの仕方はもちろんですが、それ以外にもOSでは色々設定を行う必要があります。
ここの部分を軽くでいいので、一度幅広く触れておくと後々非常に役立ちます。
(ここに深入りしてしまうと抜け出せなくなってしまうので注意が必要です。笑)
おすすめなのは「標準テキスト CentOS7 構築・運用・管理パーフェクトガイド」という本をさらっと一通り読むことです。
初心者でも分かりやすく説明がされていますし、何よりOSに関して知っておくと良いことが網羅されています。
より深く学びたい人には物足りなさも感じるかもしれませんが、OSの専門家を目指すのでなければこの本一冊で十分だと思います。
OS以外では、WebサーバーとDBに関する知識が必要となってきます。
Webサーバーは、有名どころだとApacheやnginxがあります。
それぞれのことについて知るのももちろん大事ですが、Webサーバーがそもそもどんな役割なのかも知っておく必要があります。
簡単に言ってしまえば、Webサーバーは、ブラウザから送られてくるHTTPのリクエストを処理するためのサーバーです。
リクエストに対してレスポンスを返すのがWebサーバーです。
これがないと何も始まりません。
Webサーバーに関してはApacheでもnginxでもどちらでも問題ないですが、より情報が多いのがApacheで、よりスピードが速いのがnginxです。
これは好みでいいかと思います。
nginxについて学ぶなら「nginx実践入門」という本がおすすめです。
これは以前nginxについてのお話の時も紹介した本ですが、現状nginxに関する分かりやすい本はこの本しかありません。
nginxの設定について、初心者向けに書かれた本で、この本一冊で実際にnginxをインストールして本番用に設定するところまでを行えます。
Apacheなら「サーバー構築の実際がわかる Apache[実践]運用/管理」という本がおすすめです。
Apacheに関しては色々な本がありますが、初めて学ぶのであればこの本が幅も広く分かりやすくおすすめです。
ただ、初めてにしては若干学ぶべき事柄が多いかなとも思うので、軽く読み流す感じでいいかもしれません。
実際に自分でApacheをインストールし、その設定を行う際に手元において読みながら設定するというのが効率がよいかと思います。
ここではApacheとnginxの2つを紹介しましたが、どちらか1つを選んで勉強すれば、Webサーバーに関しては問題ない状態になれます。
Webサーバーをクリアしたら、続いてはデータベースです。
物によっては、データベースは別のサーバーを立ち上げてそちらにインストールするというパターンもありますし、AWSのRDSを使うという方法もあります。
ですが、基礎を学ぶという点では、Webサーバーと同じ所にDBサーバーを立てても問題ありません。
こちらの方が安いですし、よっぽどスケールする可能性のあるサービスでない限りこれで問題ありません。
DBに関しては色々な種類がありますが、オープンソースのものであればMySQLかPostgresqlのどちらかを使っている企業が多いです。
これもWebサーバー同様どちらでも問題ありませんが、情報の多さという観点から、初めての構築であればMysqlをおすすめします。
サーバーサイドエンジニアであれば、DBサーバーには比較的親しみがあるかと思います。
ですが、環境構築する際にはSQL文がわかってもあまり意味がありません。
環境構築する際には、DBサーバーのインストール方法やそのパラメータの設定について知っておく必要があります。(インストールについては一瞬ですが。笑)
また、冗長化をどのようにしたらいいのかというような知識も必要となってきます。
データベースに関する一般的な知識に関しては「おうちで学べるデータベースのきほん」という本がかなり分かりやすくおすすめです。
MySQLのパラメータの設定などは、実際にインストールしながらネットで調べるというのが一番効率がいいです。
今の所、ここに関してのちょうどいいレベル感のおすすめの本は残念ながらありません。
ただ、ここはそんなに難しいわけではないので、ググりながらパラメーターに意味を理解していけば問題ないかと思います。
・AWS
・OS
・Webサーバー
・DBサーバー
これら4つの基礎を学んでおけば、インフラ周りの基礎的な部分はある程度カバーできます。
これに加えて、ネットワークに関する知識もあれば、インフラエンジニア以外のエンジニアとしては十分です。
ネットワークに関しては、AWSの勉強をする際にも少し触れることになるかもしれませんが、もしネットワークに関してある程度時間が取れるなら「ネットワークはなぜつながるのか」という本が非常におすすめです。
ネットワークというと、かなり難しい分野の1つですが、この本は非常に分かりやすく噛み砕いて説明がされており、「ネットワークって何?」というような人でも理解できます。
以上、AWS、CentOS、Apache or nginx、Mysql or Postgresql、ネットワークの5つが、インフラエンジニア以外のエンジニアが知っておくと良いインフラ周りの知識です。
かなり多いかと思うかもしれませんが、それぞれ本を一冊読んで、実際にAWS上で一度構築してみるだけでかなりマスターできます。
サーバーサイドエンジニアやフロントエンドエンジニアとして働いていたら、なかなか時間が取れないかもしれませんが、インフラ周りに関してはたった5つのことを学ぶだけでいいと思えばかなり効率が良いはずです。
また、これらの知識については、時代が変わっても役に立ちます。
ずっと使える知識なので、できるだけ早めに学んでおいたほうがいいと思います。
インフラ周りのことも理解しているエンジニアはどこに行っても重宝される傾向にあるので、エンジニアとしての価値を高めるという意味でも、インフラ周りのことを学ぶのは費用対効果の高い”投資”になると思います。
是非みなさんもインフラ周りのことを少しずつ勉強していきましょう!