【未経験者・初心者向け】Ch.1 Webエンジニアについて|『Webエンジニアの教科書』まとめ #1

f:id:lib-arts:20190119230646p:plain

Web開発は本業ではないのですが勉強会など諸々運営しているとキャリア相談に乗ることもあり、数字や数学に強くない方に機械学習系は勧められない(高校レベルから復習する必要があるならコスパ度外視で努力する気がないなら諦める方が良い)のでWeb開発側の勉強をお勧めしています。
とはいえ、Webの開発側は大体知っててマネジメント程度なら困らないものの、初心者向けに対応する際にミスリードを生まないように参考資料を公開形式でまとめておいた方が良いのではということで書いていければと思います。想定読者としては入門者・初心者を想定するので、『スクールに通うかどうか迷う』レベルに合わせて書いていければと思います。

なるべくレビューを業務経験のある知人に頼んだ上で進めていく予定ですが、適切でない表現などありましたら修正いたしますので気軽にご指摘ください。

課題図書の1冊目としてはちょっと古いですがたまたま手元にあったので『Webエンジニアの教科書』がトピック的に初心者向けの内容は結構書いてくれてそうなのでこちらを用います。最新のトピック過ぎても初心者向けとしては大変なので、2015年頃の話題が中心ならベース自体は参考になるのではと思います。#1ではChapter1の内容を要約します。
以下目次になります。

 
1. 1章内容に関して(Webエンジニアについて)
1.1 Webエンジニアはどんなことをやっているのか(001)
1.2 必要とされる技術領域(002)
1.3 次々に新しい技術が登場している(003)
1.4 今後もWebエンジニアとしてやっていくために(004)
2. まとめ


1. 1章内容に関して(Webエンジニアについて)

1.1 Webエンジニアはどんなことをやっているのか(001)
言葉の整理をしてくれています。フロントエンド、サーバサイド、インフラの三種類が主に挙がっていますが、それぞれの大体のイメージが掴めれば良いと思います。フロントエンドはHTML、CSSJavaScriptなどを使ってWebページの画面側を主に担当すると考えておけば良いです。サーバサイドはRubyPHPPythonなどを使ってアプリの裏側の処理(HTTPサーバやDBとの繋ぎ)を記述します。インフラはOSやDB、サーバサイドで用いる言語などのミドルウェアのインストールを行ったりします。
また、これら全体を幅広くこなせる人材をフルスタックエンジニアと呼んでいることについてもまとめられています。Web系の開発だとどうしても少数精鋭のチームになるので、一人二役、三役が求められます。実際に採用の相談などある際は一通りできる人の方がニーズが多い印象です。

上記が001で書かれている内容です。少数精鋭となっていますが、本来システムの開発に頭数は必要ないです(OSSの開発などでもメインの開発者はそんなに人数いないです)。そのため、自分の市場価値を高く保ちたい方は少数精鋭のチームで高い成果を出せる場所の方が成長するのでなるべくそういった環境で仕事ができるようにするのが良いかと思います。


1.2 必要とされる技術領域(002)

様々な技術領域についてまとめられています。下記に言葉の整理としてまとめます。

・HTML
-> HTMLはHyper Text Markup Languageの略で、Web上の文書を記述するためのマークアップ言語です。SafariChromeなどのブラウザでHTMLファイルを開くことで普段見慣れているWebページを表示することができます。

CSS
-> CSSCascading Style Sheetsの略で、HTMLに飾り付けを行うための言語です。最近ではSCSSという形式も出てきており、記述の簡易化なども行われています。

・フロントエンド
-> 本ではJavaScriptjQueryを使ったフロントエンドの開発とされています。最初から難しく考えすぎると訳がわからなくなるのでHTMLとCSSも含んでざっくりと画面表示に関する諸々を行っていると考えるのが良いと思います。

・サーバサイド
-> RubyPHPPythonを使ったサーバサイドの開発とされています。どこを専門でやるにせよWebの仕組みは一通り知っておくのが良いので、初心者は最初はサーバサイドから入るのが良いのではと思います。
また、それぞれの言語のWebフレームワークは抑えておく方がよく、RubyならRailsPHPならLaravel、PythonならDjangoなどは言葉だけでも一旦覚えておくのが良いと思います。なお、初心者の際はチュートリアルの充実度合いを考えるにRailsから入るのが一番良いのではと思います。重要なのはWebフレームワークの使い方ではなく、実装している概念なので、最初にどのフレームワークから入ってもある程度汎用的なスキルはつきますのであまりこだわらなくても良いと思います。

・データベース
-> RDBMSを前提とするSQLが色々と挙げられています。最初はMySQL(MariaDB)やPostgreSQLあたりでRDBMSの雰囲気を掴むと良いのではと思います。

・Webサーバ
-> 一旦Apache、Nginxを言葉だけでも覚えておくと良いです。

AWS
-> Webサービスクラウド上に立てることが多いのですが、有名なクラウドサービスとしてはAmazonが運営しているAWSです。

GitHub
-> GitHubもそうですが、ソース管理としてgitという仕組みがあることを抑えておきましょう。ファイルの差分管理なしでは、規模が大きくなればなるほどコードを修正していくのが大変になります。

上記が言葉の整理になります。最初のうちは深い理解よりも言葉と大体のイメージで覚えてしまいましょう。厳密な定義については慣れてきてからで十分です。(初心者向けの記載だとある程度ざっくり書かれることもあるので、気にしない方が正しいケースも多いです。)


1.3 次々に新しい技術が登場している(003)

一旦難しく考えないでキーワードだけ覚えてしまいましょう。NoSQLはDB操作の高速化のために、SQLとは別の仕組みで動くデータベースです。JavaScriptフレームワークは今だとReact.js、Vue.jsなどが多いようで最近はこちらの人材ニーズが大きいようです。Fluentdはログ管理に用いるようです。仮想化技術は環境構築や本番環境への反映を楽にする仕組みです。プロビジョニングは一旦はそこまで気にしなくて良いです。

色々な方の話を聞く感じではこの中だと現在注目すべきはJavaScript系のフレームワークな印象です。jQueryまでのフロントエンド開発と大きく変わっているので、スキルチェンジが難しく人材不足になっているようです。フロントエンドはCなどの低いレイヤーの開発や機械学習系などと比べて最初からできる人が少ないので仕事としての開発者を目指すなら狙い目だと思います。


1.4 今後もWebエンジニアとしてやっていくために(004)

スペシャリストになるのは大変なので、幅広くなんでもやるのが良いのではないかとされています。
各分野の最低限のことを実現するにあたっての敷居は下がってきているので、学習範囲に縛りを設け過ぎず色々と行ってみるのが良いのではと思います。


2. まとめ

とにかく基礎技術を幅広く抑えるのがまず重要だと思います。
方向性としては、JavaScript系のフレームワークを使いこなすにあたってはある程度ちゃんとした学習が必要なので、現在のトレンドからするとこの辺が狙い目なのではという気がしています。