初学者エンジニア学習ログ　基礎編😅

## プログラミング基礎の基礎学習
現在大学3年生、フロントエンドエンジニア目指して新卒エンジニア就活中！
コーディングテスト対策をしようとしたら背筋が凍る程解らないことだらけだったので、基礎からたたき直しアウトプットとしてこの記事を投稿します。

:::note info
本記事ではコーディング以外の基礎部分を取り扱います👶
:::

__現状のスキルレベル__
-html&css 実務レベル<br>
-javascript(next.js) アプリ開発経験あり　　

https://catapedia-810e2e93cfe4.herokuapp.com/

## 学習のロードマップ
ロードマップは以下の通りです💪
- webアプリの仕組み
- インターネットの基本
- OS
- バージョン管理ツール
- データベース
- APIとは
- webサイトにおけるセキュリティ対策
- テスト
  



## webアプリの仕組み
### 大まかな仕組み
ブラウザがサービス側にリクエストを送るサービス側がレスポンスを返すという流れ。

ブラウザなどユーザーが操作する部分はクライアントサイド
サービス側がクライアントのリクエストに応じてサーブするのをサーバーサイド

### サーバーサイドの具体的処理
WebサーバーがリクエストからDBサーバーに必要なデータを問い合わせ、HTML,CSS,JavaScriptや画像などのデータを送信

用語が沢山出てきたので用語整理

サーバー：リクエストに応じてレスポンスを返すコンピューター
Webサーバー：Webアプリケーションが動いているコンピューター
DBサーバー：データベースのが稼働しているコンピューター



## インターネットの基本
ITの基礎中の基礎ネットワーク😎
### httpとは
**HyperText Transfer Protocol（ハイパーテキスト・トランスファー・プロトコル）」の略**
 **通信のお約束**のこと
 ホームページ内のファイルなどのデータを受け渡しするときのルールのこと
 通信する上でのルールのことを **通信プロトコルという**

#### ホームページ表示までの流れ
1. ブラウザがwebサーバーにページを要求
2. webサーバーが要求されたページを渡す
3. ブラウザがwebサーバーから渡されたページを表示


 参考

 https://wa3.i-3-i.info/word165.html

### どのようにインターネットが動くのか
とりあえずアルファベットの用語がたくさん出てきてごちゃまぜになりそうなので一旦整理

#### IPアドレス
**インターネットプロトコルアドレス**はPC一つ一つが持つ192.168.1.1のようなコードのこと

#### ドメイン
ドメインは**インターネット上のあるWEBサイトやサーバーがどこにあるかを示す住所のようなもの**
IPアドレスは数字で覚えにくくurlでなんのサイトなのかが解らないのに対し、文字列でなんのサイトかわかりやすくWEBサイトやサーバーがどこにあるかを示している。


#### DNSサーバー
**ドメインネームシステムは**数字のIPアドレスを文字列のわかりやすいドメインに変換してくれる翻訳機のようなもの

#### Webサーバー
**Webサーバーは**webアプリケーションなどのデータが格納されたPCのことそれぞれIPアドレスを持っている
webサイトを閲覧するときはIPアドレスに問い合わせる必要がある


用語解説はこの辺にしてインターネットの動く流れに移ります
#### webサイト表示までの流れ
1. URLにアクセス
2. URLに含まれるドメインを元にDNSサーバーがIPアドレスに問い合わせる
3. DNSサーバーがドメインに対応したIPアドレスをもつwebサーバーにデータを要求する
4. webサーバーから送られたデータをブラウザに表示

参考

https://root-s-cloud.jp/column_post/column-012/

## OS
パソコンの根幹部分のOSに付いて
よくわからない用語がたくさんあるのでまた用語整理

### カーネル
**OSの大部分を担当しているソフトウェア**
メモリやCPUとのやり取りをする部分

### デーモン
**常にスタンバイや動作している部分**
何も処理するものがないときはスタンバイし、処理の要求が来ると処理しまたスタンバイに戻るバックグラウンドシステム。
目に見えないコンピューターの裏の部分で動作している


### シェル
**人からの入力をコンピューターに伝える部分**
実行を担当するのではなくただコンピューターにシェルから入力された司令を伝える係

## バージョン管理
バージョンが管理するのは主にソースコード
変更履歴を線のように管理する

### ブランチ
**変更を枝分かれさせて共同開発でも困らないようにバージョンを管理する仕組み**
多くのバージョン管理システムでは変更を線のようにつなぎ履歴を管理している。
ブランチを使用すると変更があるたびに履歴の線が枝分かれしていくこの仕組みによって複数人が同時に変更をしてもすべてを上書きすることなく一つにまとめることができます。

### バージョン管理システムgit
#### リポジトリ
ファイルの状態を記録する部分

#### ローカルリポジトリ
ローカル環境(自分のPCなど)に作られるリポジトリ

#### リモートリポジトリ
GitHubに作られるリポジトリ
複数人で参照できる

#### クローン
リモートリポジトリをローカルリポジトリにダウンロードすること

#### コミット
ファイルをローカルリポジトリに保存すること

#### プル
リモートリポジトリにありローカルリポジトリにない部分をローカルリポジトリに加えること

#### プッシュ
ローカルリポジトリをリモートリポジトリに送信すること

#### マージ
枝分かれしたブランチを結合し変更を反映させること

参考

https://zenn.dev/miya_akari/articles/13c718afa783fe


## データベース
**データの集合体がデータベース**

### テーブルについて
**データベース種類ごとの単位**
表形式でデータを管理している


#### レコード
レコードは、テーブルの行を意味する様々な種類のデータを取り扱う　

#### カラム
カラムは一つのデータを扱い

#### フィールド
データベース内の最小単位エクセルでいうところの「セル」

### リレーショナルデータベース

## APIとは
別のプログラムから機能の一部をリクエストされたときに用意されている窓口

## 情報セキュリティ
情報セキュリティの三項目
### 情報の機密性
許可された人のみがアクセスできる状態
#### 機密性を維持する三要素
- アクセス制限
- パスワード認証
- 入室制限

### 情報の安全性
情報が最新で正しい状態であること

#### 機密性を維持する二要素
- アクセス履歴利用者の確認
- 情報の変更履歴データ改ざんの検知

### 情報の可用性
必要なときに、対象の情報を安全に利用できること
#### 可用性を維持する要素
- サービスの継続提供

## テスト
ソフトウェアテストとは、開発中のソフトウェア（コンピュータプログラム）が意図した通りに動作するかを検証すること。

#### 単体テスト
単体テストは対象のモジュールが意図したとおり正しく機能するかを確認するために行われるもの

#### 結合テスト
複数のモジュールを結合したときに正しく機能するかを確かめるテストで、主にモジュール間の接続点（インターフェース）がうまく機能するかを確認するために行われるもの

#### システムテスト
開発の最終段階にシステム全体を対象に行われるテスト。

* * *
現在多くの人に感動を与るフロントエンドエンジニア目指して就職活動をしています。
こちらもご確認ください

https://www.wantedly.com/id/keigo_ishikura

https://portfolio2023-sand.vercel.app/