IT未経験者がIT用語をまとめてみた

## はじめに　
IT未経験者がエンジニアリングの基本を学ぶためにIT用語のまとめを書いていきます。
また、本記事は以下の動画を参照し執筆をさせていただきました。
参照：https://www.youtube.com/watch?v=kZakG8UPZaY


## 1. WHAT : 何をつくっているのか　
###### 1-1. 作る物
- アプリケーション : アプリケーションソフトウェアの略称
- ハードウェア : PC本体のこと
- ソフトウェア : OS、OS関連、それ以外
- OS : 人格のこと（windowsOS、macOS)
- OS関連 : キーボードを認識する（デバイスドライバーなど）
- それ以外（アプリケーションソフトウェア）Chromeのようなブラウザ、wordなど
- デスクトップアプリケーション : PC上で動くブラウザ（クローム、エクセル）
- webアプリアプリケーション : インターネットを介して表示される物（プラウザ→サイト）
- ネイティブアプリ : app Storeでインストールするもの

現在の主流はwebアプリとネイティブアプリである。

###### 1-2. アプリケーションの仕組みについて

- リクエスト : サービス側に要求する事
- レスポンス : ブラウザ側に応答する事
- クライアントサイド : ブラウザ側（依頼主側） 
- サーバーサイド : サービス側
- サーバー : サービスを提供するコンピューターのこと
- webサーバー : webアプリケーションが動いているサーバーの事
- データベース : データが入っている箱
- DBサーバー : DBが稼働しているサーバーの事
- RDBMS : 一番主流　（エクセルみたいに表形式で保存されているもの、MySQLなど）
- プロトコル : リクエストを受け取ってレスポンスを返す時どういうリクエストを受け取ってどのレスポンスを返すのかは決まっている。
- HTTP : インターネットのwebの通信の取り決めをしたもの。こういうリクエストを受け取ったらこういうレスポンスを返す。 
- SSL : 情報は第3者も通信の情報は見ることができる。それを暗号化するための技術

- HTTPS : HTTPとSSLを組み合わせることでwebの通信を暗号化して守りつつ通信することができる
- フロントエンド : ブラウザ側で実行される部分（HTML、CSS、JavaScript)
- ライブラリ : プログラムの部品を集めてひとまとめにしたファイル　IKEAの家具をピックアップしている感じ
- フレームワーク : 全体の処理の流れを枠組み化した物　モデルハウスを買うイメージ
- バックエンド : サーバー側で実行される部分
- インフラ : サーバー、ネットワークといったアプリケーションの基盤部分
- サーバー : webアプリケーションが稼働する場所
- ネットワーク : ブラウザから通信が届くように整備する物。
複数の機器が繋がってその結果やりとりできるようにすること
- オンプレミス : 伝統的な自前構築　ネットワークの機器を買ってきて構築して管理する→アクセス増減に対応しづらい。
- クラウド : インターネット経由でサーバー、ネットワーク機器を利用できるサービスの事（使った時間単位ごとに課金がされる）キャンペーン時にサーバーを増やせる。逆に減らすこともできる。

クラウドは大きく分けて**3つ**に分類される。
便利性、自由度に応じて都度選択できるのが魅力である。
|SaaS|PaaS|IaaS|
|:---:|:---:|:---:|
|アプリケーション　⭕️|アプリケーション　❌|アプリケーション　❌|
|OS　⭕️|OS　⭕️　|OS　❌|
|サーバー　⭕️|サーバー　⭕️|サーバー　⭕️|
|ネットワーク　⭕️|ネットワーク　⭕️|ネットワーク　⭕️|

DBサーバー : 別名をミドルウェアと呼ぶ
ミドルウェア : アプリケーションとOSの橋渡し役。特別な機能を提供してくれるもの。

API : 別のプログラムからある機能を使うために用意されている窓口のこと
(ex.ECサイトから商品一覧のサイトのリクエストをバックエンド側にを送る　その窓口のこと）

## 2. WHO : 誰が作っているのか　

###### 2-1. 作っている企業

- 受託 : クライアントからこういうシステムを作ってくださいと言われた物、サービスを作る

- 自社開発 : 自社でシステムを開発して、自社でサービスを提供する会社

###### 2-2. 担当分野　⑴

- フロントエンジニア : webの画面を作るエンジニア（HTML、CSS、JavaScript)を使う。

- サーバーサイドエンジニア : バックエンドの仕組みの部分を作るエンジニア

- インフラエンジニア : サーバー、ネットワークを担当するエンジニア

- SRE : サービスの信頼性、生産性の向上を担うエンジニア。従来のインフラエンジニアのサーバー、ネットワークの構築に加えて運用、保守の自動化を行う。近年、非常に増えている。

###### 2-2. 担当分野　⑵

- モバイルエンジニア : スマホのネィティブアプリを作るエンジニア　　　　　　　　　　　　iosエンジニア、アンドロイドエンジニア

- 機械学習エンジニア : AIの専門家、機械学習を用いて開発を行うエンジニア

- データサイエンティスト : 統計モデルを作成、データを分析してサービスの課題を提案するエンジニア

- フルスタックエンジニア: 設計〜開発〜保守　一人でなんでもできるエンジニアのこと　これになりたい

###### 2-3. マネジメント　⑴

- エンジニアリングマネージャー : エンジニアのマネジメントを行う人。（ヒューマン、プロジェクト、テクノロジーなど）

- プロダクトマネージャー : プロダクトの方向性を決める人（どんな人に、どんな価値を提供するのかを決定）

- プロジェクトマネージャー : プロジェクトの進捗を管理する人

- プロダクトオーナー : プロダクトの責任者

###### 2-3. マネジメント　⑵

- スクラムマスター : スクラムがうまく回るように指示する人
- スクラム : チーム開発の手法の1つ　柔軟に変更しながら開発をしていく
- テックリード（リードエンジニア）エンジニアの技術面にリーダー　エンジニアチームの技術的なアウトプットを最大化させる。
- CTO : 会社の最高技術責任者
- VPoE : エンジニア組織のマネジメントの責任者（採用、育成）

## 3. HOW : どのように？

###### 3-1. チーム開発
- ウォーターフォール : 　伝統的なやり方（企画、設計、開発、テスト、リリース）を進めていく。　問題点：仕様変更に弱い

- アジャイル開発 :　短い期間（1〜2週間）で企画、設計、実装、テスト、リリース、運用まで行なう。仕様変更に強い
- スクラム : アジャイル開発の1つ

###### 3-2. 工程
- 1.目標設定 : この目的でいつまでにこれを達成する。ビジネス上の目的を定める。
- 2.要件定義 : システムとしてどんな要件が必要か定義する。
- 要件には機能要件と非機能要件がある。
　機能要件 : 必要な機能を決める。
　非機能要件 : レスポンス機能、セキュリュティ要件といった機能ではないけども
 　必要な要件
- 3.設計 : システムとしてどういう設計にするのか、インフラはどういう構成にするのかデータベースはどういう構造にするか大枠の設計を決める。
- 4.実装 : 実際にコードを書き実装する。
- 5.テスト : 使用通りに動くかテストを行なう。テストコードを書いてプログラムできているかをチェックする。
- 6.デプロイ : 本番環境にリリース
- 7.運用 : リリース後問題がないかモニタリングして円滑にサービスが回るように運用していく。

###### 3-3. 開発関連ツール
- バージョン管理 : コードのバージョンを管理する仕組み
ex)バグが起きてサイトが落ちた。以前のバージョンに戻す。
現代の開発環境ではスタンダート
gitやgithubのこと
- CI/CD : モダンな企業はCI/CDをちゃんと構築することで
アジャイル開発を強烈にサポート
CI : 継続的インテグレーション
　　コードの変更のたびに自動でテストコードを走らせること
　　常にコードの品質を保ち、バグが入りにくくする
  　　素早い単位のリリースをやりやすくする。
CD : 継続的デリバリー
　　デプロイを簡単に行なうこと
　　コードの変更→テストが走る→テストが通ったら修正を本体の方にとりこむ
  　　自動でデプロイされる。リリースを素早くする
- Infrastructure as Code :　インフラをコード化し自動化して管理していく考えのこと
- エディタ : エンジニアはテキストエディタを使ってコードを書く

## 感想
はじめてIT用語を勉強したので新鮮な気持ちでブログを書きながらアウトプットすることができました
動画を繰り返しながら何度も見ることでインプットすることができた
ただ見るだけでは記憶に定着しないので、家で独り言を呟きながらアウトプットしたことも良かった。
一回では絶対わからない、動画は倍速指定などもできるので考えながら視聴を行うことが大切であると感じた。