Skip to content

Repository files navigation

WebSocket 学習レポ

題材: 10人同期のブラウザ蛇ゲーム(Slither.io風) 対象: WebSocketほぼ初心者 / 素のJavaScriptで進める ゴール: WebSocketの基本から、リアルタイム同期・状態管理・遅延対策・簡易スケーリングまで理解する


このリポジトリについて

「動いた」で終わらせず、「なぜそう設計するのか」を説明できる状態を目指す学習教材です。

初心者が詰まる原因は大体この3つです。

  1. HTTPとWebSocketの違いが曖昧
  2. 入力と状態を混同する
  3. クライアント側に真実を持たせて壊れる

このカリキュラムでは、そこを順番に潰していきます。


技術スタック

分類 技術
フロント HTML / CSS / 素のJavaScript / Canvas API
バックエンド Go + echo + gorilla/websocket
実装では使わないもの React, TypeScript, Redux, DB
概念として触れるもの Redis(Step 12 で Pub/Sub の役割のみ解説、実装なし)

注: Redis は Step 12 で「複数サーバー構成ではどう使うか」を概念レベルで説明します。 Step 0〜11 の実装コードには登場しません。

理由は単純で、理解前に道具を増やすと本質が見えなくなるからです。


ステップ一覧

Step テーマ フォルダ
Step 0 HTTPとWebSocketの違いを理解する step-00-http-vs-websocket
Step 1 まずは1本つなぐ(エコーサーバー) step-01-echo
Step 2 複数人に配る(ブロードキャスト) step-02-broadcast
Step 3 メッセージではなく「入力」を送る step-03-input
Step 4 サーバーで状態を持つ step-04-server-state
Step 5 ゲームループを入れる step-05-game-loop
Step 6 蛇ゲームにする step-06-snake
Step 7 遅延と同期ズレを体験する step-07-lag
Step 8 補間を入れる(予測は概念のみ) step-08-interpolation
Step 9 10人部屋を作る step-09-rooms
Step 10 切断・再接続に対応する step-10-reconnect
Step 11 最適化を考える step-11-optimization
Step 12 上級発展:1台を超える設計へ step-12-advanced

進め方のルール

各ステップでやることは4つです。

  1. 概念理解 — READMEを読む
  2. 最小実装 — コードを自分で打ち込む(コピペではなく)
  3. 動作確認 — 実際に動かす
  4. 言語化 — 以下を自分の言葉で書く

毎ステップ必須のアウトプット:

  • 「何を学んだか」
  • 「なぜその設計にしたか」
  • 「どこがまだ分からないか」
  • 「次のステップで何が増えるか」

おすすめの進め方

Step 0〜2 → 最速で終わらせる(接続の感触をつかむ)
Step 3〜5 → 本質理解(ここが最重要)
Step 6    → ゲームらしさを入れる
Step 7〜8 → 「リアルタイムの現実」を学ぶ
Step 9〜12 → 設計者の視点に上げる

一番大事なのは Step 4 と Step 5 です。 ここが曖昧なまま進むと、用語を眺めるだけになります。


各ステップのフォルダ構成(Step 1〜11)

step-XX-name/
├── README.md      # 概念説明・コード解説・練習問題
├── server/
│   └── main.go   # Goサーバー
└── client/
    └── index.html # フロントエンド

最終到達イメージ

このカリキュラムを終えたら、最低でも以下が言える状態を目指します。

  • WebSocketの接続と基本イベントを説明できる
  • ブロードキャストの仕組みを実装できる
  • 入力送信と状態同期の違いを説明できる
  • サーバー権威型の設計を理解している
  • tickベースのゲームループを実装できる
  • 遅延やカクつきの原因を説明できる
  • 補間の役割を理解している
  • 10人部屋の基本設計を考えられる
  • 切断・再接続・ルーム分割など、現実の問題を意識できる

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages