1 minute read

学んだこと

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 |