理解するために調べたことをまとめてみた2
学んだこと
API とは?
- ApplicationProgramInterface の略
- アプリケーションプログラムのデータのやり取りを行うための仕組みを指す。
WebAPI は何があるか
- REST API
- HTTP メソッド(GET,POST, PUT, DELETE)と URL を使ってデータを扱う。
- JSON や XML 形式でデータのやり取りを行っている。
- 歴史が長く、多くの Web サービスで最も一般的に使われている。
- 知識やナレッジも Web 上に沢山落ちているため、学習もしやすい。
- 幅広い言語やツールでサポート可能。
- Graph QLAPI
- フロントエンドとサーバ間のやり取りを柔軟に最適化可能。
- 1 つのエンドポイントで完結している。
- 実装が複雑になりがち
- gRPC
- ハイパフォーマンス
- バイナリ形式でデータをやり取りする。
- 多言語間のデータ交換がしやすく、高負荷分散システムにも強い。
- 小さいサーバが複数存在している中で、頻繁にサーバ間を通信するようなシステムが効果を発揮する。
- 設定に手間がかかってしまうが、パフォーマンス重視の場面で力を発揮する。
SPA とは?
- SinglePageApplication の略
- 単一ページでページ遷移を行わず、JS で情報を取得・描画を行うアプリケーションの構造を指す。
メリット
- 遷移を行わないため、UX の向上につながる
- 1 つのページで完結するため、サーバとの通信量は減る。
- パフォーマンス向上につながる。
デメリット
- JS のコード量が増えるため、初回のロード時間が長くなる。
アジャイル開発とは?
- 短いサイクルで計画 → 設計 → 実装 → テストを繰り返しながら開発を行う体制のこと。
メリット
- 手戻り上等のため、急な仕様変更にも対応することができる。
- フィードバックしコミュニケーションを取りながら開発できるため、満足度の高いプロダクト開発を行うことができる。
デメリット
- 厳密に仕様を決めていないため、開発の方向性がブレやすい。
テストコードを書く意味
- コードの安全性を担保できないため。
ビルドとは?
- ソースコードを解析し、実行可能なファイルを生成するプロセスのこと。
- ビルドには種類があり、リリースビルド・開発ビルドがある。
- リリースビルドは、デバック用のデータを含めず実行可能なファイルを生成すること。
- 開発ビルドは、デバック用のデータを含めた状態で実行可能なファイルを生成すること。
デプロイとは?
- ビルドしたアプリケーションを運用環境に配置し、ユーザが利用できる状態にすることを指す。
CI/CD とは?
- ビルド・テスト・デプロイを自動化する開発手法のこと。
- 代表的なツールとしては、Jenkins、GithubAction が存在している。
メリット
- 自動化しているため、ヒューマンエラーが起きない。
- エラーの早期発見ができる。
- ビルド・テスト・デプロイに割いていた開発コストを削減することができる。
Linux とは
- オープンソースの OS の一つ。
- Web サーバ、開発環境、クラウド環境、組み込み機器で使われる。
メリット
- オープンソースのため、無料かつカスタマイズが可能。
- 安定性と高い信頼性がある。
- そのため、長期間稼働するサーバ向け
- ユーザと権限管理が厳格なため、セキュリティが高い。
- 軽量で高速なため、低スペックのマシンでも動かすことができる。
SQL インジェクションとは?
- 入力フォームや検索欄に 不正な操作を行う SQL 文を入力し、DB のデータを改ざんや消去を行う攻撃の一種
- Rails で対策するには、ActiveRecord のプレースホルダーやバリデーションを使用しリスクを回避する。
DB の正規化とは?
- データの整合性を確保するために必要な手法。
- データの冗長性を削減することで、データの更新・検索の効率が上がる。
正規化前
ID | 氏名 | 電話番号 | 住所 |
---|---|---|---|
1 | 田中太郎 | 090-1234-5678, 03-9876-5432 | 東京都千代田区 |
2 | 鈴木一郎 | 080-9876-5432 | 東京都渋谷区 |
第一正規化
- 同一テーブルの繰り返し項目を削除する。 | ID | 氏名 | 電話番号 | 住所 | | —- | —- | —- | —- | | 1 | 田中太郎 | 090-1234-5678 | 東京都千代田区 | | 1 | 田中太郎 | 03-9876-5432 | 東京都千代田区 | | 2 | 鈴木一郎 | 080-9876-5432 | 東京都渋谷区 |
第二正規化
-
部分関数従属をなくす。
-
顧客テーブル | 顧客 ID | 氏名 | | —- | —- | | 1 | 田中太郎| | 2 | 鈴木一郎|
-
電話番号テーブル | 顧客 ID | 電話番号 | | —- | —- | | 1 | 090-1234-5678 | | 1 | 03-9876-5432 | | 2 | 080-9876-5432 |
-
住所テーブル | 顧客 ID | 住所 | | —- | —- | | 1 | 東京都千代田区 | | 2 | 東京都渋谷区 |
第三正規化
- 主キー以外の列が他の非キー列に依存している場合、別のテーブルに分ける。
-
顧客テーブル | 顧客 ID | 氏名 | 郵便番号 | | —- | —- | —- | | 1 | 田中太郎 | 100-0001 | | 2 | 鈴木一郎 | 150-0001 |
-
郵便番号テーブル | 郵便番号 | 住所 | | —- | —- | | 100-0001 | 東京都千代田区 | | 150-0001 | 東京都渋谷区 |
- 電話番号テーブル | 顧客 ID | 電話番号 | | —- | —- | | 1 | 090-1234-5678 | | 1 | 03-9876-5432 | | 2 | 080-9876-5432 |