1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【備忘録】Webの仕組みをゼロから理解する part2

1
Posted at

はじめに

前回の記事の続きを記載いたします。
https://qiita.com/suneo46/items/8f5a987e927813323af0

㉓ レンダリングの種類(ここ重要)

Webアプリの表示方法にはいくつか種類があります。

■ CSR(Client Side Rendering)

👉 Reactの基本

ブラウザで描画する
初回表示は少し遅い
その後の操作は速い

サーバー → 空に近いHTML
        ↓
ブラウザ → JavaScript実行
        ↓
画面描画

■ SSR(Server Side Rendering)

👉 サーバーでHTMLを作る

初回表示が速い
SEOに強い

サーバー → 完成HTML生成
        ↓
ブラウザ → すぐ表示

■ SSG(Static Site Generation)

👉 事前にHTMLを生成

表示がとても速い
更新が少ないページ向き

㉔ SEOとの関係

SEOに強い構成👇

SSR / SSGを使う
HTMLにコンテンツが含まれている
表示速度が速い

👉 CSRだけだと検索エンジンに弱い場合あり

㉕ パフォーマンス(表示速度)

ユーザー体験に直結します。

重要ポイント👇

表示が速いか
操作がすぐ反応するか
レイアウトが崩れないか

👉 遅いとユーザーは離脱します

㉖ よく使う最適化

実務でよくやる改善👇

画像圧縮(WebP)
Lazy Load(遅延読み込み)
Code Splitting(JS分割)
CDN利用

㉗ CDNとは

👉 近いサーバーから配信して高速化する仕組み

㉘ セキュリティ

最低限ここは押さえる👇

XSS(スクリプト攻撃)
CSRF(なりすましリクエスト)
HTTPS(通信の暗号化)

㉙ 認証と認可

似ているけど別物👇

認証:あなたは誰?(ログイン)
認可:何ができる?(権限)

㉚ JWTとは

👉 認証情報を持つトークン

サーバーで状態を持たない(ステートレス)
APIと相性が良い

㉛ デプロイ

👉 作ったアプリを公開すること

㉜ CI/CD

👉 テストとデプロイを自動化

CI:テスト・ビルド
CD:デプロイ

㉝ インフラ

👉 アプリが動く場所

サーバー
クラウド(AWSなど)
Docker

㉞ 実務ではどう使われるのか?

👉 「仕組み」→「実務」に落とす

ケース①:ユーザー一覧画面
流れ

① 画面表示
② ReactがAPI実行
③ バックエンドがDB取得
④ JSON返却
⑤ state更新
⑥ UI表示

フロント(React)
import { useEffect, useState } from "react";

export const UserList = () => {
  const [users, setUsers] = useState([]);

  useEffect(() => {
    fetch("/api/users")
      .then(res => res.json())
      .then(data => setUsers(data));
  }, []);

  return (
    <ul>
      {users.map(user => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
};

👉 ポイント

初回レンダリングでAPI実行
state更新で再描画

バックエンド
app.get("/api/users", async (req, res) => {
  const users = await db.users.findAll();
  res.json(users);
});
DB
SELECT * FROM users;

ケース②:ログイン機能
流れ

① 入力
② API送信
③ 認証
④ トークン発行
⑤ ログイン状態維持

フロント

fetch("/api/login", {
  method: "POST",
  body: JSON.stringify({ email, password }),
});
バックエンド
app.post("/api/login", async (req, res) => {
  const user = await db.users.findByEmail(req.body.email);

  if (user.password === req.body.password) {
    res.json({ token: "xxx" });
  } else {
    res.status(401).send("Unauthorized");
  }
});

ケース③:いいねボタン(非同期)
流れ

① ボタン押下
② API送信
③ DB更新
④ state更新
⑤ UI更新

フロント

const handleLike = async () => {
  await fetch("/api/like", { method: "POST" });
  setLiked(true);
};

👉 ページリロードなしで更新される

ケース④:よくあるバグ
① 画面が更新されない

原因👇

state更新していない
非同期の扱いミス
② API成功なのに表示されない

原因👇

JSON構造ミス
props渡しミス
③ 本番だけ動かない

原因👇

CORS
環境変数
API URL違い
👉 切り分けが最重要

② Networkタブを見る

👉 ここで大体解決する

③ ログを仕込む
console.log(data);

👉 デバッグ

JISOUのメンバー募集中!

プログラミングコーチングJISOUでは、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか?
興味のある方は、ぜひホームページをのぞいてみてください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?