初心者でもわかるウェブ技術 完全ガイド
ブラウザ、HTTP、HTML/CSS/JavaScript、API、デプロイまでを一枚の地図として整理。
HTML、CSS、JavaScriptから、React、TypeScript、Next.js、API、DB、デプロイ、セキュリティまで。バイブコーディングで出てくる名前を「何者で、どこに置かれる技術か」から理解できるように、詳しい地図と短い実例を行き来できる形でまとめた実践ガイドです。
まず迷ったらここを見る
Web技術は名前が多いですが、最初は「画面」「通信」「保存」「公開」の4つに分けるとかなり見通しがよくなります。
| 見る観点 | 関係する技術 | 最初に押さえること |
|---|---|---|
| 画面を作る | HTML、CSS、JavaScript、React | HTMLは意味、CSSは見た目、JavaScriptは動き |
| 通信する | HTTP、URL、JSON、API | ブラウザがリクエストし、サーバーがレスポンスを返す |
| 保存する | DB、ストレージ、Cookie、状態管理 | 一時的な状態と、長く残すデータを分けて考える |
| 公開する | ビルド、ホスティング、CDN、CI/CD | 開発用コードを本番用に変換して、サーバーやCDNから配る |
1. ウェブアプリの全体像
ウェブアプリは「ブラウザで動く画面」と「サーバー側の処理」と「データを保存する場所」が、HTTPという約束で会話する仕組みです。
flowchart LR
U["ユーザー"] --> B["ブラウザ"]
B -->|"HTTPリクエスト"| W["Webサーバー / CDN"]
W --> A["アプリサーバー / API"]
A --> D[("データベース")]
A --> S["外部サービス\n決済・メール・AI・認証"]
A -->|"JSON / HTML"| B
B -->|"HTML + CSS + JavaScriptを解釈"| UI["画面"]
見る場所
ユーザーの端末にあるブラウザ。HTMLを読み、CSSで見た目を作り、JavaScriptで操作に反応します。
考える場所
サーバー。ログイン判定、データ取得、決済、AI呼び出しなど、ユーザーに直接見せたくない処理を担当します。
覚える場所
データベースやストレージ。ユーザー、投稿、商品、画像、設定、履歴などを保存します。
2. HTML・CSS・JavaScript
ブラウザで動くウェブの三大基礎です。まずここが地面です。
| 技術 | 一言でいうと | 担当すること | 例 |
|---|---|---|---|
| HTML | 文書と構造 | 見出し、段落、リンク、フォーム、画像など「意味」を作る | <h1>、<button>、<form> |
| CSS | 見た目とレイアウト | 色、余白、文字サイズ、配置、レスポンシブ対応を作る | display: grid、color、@media |
| JavaScript | 動きと振る舞い | クリック反応、入力チェック、API通信、画面更新を行う | addEventListener、fetch、状態管理 |
同じボタンを三層で見る
まずは、1つのボタンをHTML、CSS、JavaScriptに分けて見るのが一番わかりやすいです。
<button id="saveButton" class="save-button">保存</button>
HTMLは「これは保存ボタンです」という意味と構造を作ります。
.save-button {
background: #146c68;
color: white;
padding: 10px 16px;
}
CSSは色、余白、文字色など、画面上でどう見えるかを決めます。
document.querySelector("#saveButton").addEventListener("click", () => {
alert("保存しました");
});
JavaScriptは「押したら何が起きるか」を決めます。つまり、HTMLが骨組み、CSSが見た目、JavaScriptが振る舞いです。
3. ブラウザ・DOM・HTTP
ウェブ技術はブラウザの中で動き、ネットワーク越しにHTTPで会話します。
DOM
HTMLをブラウザが読み取って作る、操作可能な木構造です。JavaScriptはDOMを変更することで画面を書き換えます。
HTTP
ブラウザとサーバーが会話するためのプロトコルです。GETで取得し、POSTで送信し、ステータスコードで結果を伝えます。
sequenceDiagram participant User as ユーザー participant Browser as ブラウザ participant Server as サーバー participant DB as データベース User->>Browser: URLを開く / ボタンを押す Browser->>Server: GET / POST / PATCH / DELETE Server->>DB: 必要なデータを読む・書く DB-->>Server: 結果 Server-->>Browser: HTML または JSON Browser-->>User: 画面を表示・更新
ブラウザが画面を描くまで
flowchart LR HTML["HTMLを読む"] --> DOM["DOMツリー"] CSS["CSSを読む"] --> CSSOM["CSSOM"] DOM --> Render["レンダーツリー"] CSSOM --> Render Render --> Layout["レイアウト\n位置とサイズ"] Layout --> Paint["ペイント\n色・画像・文字"] Paint --> Composite["合成\n画面に表示"] JS["JavaScript"] --> DOM JS --> CSSOM
DevToolsのElements、Console、Network、Performanceは、この流れを観察するための道具です。表示崩れはElements、通信エラーはNetwork、JavaScriptエラーはConsole、重さはPerformanceで見ると切り分けやすくなります。
URL・JSON・Cookie・CORS
| 名前 | 何者か | 初心者がつまずきやすい点 |
|---|---|---|
| URL | Web上の場所を示す住所 | ドメイン、パス、クエリ、ハッシュは役割が違う |
| JSON | APIでよく使うデータ形式 | JavaScriptのオブジェクトに似ているが、文字列キーや値の形式にルールがある |
| Cookie | ブラウザに保存され、リクエスト時に送られる小さな情報 | ログインセッションに使う場合はSecure、HttpOnly、SameSiteを意識する |
| CORS | 別オリジンへのブラウザ通信を制御する仕組み | サーバー側が許可しないと、ブラウザがレスポンス利用を止める |
| ステータス | 意味 | よくある場面 |
|---|---|---|
| 200 | 成功 | ページやAPIが正常に返った |
| 301 / 302 | リダイレクト | 別URLへ移動 |
| 400 | リクエストが不正 | 入力値や形式が間違っている |
| 401 / 403 | 認証・権限エラー | ログインしていない、権限がない |
| 404 | 見つからない | URLやデータが存在しない |
| 500 | サーバーエラー | サーバー側の例外や設定ミス |
4. SVG・Mermaid・画像・Canvas
画面に出るものはHTMLテキストだけではありません。図、アイコン、写真、動画、グラフも重要な構成要素です。
SVG
拡大しても荒れにくいベクター画像。アイコン、ロゴ、簡単な図解に向いています。HTMLに直接埋め込めるのでCSSやJSで操作できます。
Mermaid
テキストから図を生成するツール。フローチャート、シーケンス図、ER図などをドキュメント内で管理しやすくします。
Canvas / WebGL
ピクセルや3Dをコードで描く領域。ゲーム、画像編集、複雑な可視化、3D表現に向いています。
Mermaidは設計の会話に強い
flowchart TD
A["要件"] --> B["画面設計"]
B --> C["API設計"]
C --> D["DB設計"]
D --> E["実装"]
E --> F["テストとデプロイ"]
コードとして差分管理できるので、設計の変更履歴も追いやすくなります。
5. JavaScript系スタックの関係性
Next.js、TypeScript、React、Node.js、Vite、npmは同じ階層の競合ではありません。役割が違います。
flowchart TB JS["JavaScript\n言語そのもの"] --> TS["TypeScript\n型を足したJavaScript"] JS --> Browser["ブラウザ実行環境"] JS --> Node["Node.js\nサーバー・CLIでJSを動かす実行環境"] Node --> NPM["npm / pnpm / yarn\nパッケージ管理"] NPM --> Vite["Vite\n開発サーバー・ビルドツール"] NPM --> Next["Next.js\nReactベースのフルスタックフレームワーク"] JS --> React["React\nUIを部品で作るライブラリ"] TS --> React React --> Next Vite --> ReactApp["React SPA\nブラウザ中心のアプリ"]
| 名前 | 分類 | 何を解決するか | 競合しやすい相手 |
|---|---|---|---|
| JavaScript | 言語 | ブラウザやNode.jsで動くプログラムを書く | Python、Ruby、Goなど |
| TypeScript | 言語拡張 | JavaScriptに型を足して、バグを早く見つける | 素のJavaScript |
| React | UIライブラリ | 画面をコンポーネントとして組み立てる | Vue、Svelte、Solidなど |
| Next.js | フレームワーク | Reactにルーティング、サーバー処理、最適化、ビルド規約を足す | Nuxt、SvelteKit、Remix系、Astroなど |
| Vite | 開発・ビルドツール | 高速な開発サーバーと本番ビルドを提供する | Webpack、Rspack、Parcelなど |
| Node.js | 実行環境 | ブラウザ外でJavaScriptを動かす。サーバーやビルドツールの土台になる | Deno、Bunなど |
| npm | パッケージ管理 | ライブラリの取得、バージョン管理、スクリプト実行を行う | pnpm、Yarnなど |
Reactだけ、Next.js、Viteの違い
| 構成 | 向いているもの | 考えること |
|---|---|---|
| HTML + CSS + JS | 小さなページ、教材、単純なツール | ファイル構成、部品化、状態管理を自分で決める |
| Vite + React | ブラウザ中心のSPA、管理画面、プロトタイプ | ルーティング、API、認証、SEOを必要に応じて追加する |
| Next.js | ページ数があるサービス、SEO、サーバー処理込みのアプリ | サーバーコンポーネント、キャッシュ、デプロイ環境の理解が必要 |
6. フロントエンドの作り方
フロントエンドは、ユーザーが直接触る部分です。見た目だけでなく、状態、入力、アクセシビリティ、API通信まで含みます。
コンポーネント
ボタン、カード、フォーム、一覧などを再利用可能な部品にします。React、Vue、Svelteなどが得意です。
状態管理
選択中のタブ、入力値、ログインユーザー、取得済みデータなど、画面が覚えている情報を扱います。
ルーティング
URLに応じて表示する画面を切り替えます。Next.jsではファイル構成がルートになります。
レンダリング方式
| 方式 | 意味 | 強み | 注意点 |
|---|---|---|---|
| CSR | ブラウザ側で画面を作る | 操作感が軽いSPAにしやすい | 初回表示やSEOに工夫が必要 |
| SSR | リクエストごとにサーバーでHTMLを作る | 初回表示やSEOに強い | サーバー負荷とキャッシュ設計が必要 |
| SSG | ビルド時にHTMLを作る | 高速・安定・安価 | 頻繁に変わるデータには再生成が必要 |
| ISR / 再検証 | 静的ページを後から更新する | 速度と鮮度のバランスを取れる | 更新タイミングの理解が必要 |
| RSC | React Server Components | サーバーで完結できるUI処理を増やせる | サーバー/クライアント境界の理解が必要 |
7. バックエンドとAPI
バックエンドは、ユーザーに見せるべきでない処理や、信頼できる場所で行うべき処理を担当します。
flowchart LR
UI["フロントエンド"] --> API["API"]
API --> Auth["認証・認可"]
API --> Logic["業務ロジック"]
API --> DB[("DB")]
API --> Queue["キュー / バッチ"]
API --> External["外部API\n決済・メール・AI"]
| 概念 | 役割 | 例 |
|---|---|---|
| API | フロントエンドや外部サービスが使う窓口 | REST、GraphQL、RPC、Server Actions |
| OpenAPI | APIの仕様を機械可読な形で書く | エンドポイント、入力、出力、エラーを共有する |
| 認証 | 誰かを確認する | ログイン、OAuth、メールリンク、パスキー |
| 認可 | 何をしてよいか決める | 管理者だけ削除可能、本人だけ編集可能 |
| 業務ロジック | アプリ固有のルール | 在庫計算、予約可否、料金計算 |
| ジョブ | 時間のかかる処理を裏で実行 | メール送信、画像変換、AI生成、集計 |
ブラウザからAPIを呼ぶ最小例
async function loadPosts() {
const response = await fetch("/api/posts");
const posts = await response.json();
console.log(posts);
}
fetch はブラウザからAPIへHTTPリクエストを送るための代表的な方法です。実際のアプリでは、失敗時の表示、読み込み中の表示、ログイン権限の確認も一緒に考えます。
8. データベース・ストレージ・状態
「いま画面で覚える状態」と「長く保存するデータ」は別物です。
UI状態
モーダルの開閉、選択中タブ、入力中フォーム。消えても大きな問題がない短命な状態です。
サーバー状態
APIから取得するユーザー、投稿、商品など。キャッシュ、再取得、更新衝突を考えます。
永続データ
DBやストレージに保存する、アプリの本体となる情報です。設計ミスの影響が大きい領域です。
DBの大まかな分類
| 種類 | 向いているもの | 代表例 |
|---|---|---|
| リレーショナルDB | 整合性が大事な業務データ | PostgreSQL、MySQL、SQLite |
| ドキュメントDB | 柔軟なJSON構造 | MongoDB、Firestore |
| キー・バリュー | 高速キャッシュ、セッション | Redis、Upstash Redis、DynamoDB系 |
| オブジェクトストレージ | 画像、動画、PDFなどのファイル | S3、R2、Blob Storage |
| 検索エンジン | 全文検索、ランキング、ログ検索 | Elasticsearch、Meilisearch、Algolia |
9. デプロイ・クラウド・運用
作ったものを他人が使える状態に公開し、壊れたときに直せるようにする領域です。
ホスティングの選び方
| 種類 | 向いているもの | 例 |
|---|---|---|
| 静的ホスティング | HTML/CSS/JSだけのサイト、SSG | GitHub Pages、Netlify、Cloudflare Pages |
| フルスタックPaaS | Next.jsなどのサーバー処理込みアプリ | Vercel、Netlify、Render |
| クラウドVM / コンテナ | 自由度の高いサーバー運用 | AWS、GCP、Azure、Docker |
| エッジ実行 | 低遅延なAPI、ミドルウェア、軽量処理 | Cloudflare Workers、Vercel Edge |
10. 品質: テスト・アクセシビリティ・パフォーマンス
動くだけでなく、壊れにくく、速く、誰でも使えることがプロダクトの品質です。
テスト
関数の単体テスト、画面のコンポーネントテスト、ユーザー操作を再現するE2Eテストがあります。
アクセシビリティ
キーボード操作、読み上げ、色のコントラスト、フォームラベルなどを整え、より多くの人が使えるようにします。
パフォーマンス
表示速度、操作への反応、レイアウトの安定性を改善します。画像最適化と不要なJS削減が効きます。
| 指標・観点 | 見るもの | 改善例 |
|---|---|---|
| LCP | 主要コンテンツが見えるまでの速さ | 画像最適化、SSR/SSG、キャッシュ |
| INP | 操作への反応 | 重いJSを分割、再レンダリング削減 |
| CLS | 表示中のレイアウトずれ | 画像サイズ指定、フォント読み込み調整 |
| WCAG | アクセシビリティの基準 | 意味のあるHTML、十分なコントラスト、フォーカス表示 |
11. セキュリティの基本
セキュリティは後付けではなく、入力、認証、権限、依存関係、ログのすべてに関わります。
よくある危険
- 権限チェック漏れ
- SQLインジェクション
- XSS
- CSRF
- 秘密情報の漏えい
- 古い依存ライブラリ
基本対策
- サーバー側で必ず権限チェックする
- SQLはプレースホルダーやORMを使う
- HTMLに差し込む値をエスケープする
- APIキーはサーバー側の環境変数に置く
- 依存関係を更新し、脆弱性を確認する
- ログと監視で異常を検知する
12. 技術スタックの選び方
流行ではなく、作りたいものの性質から選ぶと迷いにくくなります。
flowchart TD
A["何を作る?"] --> B{"公開ページ中心?"}
B -- "はい" --> C{"更新頻度は低い?"}
C -- "はい" --> SSG["Astro / Next.js SSG / 静的HTML"]
C -- "いいえ" --> NEXT["Next.js / Nuxt / SvelteKit"]
B -- "いいえ" --> D{"アプリ操作が中心?"}
D -- "はい" --> SPA["Vite + React / Vue / Svelte"]
D -- "いいえ" --> SIMPLE["まずHTML + CSS + JS"]
SPA --> E{"サーバー処理が多い?"}
E -- "はい" --> FULL["Next.jsなどフルスタック"]
E -- "いいえ" --> API["外部BaaS / 軽量API"]
目的別の初期構成
| 目的 | おすすめ初期構成 | 理由 |
|---|---|---|
| 学習用の小さなページ | HTML + CSS + JavaScript | 基礎が見えやすく、セットアップが少ない |
| 管理画面・ツール | Vite + React + TypeScript | 速く作れて、部品化しやすい |
| SEOが大事なサービス | Next.js + TypeScript | ルーティング、SSR/SSG、画像最適化が揃う |
| ブログ・コンテンツサイト | Astro / Next.js / 静的サイト生成 | 軽く、速く、運用しやすい |
| リアルタイム性が高いアプリ | React等 + WebSocket + 専用バックエンド | 双方向通信と状態同期が重要になる |
| AI機能付きアプリ | Next.js等 + サーバーAPI + DB | APIキー保護、履歴保存、課金管理が必要 |
13. 学習ロードマップ
全部を同時に覚える必要はありません。作りながら、層を一枚ずつ増やすのが近道です。
バイブコーディング用プロンプトの型
目的:
作りたいユーザー体験:
必要な画面:
保存するデータ:
使いたい技術スタック:
避けたいこと:
セキュリティ上の注意:
完成条件:
検証してほしいこと:
技術名だけで依頼するより、「何を保存するか」「誰が何をできるか」「完成条件」を書くと、生成される設計がかなり安定します。
14. ざっくり用語集
- ライブラリ: 部品として使う道具
- フレームワーク: 作り方の型ごと提供する道具
- ランタイム: コードを実行する環境
- ビルド: 開発用コードを本番用に変換すること
- バンドル: 複数ファイルを配信用にまとめること
- トランスパイル: TSや新しいJSを別のJSへ変換すること
- ルーティング: URLと画面・処理を結びつけること
- SSR: サーバーでHTMLを作ること
- CSR: ブラウザで画面を作ること
- API: ソフトウェア同士の窓口
- ORM: DB操作をコードで扱いやすくする道具
- CDN: 静的ファイルを世界中から速く配る仕組み
- CI/CD: テストやデプロイを自動化する流れ
- 環境変数: 環境ごとに変わる設定や秘密情報
- オリジン: スキーム、ホスト、ポートの組み合わせ
- CORS: 別オリジン通信のブラウザ側安全ルール
- Cookie: ブラウザが保存してサーバーへ送る小さなデータ
- OpenAPI: API仕様を文書化・共有するための標準的な形式
15. 参考ソース
内容作成時に確認した公式・信頼性の高い資料です。確認日: 2026-05-10。
- MDN: HTML
- MDN: CSS
- WHATWG: HTML Standard
- W3C: CSS Snapshot 2025
- MDN: SVG
- W3C: SVG 2
- MDN: HTTP Overview
- IETF RFC 9110: HTTP Semantics
- WHATWG: URL Standard
- IETF RFC 8259: JSON
- MDN: Learn web development
- MDN: How browsers work
- MDN: Web APIs
- React: Start a New React Project
- React: Server Components
- Next.js Docs
- Next.js: Server and Client Components
- TypeScript Handbook
- Vite: Why Vite
- Node.js Learn
- npm Docs: About npm
- Mermaid Docs
- OpenAPI Specification
- W3C WAI: WCAG Overview
- W3C: WCAG 2.2
- web.dev: Core Web Vitals
- web.dev: Learn Accessibility
- MDN: Web Security
- OWASP Top 10
- PostgreSQL Tutorial
- NIST: Cloud Computing Definition
- Docker Docs: Overview