top of page

ネットコードの落とし穴 ― 静かに消えるメッセージ

執筆者の写真: Marcel Dütscher
Marcel Dütscher
6月21日
読了時間: 2分

マルチプレイのバグは、ちょっと特別な種類です。クラッシュもしないし、エラーも記録されません。ただ、何も起きないのです。自分たちのネットワークコードで出会った、お気に入りの落とし穴を二つ、注意喚起と読み物としてご紹介します。


落とし穴その1:登録されていないメッセージ。私たちのネットワークプロトコルには、「ブロックが変わった」「プレイヤーが動いた」「チャット」といったメッセージのクラスがあります。新しいメッセージの種類は、すべてコーデックに登録して、IDをもらい、シリアライズできるようにしなければなりません。これを忘れると、最悪のことが起きます。送信の呼び出しは失敗しているのに、そのエラーが黙って握りつぶされる場所で起きるのです。クラッシュもログもなく、機能がただ「動かない」。何度もこれでデバッグして、ついに反射的に身につきました。新しいメッセージクラスを作ったら、まず聞くことは「登録した?」です。


落とし穴その2:ゴーストブロック。サーバーがブロックを変えるとき(たとえばスクリプトが地形を作り変えるとき)、接続しているすべてのプレイヤーに自分から知らせる必要があります。ブロードキャストを忘れると、ゴーストブロックが生まれます。サーバーはそこにブロックがあると知っているのに、クライアントには空気しか見えません。プレイヤーは見えない壁にぶつかったり、もっと困ったことに、サーバー側にはもう存在しない場所に建物を建てたりします。チャンクを読み込み直して、やっと二つの世界が合います。


共通点は、マルチプレイには必ず二つの真実があるということです。サーバーのものと、クライアントのもの。そして、両方を同期させなければならない場所は、すべて落とし穴になりえます。私たちの答えは、まさにその同期をチェックするテストと、新しいメッセージ用のチェックリストでした。地味ですが、それ以来ゴーストはめったに出なくなりました。

最新記事

すべて表示
新しいバージョンが2026.7.19で、0.9.2ではない理由 🗓️

今日アップデートする人は、バージョン0.9.1から2026.7.19にジャンプします。打ち間違いに見えますが、意図した決定です。バージョンの付け方を、「セマンティック」から日付ベースのバージョン(年.月.カウンター)に変えました。その理由をお話しします。 古い方式は、だれも聞かない質問に答えていました。 セマンティックバージョニング(0.9.1、1.2.3…)は、ソフトウェアライブラリの世界から来

 
 
おそうじ完了:GitHubのキャッシュをようやくちゃんと使えるようになりました 🧹

前回の技術記事では、ビルドとチェックのパイプラインに本当は何がかかっているのかを測りました。わかったのは、お金ではなく、待ち時間と保存容量だということでした。その記事は「おそうじの作業は計画してあるけれど、まだ終わっていない」で締めくくっていました。ところが、思ったより早く進みました。今日のお昼の時点で、メインブランチに入っています。数字をご紹介します。 まず結果から。 リポジトリのキャッシュ使用

 
 
月に1000回のビルド実行、そのどれにもお金はかかっていません ⚙️

まず訂正です。この記事の最初のバージョンでは、GitHubのビルド時間を使い切ってしまい、そのせいでProアカウントにアップグレードせざるをえなかった、と書いていました。それは間違いでした。ドキュメントを一目見ればわかったことです。公開リポジトリでは、GitHubのビルド時間は無料です。アーティファクトもキャッシュもです。うちのリポジトリは5月末から公開されているので、1分もお金を払ったことはあり

 
 

コメント


この投稿へのコメントは利用できなくなりました。詳細はサイト所有者にお問い合わせください。
bottom of page