技術

Web開発において超重要な7つの基礎知識

技術

こんにちは、冨澤です。 主に若手Webエンジニアのみなさんに向けて、私が独断で選んだWeb開発において超重要な7つの基礎知識を紹介したいと思います。
研修等ではあまり重要視されていなさそうだけれど実際のところ超重要というようなものを挙げました。
参考にしてみてもらえるとうれしいです!

1. HTTPプロトコル

クライアント(Webブラウザーなど)とWebサーバーとの間の通信手順です。
いわゆるフレームワークの充実などによりHTTPを意識しなくても結構開発できてしまいますが、特にトラブルが起きた際に通信内容の解析を要求されることがままあり、HTTPを知らないと立ち行かなくなってしまいます。
Webエンジニアになるということは少なからずWebの専門家になる必要があるということで、Webのもっとも基本的な構成要素であるHTTPを知らないというわけにはいきません。 

重要度が高いと思う項目をいくつか次に挙げます。 

  • リクエストメソッド
  • レスポンスステータスコード
  • Hostリクエストヘッダーとバーチャルホスト
  • ステートレス性とCookie
  • キャッシュ関係
  • プロキシー

2. ネットワーク(TCP/IP)

Webはネットワークの上に成り立っているので、HTTPと同様に知らないというわけにはいきません。
ネットワークは難しいイメージがありますが(実際難しいですが)、Web開発をする上では最低限 

  • プロトコルの階層があるということ
  • IP
    • IPアドレス
      • プライベートIPアドレスとグローバルIPアドレス
    • セグメントとルーター
    • IPv4とIPv6がある
  • TCP
    • 3ウェイ・ハンドシェイク
    • ポート
      • 送信元と送信先両方にポートがある(four-tuple)
  • DNS
    • HTTPはURLのホスト名を名前解決することから始まる

このあたりの基礎知識を把握しておけば十分だと思います。 

3. Git

Webエンジニアに限らずITエンジニアであれば習得必須のバージョン管理システムです。 コミット・マージ・push・pullなどの基本操作ができるのはもちろんとして、 

  • GitとGitHubの違い
  • コミットグラフの読み方
  • revert, reset, rebaseがなにをしているのか
    • rebase(というより強制pushかもしれませんが)がなぜ危険と言われるのか
  • ブランチ運用ルール(Gitflow・GitHub Flow・トランクベースなど)

このあたりも理解しておく必要があります。 

4. Docker

Dockerはコンテナー仮想化技術を用いてアプリケーションの開発・共有・実行をするツールですが、その重要度はGitに匹敵するかもしれません。
Web開発では、Webサーバーやデータベースを動かしたりするのに利用します。 

Dockerを理解するには、まずDockerが登場する以前にどのような課題・問題意識があったのかを知るのが近道です。
その点では次の記事が分かりやすいかもしれません。 

仮想化を知るには、仮想化ではないとは何かを知るべきだ【Dockerコンテナ・グレートジャーニー①】
https://qiita.com/Toyo_m/items/3060fc5961d62a840bee 

合わせて、DockerがベースにしているLinuxについてもある程度把握しておくのがよいと思います。 

5. シェルまたはコマンドプロンプト/PowerShell

黒い画面に文字がたくさん出てくるあれです。
苦手な人も多いかもしれませんが、 

  • GitやDockerのコマンドによる操作
  • サーバーにログインして作業するとき
  • Webアプリケーションのモジュールのビルド
  • 簡単な定期実行処理の作成
  • 日常業務の効率化

のような様々な場面で使用することになるため、是非ふれあってみてください。 

6. 暗号

開発するWebアプリケーションの性質によらず、たいていなんらかの形で暗号が関わってくることが多い感覚があります。
暗号は高度な数学的理論をバックグラウンドにもっていて難解ですが、Web開発をする上では最低限 

  • 共通鍵暗号
  • 公開鍵暗号
    • デジタル署名
    • 公開鍵基盤
    • 鍵共有
  • ハッシュ関数
    • パスワードハッシュ関数

このあたりの理屈を理解しつつ、実践として 

  • SSL/TLS証明書
  • SSH公開鍵認証

これらを扱えるようになっていけば十分だと思います。 

7. 非同期・並行/並列・スレッド・ノンブロッキング

次のようにいろいろな形で頻出する分野です。 

  • マルチスレッドプログラミング
  • JavaScriptのPromise, async/await
  • Webサーバーの駆動方式(マルチプロセス・マルチスレッド・イベント駆動など)
  • 非同期メッセージング

ネットワークや暗号とはやや性質が異なる難しさがあり、頭の中にイメージを構築しておく必要があります。
この章のタイトルがまさにそうであるように似たような用語が多いので、まずはそれらを区別するのがよいと思います。

以上です。