オンラインゲームを支える技術 ―壮大なプレイ空間の舞台裏
本文解説チェックポイントリスト
『オンラインゲームを支える技術 -- 壮大なプレイ空間の舞台裏』では、オンラインゲーム開発技術のエッセンスを抽出し厳選解説していますが、それでも600ページを超えるボリュームになりました。そこで、各章のチェックポイント、見所をトピックごとにグループ化して以下にまとめました。本書の紙面掲載の、「本書の構成」や目次&索引コーナーと合わせて、お読みいただく際の参考および読後の理解度チェックなどにぜひご活用ください。
※本リストに登場する会社名、製品名は一般に各社の登録商標または商標です。本リストでは、™、© 、®マークなどは表示しておりません。
第0章:[速習]オンラインゲームプログラミング ——ネットワーク×ゲームプログラミングの技術基礎
- ☑インターネットプログラミング
- ☑IETF
- ☑RFC
- ☑OSI参照モデル
- 物理層
- データリンク層
- ネットワーク層
- トランスポート層
- セッション層
- プレゼンテーション層
- アプリケーション層
- ☑インターネットプログラミング
- ☑IP、UDP、TCP
- ☑コネクション(STREAM)志向、コネクションレス(DGRAM)志向
- ☑交換可能(な階層化設計)
- ☑1Gbit Ethernet
- ☑ソケットAPI(BSDソケットAPI)、ソケット
- ☑書籍『UNIXネットワークプログラミング』シリーズ
- ☑レイヤ3、レイヤ4
- ☑パケット分割と再構成
- ☑IANA
- ☑/etc/services
- ☑IPv4、IPv6
- ☑ECHOサーバ/ECHOクライアント
- ☑socket( )
- ☑connect( )
- ☑bind( )
- ☑listen( )
- ☑accept( )
- ☑read( )、write( )、send( )、recv( )、sendto( )、recvfrom( )
- ☑shutdown( )
- ☑close( )
- ☑非同期ソケット、非同期ソケットAPI
- ☑スレッド
- ☑select( )
- ☑スレッドのプール(コラム)
- ☑Grand Central Dispatch、ゴルーチン(コラム)
- ☑Lua、Squirrel、Javascript
- ☑バッファオーバーフローのチェック
- ☑例外オブジェクトの処理
- ☑OSとの入出力を頻繁に行うアプリケーション(高頻度のI/O)
- ☑GoogleのGo言語
- ☑静的言語、動的言語
- ☑バイトコード
- ☑シングルスレッド、マルチスレッド
- ☑イベント駆動
- ☑ノンブロッキング
- ☑マルチコア
- ☑コンテキストスイッチ
- ☑オクテット
- ☑プリアンブル
- ☑libevent
- ☑memcached
- ☑RPC
- ☑XMLRPC
- ☑バイナリのデータ交換フォーマット/ライブラリ
- ☑Protcol Buffer
- ☑Thrift
- ☑Message Pack
- ☑getKey( )とpoint( )
- ☑矩形の衝突判定
- ☑スレッドのスケジューリングとオーバーヘッド
- ☑コールバック関数
- ☑タスクシステム
- ☑開発効率とソースコードの移植性(コラム)
第1章:オンラインゲームの歴史と進化 ——ゲームが「ネットワーク」を取り込んだ!
- ☑オンラインゲームの技術史
- ☑1950年以前
- ☑1950年代
- ☑1960年代
- PDP-1、PLATO、ARPANET、UNIX、『SpaceWar!』
- ☑1970年代
- Email、C言語、ATARI、FPS、TRPG、MUD、RFC
- ☑1980年代
- IBM PC、Netware、SMTP、ファミリーコンピュータ(NES)、『富士通Habitat』、HTML、WorldWideWeb
- ☑1990年代
- MMOG、『DOOM』、Java、『Ultima Online』、MOD、『Counter-Strike』
- ☑2000年代
- 『Lineage』、Playstation 2、『Second Life』、Flash、『World of Warcraft』、アイテム課金、ニンテンドーWii、Xbox 360、iPhone
- ☑ハッカー文化圏
- ☑コンソール/アーケードゲームビジネス圏
- ☑Microsoft圏
第2章:オンラインゲームとは何か? ——さまざまな角度から見るオンラインゲーム
- ☑オンラインゲームの呼称
- ☑物理モデル
- インターネット直結モデル
- 携帯ネットワークモデル
- ルータ経由モデル
- アーケードモデル
- アドホックモデル
- ☑「認知→判断→操作」の繰り返し
- ☑ゲームプレイ空間(ゲームの状態、ステート)
- ☑マインスイーパ
- ☑ゲームの進行
- ☑クローズドベータテスト(CBT)
- ☑オープンベータテスト(OBT)
- ☑定期的なパッチ、大規模パッチ(拡張ディスク、追加パッケージ)、緊急メンテナンス
- ☑マシンコストの見積もり
- ☑回線コストの見積もり
- ☑スケーラビリティ
- ☑課金決済手段
- ☑abuse(攻撃、不正行為)
- ☑RMT(Real Money Trade)
- ☑bot
- ☑ゲームクライアント
- ☑サービスの停止
- ☑プレイヤーの失望
- ☑ゲームプレイの結果
- ☑ログ解析
- ☑ゲームプレイのメタ情報
- ☑ハイスコアランキング
- ☑プレイ実績
- ☑その他の統計
- ☑プレイヤーマッチング
- ☑自動選択式
- ☑専用ロビー
- ☑仮想世界(ビジュアルロビー)
- ☑サーバ設備の階層構造
- ☑プログラミングの基礎スキル
- ☑ゲームプログラミングの基礎知識
- ☑ゲームクライアント開発の知識
- ☑DBの知識
- ☑システム運用の知識
- ☑C/S(Client Server)とP2P(Peer to Peer)
- ☑MMO(Massively Multiplayer Online)とMO(Multiplayer Online)
- ☑ゲームのデータ形式
- ☑ゲームの通信形式
- ☑ゲームの反応速度(レスポンス)
- ☑ゲーム処理の「冗長化」と「非同期化」
- ☑ネットワーク遅延のパターン
- 同期式
- 非同期式
- ブラウザ式
第3章:オンラインゲームのアーキテクチャ ——ゲームのおもしろさ×技術的な制約との戦い
- ☑レスポンス命
- ☑ゲームプログラミングの三重苦
- ☑16ミリ秒ごとの変化、扱う情報のサイズ
- ☑『ツインビー』
- ☑大量のオブジェクトの表示、CPUの処理能力
- ☑ムーアの法則、CPUトランジスタの集積度
- ☑『Star Strike HD』
- ☑プレイヤーの操作を予想することができない、ゲーム状態の多彩な変化
- ☑カオス的振る舞い
- ☑オンメモリ
- ☑通信レイテンシ
- ☑ping(コマンド)
- ☑traceroute(コマンド)
- ☑光ファイバー
- ☑帯域
- ☑チート(の利益)
- ☑チート(の種類)
- メモリハック
- パケットハック
- データファイルハック
- DLLハック
- タイマーハック
- UIツールハック
- サーバハック
- 偽クライアント
- ☑クライアントマシン
- ☑サーバマシン
- ☑セキュリティ
- ☑補助的システム(周辺システム)
- ☑ネットワークトポロジ
- ノード、エッジ、リンク、ホップ数
- リング
- ライン
- メッシュ
- スター
- フルメッシュ
- ツリー
- バス
- ☑物理アーキテクチャ:通信するマシン同士の関係、物理的にどのように情報が伝達されるか
- C/S型(ピュアサーバ型、リフレクト型)
- P2P型
- NATトラバーサル
- C/S+P2P混成型
- ad-hocモード
- ☑ゲームクライアント(コラム)
- ☑論理アーキテクチャ:プレイヤー同士の関係、同時プレイ数の違い
- MO
- MMO
- MOとMMO
- ☑同期式と非同期式
- ☑アイテムデュープ
- ☑調停役
- ☑通信路の信頼性
- ☑NPC
第4章:[実践]C/S MMOゲーム開発 ——常時稼働するゲームサーバの存在
- ☑システム基本構造図
- ☑プロセス関係図
- ☑帯域/マシンリソース計算資料
- ☑プロトコル定義資料
- ☑DB設計図
- ☑プロトタイプ
- ☑テストbot(ベンチマークbot)
- ☑ゲームサーバ
- ☑データセンター
- ☑『Runescape』
- ☑プロセス関係図
- ☑ゲームサーバ(ゲームロジックサーバ)
- ☑ゲームDB
- ☑空間分割法
- ☑インスタンス(ダンジョン)
- ☑パラレルワールド方式、ワールド
- ☑同時接続数
- ☑スケーラビリティ
- ☑ゲームサーバ(gmsv)
- ☑ログインサーバ(loginsv)
- ☑データベースサーバ(dbsv)
- ☑リバースプロクシサーバ(proxy)
- ☑メッセージサーバ(msgsv)
- ☑ワールドサーバ(worldsv)
- ☑全体共通DBサーバ(commondbsv)
- ☑課金認証サーバ(authsv)
- ☑ログサーバ(logsv)
- ☑CPUセントリックなマシン
- ☑ストレージセントリックなマシン
- ☑バックエンド、フロントエンド
- ☑APIの呼び出しシーケンス
- APIを呼び出さない
- 投げっぱなしのシーケンス
- 三角形のシーケンス
- ぎざぎざなシーケンス
- ☑APIのタイプ
- one-way message
- query/query result
- notification
- ☑session鍵
- ☑圧縮アルゴリズム
- ☑暗号化
- ☑Diffie-Helman鍵交換
- ☑Man-in-the-middle攻撃
- ☑DB実装の歴史的変遷
- ☑DBに対する読み込み/書き込み(read/write)
- ☑テーブルのサイズ
- ☑DBの性能予測
- ☑Linux
- ☑MySQL
- ☑OpenSSL
- ☑GCC(gnu compiler collection)
- ☑計量言語
- ☑DirectX
- ☑Winsock
- ☑Visual Studio .NET
- ☑OpenSSL
- ☑データ構造優先の原則
- ポップ設定
- ☑プレイ可能状態維持の原則
- ☑バックエンド後回しの原則
- ☑継続的測定の原則
- クライアント開発における継続的測定
- サーバ開発における継続的測定
- ☑スケルトン段階
- ☑プロトタイプ段階
- ☑全体フレームワーク実装段階
- ☑量産段階
- ☑仕上げ段階
- ☑運営開始後段階
- ☑todo.txt
- ☑自動テストプログラム、テストbot(autocli)
- ☑SDL
- ☑Boost
- ☑k.xml
- ☑スタブコード
- ☑DSL(Domain-Specific Language)
- ☑経路探索と移動処理
- ☑「サンプルのコピー」から積み上げていく
- ☑sessionID
- ☑gmsvにおけるスレッドなどの利用(コラム)
第5章:[実践]P2P MOゲーム開発 ——専用サーバなしでアクションゲームを実装する
- ☑アクションゲーム
- ☑RPC型実装と共有メモリ型実装
- ☑『Diablo』
- ☑ゲームロジック(コラム)
- ☑帯域消費量の見積もり
- ☑競合状態
- ☑SyncValueクラス
- ☑C/S MO
- ☑NAT問題
- オープンインターネット
- 制限なしNAT
- アドレス制限付きNAT
- ポート制限付きNAT
- シンメトリックNAT
- UDPブロックド
- ☑リレーサーバ
第6章:オンラインゲームの補助的なシステム ——サービス強化に欠かせないしくみ
- ☑汎用
- Steam
- Plus+
- OpenFeint
- GameSpy Arcade
- Uplay
- ☑ゲーム機向け
- Microsoft Xbox LIVE
- ニンテンドーWi-Fiコネクション
- PlayStation Network
- Apple GameC enter
- ☑Webブラウザベースゲーム向け
- Kongregate
- ☑既存ミドルウェア
- Rendez-Vous
- ☑プレイヤーマッチング
- ☑ロビー
- 『StarCraft II』、Battle.net
- ☑リレーサーバ
- ☑チャット
- ☑メール
- ☑フレンドリスト
- ☑プレゼンス
- ☑ロックサーバ
- ☑ブラックリスト
- ☑ボイスチャット
- ☑プレイ実績管理
- ☑ストレージ機能
- ☑(ゲームクライアント)アップデート
- BitTorrent
- ニフティクラウド
- CDN(Contents Delivery Network)
- ☑ランキング
- ☑ニュース配信
- ☑課金認証
- ☑バーチャルポイント管理
- ☑C/S MMOゲームの収入(コラム)
- ☑ゲームデータ閲覧/検索ツール
- ☑ワードフィルタ
第7章:オンラインゲーム運営を支えるインフラ ——構築、負荷テスト、運営開始
- ☑インフラ関連の必要な作業
- (企画概要の決定)
- (プログラムの設計)
- インフラの大体の見積もり
- (プログラムの実装)
- インフラの見積もり
- 業者への見積もり依頼
- 見積もり判断、発注
- スケジュール決定
- インフラ構築
- 負荷テスト、デバッグ
- ローンチ
- 運用開始
- 設備やサービスの更新
- ☑初期費用
- 情報機器:マシン(Dellなどで見積もる)、スイッチングハブ、ルータなど
- ソフトウェア:Red Hat Linux、VMwareなど
- 情報機器以外:棚やケーブル類、電源など
- サービス:サーバ監視費用、データセンター利用料、ドメイン使用料、電子署名など
- ☑継続費用
- 回線
- 電気代
- ソフトウェア:ウイルススキャンソフトの利用料など
- サービス:Red Hatのオンサイトサービス、ドメイン利用料など
- ☑リプレース費用
- 情報機器:故障したマシンの置き換え、数年に一度のリプレースなど
- ☑19インチラック
- ☑スタートアップ
- ☑データセンター
- ☑パブリッククラウド
- ☑無制限無料お試し一発リリース
- ☑負荷の曲線
- ☑サーバデプロイメント
- RPM、tar.gz
- curl(コマンド)
- mysqldump(コマンド)
- ☑ステージング
- ☑サーバのモニタリング、生死監視(死活監視)
- ☑ログ出力/管理
- ☑アルファテスト
- ☑クローズドベータテスト
- ☑オープンベータテスト
- ☑登録ユーザ数
- ☑同時プレイ数
- ☑負荷テスト
- ☑vmstat(コマンド)
- ☑/proc/interrupts
- ☑ps(コマンド)
- ☑top(コマンド)
- ☑netstat(コマンド)
- netstat -s(コマンド)
- ☑ssh-add(コマンド)
- ☑expect(コマンド)
- ☑サーバの起動スクリプト
- ☑トラブル発生時の対応
第8章:オンラインゲームの開発体制 ——チーム運営上の課題
- ☑ゲームの企画内容と、チーム運営
- ☑ゲームデータの永続化度合い
- 運営開始後の3ヵ月が最もハード、運営は5〜10年続く
- ゲームの運営と技術者
- プロジェクト管理における課題
- ☑ゲームにおけるプレイヤー同士の関係
- ☑プレイ結果の共有範囲
- ☑チャットシステムの内容
- ☑メンテナンスとアップデートのスケジュール
- ☑ソースコードの規模
- イテレーションを廻す部分が多いと問題になる
- ビルド時間
- プログラムの起動時間
- サーバプログラムの起動手順
- データのバリデーション
- ☑作業分担
- ☑継続的スキルアップ法
- ☑プロジェクト管理術
- ゲーム開発とスクラム
- ☑プロジェクトの引き継ぎ
- テストの準備
- 開発環境の構築時間は短く
- 情報セキュリティの匙加減
- ☑オンラインゲーム開発のコスト感覚(コラム)