駆け出しWebエンジニア必見！抑えておきたいIT基本用語

# はじめに
本記事を閲覧いただきありがとうございます。
都内でSEをしておりますhirokiです。

今回は表題にあるように``「IT基本用語」``について、重要なものをピックアップして解説して行こうと思っております。

私自身、２０２２年４月に未経験からWebエンジニアになって、１年以上が経過しております。
入社して間もない頃は、IT用語に一種アレルギー反応のようなものがあり、

 **何を言ってるのかわからない！！！理解できない！！！日本語で喋ってくれ！！日本語で！！！！** 

といった状態でした。
IT用語は初心者にとっては謎のカタカナ、横文字が押し寄せてきて、これが挫折の一要因にもなったりします。

ただ、私も今でこそ、以前よりは理解できるようになりましたが、まだまだ知らないことも多く、基礎用語に関しても深く理解できているかを問われると答えられるか怪しいところです。

そこで
* Webエンジニアになって間もない方が、IT用語を理解するのに微力ながら役に立つ記事を書く。
* 自身の曖昧なIT基礎知識をアウトプットを通じて整理し、理解を深める。

の２点を軸にして記事を書き上げました。


今回は[「プロになるためのWeb技術入門」]( https://www.amazon.co.jp/%E3%80%8C%E3%83%97%E3%83%AD%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEWeb%E6%8A%80%E8%A1%93%E5%85%A5%E9%96%80%E3%80%8D-%E2%80%95%E2%80%95%E3%81%AA%E3%81%9C%E3%80%81%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AFWeb%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E9%96%8B%E7%99%BA%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B-%E5%B0%8F%E6%A3%AE-%E8%A3%95%E4%BB%8B/dp/4774142352)を読んで、
Webアプリを作成する上で欠かせないIT用語、概念を解説していけたらと思っております。

# 今回解説するIT用語

今回解説す用語は以下のものになっています。

:::note info
リクエストとレスポンス
:::

:::note info
プロトコル
:::

:::note info
IPアドレスとポート番号
:::

:::note info
ステートレス/ステートフル・プロトコル
:::

:::note info
クッキー
:::



上記の用語は`Webアプリケーション`を開発する上では絶対に抑えておきたい基本用語になります。

それでは順番に解説していきます。

# リクエストとレスポンス

リクエストとレスポンスとは
``「手元PCと遠く離れたサーバーのインターネットを介したコミュニケーション」``と思っておいていただければ大丈夫でしょう。

「リクエスト」と「レスポンス」はWebアプリケーションがどのような仕組みで動作しているのかを理解する上で一番基本的な用語になります。

そもそもWebアプリケーションとはどのようなものなのか、簡単に説明すると
`「サーバーにより提供されるサービスをインターネットを介して、利用することができるサービス」`というものになります。
ほんの一例ですが、有名な例を挙げるとAmazon、Facebook、twitterなどがこれにあたりますね。
私たちが、スマホやPCを利用する際に、インターネットが利用できなくなった途端に、ほとんど役割を果たせなくなるのを想像していただくと
Webアプリケーションは今や私たちの生活に欠かせないものとなっております。

では、そんなWebアプリはどのような仕組みで動いているのか、
まずは下の図をご確認ください。


![スクリーンショット 2023-07-29 11.35.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265379/7aeb33cb-5a17-e233-89bf-698b52043b41.png)



仮に「Yahoo！」のトップページを自身のPCから利用するとしましょう。
ちなみにこのサービスを利用する側を **「クラアント」** と呼ぶのでついでに頭に入れておいていただければと思います。 
Yahoo!のトップページを開く手順としては

① 検索エンジのURLに「https://www.yahoo.co.jp/」
　を打ち込み実行する
→yahooのサービスを提供しているサーバーに「Yahoo！のトップページを表示して！」という要求が送られる。

この一連の流れを **リクエスト** と呼びます。

② クライアント側からリクエストを受けたサーバーが、「Yahoo!のトップページを表示」するための情報を送り返し、クライアントPCにYahoo！のトップページが表示される。

このリクエストに対するサーバー側の動きを　**レスポンス**　と呼びます。



:::note warn
まとめ
リクエスト/レスポンスとは 「手元PC(クライアント)と遠く離れたサーバーのインターネットを介したコミュニケーション」
:::





## プロトコル


結論から述べると、プロトコルとは

``「PC同士の通信における 約束事、ルール」``のことを言います。

先ほど「クライアント」と「サーバー」のやり取り（リクエスト/レスポンス）を説明しましたが、
サーバーがやり取りするクライアントは１つだけではありません。
例えばAmazonは世界中のクライアントPCから利用されるサービスです。
そしてそれらのPCの性能やスペックはそれぞれ異なるものとなっているので、
クライアントとサーバーがやり取りする`共通のルール`を決めておかないと通信できないPCが出てきてしまいます。
この共通のルールが`プロトコル`と呼ばれています。

他のものに例えると、下図のように様々な国籍の人とビジネスでやり取りをすることを思い浮かべて見て下さい。![スクリーンショット 2023-07-30 10.33.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265379/c4088a05-6e6d-cd35-4941-02c0ae33db1b.png)

この際も使用すること言語は？チャットツールは何を使う？など、やり取りのルールを事前に決めておかないとスムーズにコミュニケーションを取ることができないし、場合によってはトラブルになったりすることもあり得ます。

今回の例の場合は
* 全員が英語を使えるので使用言語は英語とする
* チャットツールはSlackを使用する
* チャットに投稿する内容は、簡易的な連絡とし、込み入った内容の時はビデオ通話を使用する

など、ルールを決めておけば、円滑にやり取りすることができますよね？

PCでも同様に、


:::note info
HTTP
→クライアントとサーバー間でHTTPによる通信をよりsecure（安全に）行うためのプロトコル。
:::

:::note info
FTP
→ネットワーク上のクライアントとサーバーの間でファイル転送を行うためのプロトコル
:::

といった形で、詳しい説明は省略しますが、上記のような決まり事 **（プロトコル）** が存在し、PC間の通信を円滑に進められるようになっています。


:::note warn
まとめ
プロトコルとは 「PC同士の通信における 約束事、ルール」
:::



## IPアドレスとポート番号

結論から述べると
IPアドレスは``「ネットに接続されらPCを特定するための番号」``
ポート番号は``「PC内で使用するサービスを特定するための番号」``
ということができます。 


AmazonやTwitterなどの世界中で使用されるWebアプリは、日々世界中のクライアントPCから送られてくる膨大な数のリクエストに対して、サーバー側でレスポンスを返さなくてはなりません。
その際、どのクライアントPCにレスポンスを送り返すのか、``特定``する情報が必要になってきます。
それが`「IPアドレス」`　です。
IPアドレスは`192.168.0.1`といったような形で、4組の数字で表され、それぞれ0〜255の256通りあり、４３億桁の数値が表せるようになっています。
言い換えると、PCの`住所`の役割で、サーバー側からのレスポンスを正しい場所のクライアントPCに届けるのに欠かせないものとなっております。
上記をイメージするために下図を参考にいただければと思います。

![スクリーンショット 2023-07-30 12.50.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265379/1c1543db-e19e-8263-edff-096cd1fb1bcb.png)

![スクリーンショット 2023-07-30 12.57.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265379/9e91f687-4180-d916-63f0-41cbb01b0e25.png)

ここまで、サーバー側のレスポンスを正しい場所のクライアントPCに届ける方法を説明してきましたが、これで終わりではありません。
クライアントPCに届いたレスポンス情報は`PC内の適切な場所に格納され、処理されなければいけません`
クライアントPCの中でも「Amazonアプリを使う場所」「Google Chromeを使う場所」「Twitterを使う場所」といった形で、使用するサービスごとに場所が決められています。
なので、各Webアプリのサーバーから送られてきたレスポンスはそれぞれPC内の適切な箇所に送られなくてはならないということです。
このPC内の場所を特定する役割を果たすのが`「ポート番号」`です。
ポート番号は0〜65,536までの数字で表され、同じポート番号を複数のアプリケーションで使用することはできません。

ここまでの流れを郵便配達を例に説明すると
IPアドレスで配達物を届ける``建物名まで``を特定し、ポート番号でその建物の``部屋番号``までを特定するいう形になります。（下図）

![スクリーンショット 2023-07-30 13.48.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2265379/bc2f58f8-7d3c-f4e1-89fa-95f44e3c8928.png)



:::note warn
まとめ
IPアドレスとは「サーバーがレスポンスを送るクライアントPCを特定するための住所(建物)」
ポート番号とは「クライアントPC内のサービスを利用するための場所（建物の部屋番号）」
:::

## ステートフル/ステートレス

ステートフルとは``「前回まで行っていたやり取りを維持する」``ことで
ステートレスとは``「前回まで行っていたやり取りを維持しない」``ことです。

ショッピングアプリを例に説明すると

ステートフルなアプリは
マイページにログインし、ほしい商品をカートに入れてログアウトしてウィンドウを閉じたとします。
２日後に再びマイページにログインすると、前回カートに入れた商品を`覚えている状態`でカートに入れた商品の`内容が保持`されています。
逆にステートレスなアプリはほしい商品をカートに入れてログアウトしてウィンドウを閉じてしまうと、次ログインした時にはその``内容が保持されず``消えてしまっています。

言い換えると
ステートフルは一見様お断りの高級レストランでオーナーがお客さんの顔を``覚えていて``、お客さんの好みに応じておまかせで料理を提供してくれる形で
ステートフルはファストフードチェーン店の券売機のような形で、こちらの顔は覚えておらず、来店する度に自分で商品を選択する必要があります。

一見するとステートフルの方が良く見えるかもしれませんが、サーバーへの負荷が重くなるといったデメリットがあります。
一方でステートレスの場合は処理がシンプルなのでサーバーへの負担は軽くなります。
上記踏まえて、状況に応じて最適なものを使い分ける必要がありそうです。

:::note warn
まとめ
ステートフル/ステートレスとは「前回までのやり取りを覚えているか、いないか」のこと
:::


## クッキー

クッキーとは``「前回までのやり取りを　一時的に保持する技術」``のことです。
クッキーを用いることで、`ステートレス`なサービスに`ステートフル`な機能を持たせることが可能になります。

具体的な例だと
twiiterのページにログアウトせずにウィンドウを閉じても、次ページを開いた時はログアウトせず、ログインしたままの`状態が保持`しているいった機能が挙げられます。

イメージするならば
前回までの話を覚えていられないから、一から説明しなければいけないA君に
その日話したことを小さいメモ帳の切れ端に書いて渡しておくといった形でしょうか。


:::note warn
まとめ
クッキーとは「前回までのやり取りを　一時的に保持する技術、ステートレスなサービスにステートフルな機能を持たせることができる」こと
:::

## 終わりに

ここまで閲覧していただきありがとうございました！
自分でも本記事を書くことで、理解できてない箇所が判明したり、知識を体系化して整理することができたので今後に繋がる体験ができたと思っております。
また定期的に記事をアップいたしますので、その時は是非とも閲覧いただけば幸いです。