このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

Archives Details

RustとWebAssemblyによるゲーム開発 Webpack5対応

Rust

2025.03.27

この記事は最終更新日から1年以上が経過しています。

どもです。

いやぁ。久々。最近はすっかり積読を消化している日々でございまして。

参考書など書籍を数えるところ500冊くらい所持していまして w(面白そうな書籍はついつい購入しちゃいますよね。。)

まだ、200冊くらいしか読んでいないのでバタバタ消化している日々ですよ。

会社の方におすすめ書籍を紹介したりしているのですが、最近ヒットが薄いなぁと思っていたところ、発売日くらいに購入していて積読していた「RustとWebAssemblyによるゲーム開発」を、やっと消化していている日々なのですが、いやぁ、久々に面白い。スキルセットや攻めるところが、自分にピッタリのところもあるのですが、非常に楽しく過ごさせていただいております。

もう最後のほうなので、詳細に関しては後日まとめようかと。

で、困ったことにある日を境にビルドが全く通らなくなり、立ち上げられなくなりました。

そのある日なのですが、約5年使用してきたM1 MacMiniから Mac Mini M4 Proに乗り換えを行った日からです。(Mac Mini M4 Pro最高)

以下のようなエラーですね。

Version: webpack 4.47.0
Time: 14ms
Built at: 2025/03/26 8:14:29
 2 assets
Entrypoint index = index.js
[./pkg/index.js] 167 bytes {0} [built]
[./pkg/index_bg.js] 4.87 KiB {0} [built]
[./pkg/index_bg.wasm] 2.38 KiB {0} [built] [failed] [1 error]
    + 77 hidden modules

ERROR in ./pkg/index_bg.wasm
Module parse failed: Internal failure: parseVec could not cast the value
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders

 

いやー困った。書籍内では以下のコマンドを実行し

$ npm init rust-webpack

こちらのテンプレートを生成し利用しているのですが、

https://github.com/rustwasm/rust-webpack-template

 

こちらの更新が5年前くらいから止まっている状態。

Webpackのバージョンも4のままで、依存しているパッケージも古くなっている。

M1Mac miniでは問題なかったが、M4 Proに移行したらまっさらな状態で npm start してもエラー吐きまくって、同じくコンパイルが通らず起動できない。

色々検討した結果(そんなには時間はかけて考えてはいないのですが)

まぁ。「Webpackのバージョン上げたほうが良さそう」に落ち着きましたと。

GitHubにもあげました。

https://github.com/webcyou-org/rust-webpack-template

主な修正点

webpack.config.js

以前の

const path = require("path");
const CopyPlugin = require("copy-webpack-plugin");
const WasmPackPlugin = require("@wasm-tool/wasm-pack-plugin");

const dist = path.resolve(__dirname, "dist");

module.exports = {
  mode: "production",
  entry: {
    index: "./js/index.js"
  },
  output: {
    path: dist,
    filename: "[name].js"
  },
  devServer: {
    contentBase: dist,
  },
  plugins: [
    new CopyPlugin([
      path.resolve(__dirname, "static")
    ]),

    new WasmPackPlugin({
      crateDirectory: __dirname,
    }),
  ]
};

 

今回の

const path = require("path");
const CopyPlugin = require("copy-webpack-plugin");
const WasmPackPlugin = require("@wasm-tool/wasm-pack-plugin");

module.exports = {
  mode: "development",
  entry: "./js/index.js",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "index.js",
  },
  experiments: {
    asyncWebAssembly: true,
  },
  module: {
    rules: [
      {
        test: /\.wasm$/,
        type: "webassembly/async",
      },
    ],
  },
  plugins: [
    new CopyPlugin({
      patterns: [
        { from: path.resolve(__dirname, "static"), to: "" },
      ],
    }),
    new WasmPackPlugin({
      crateDirectory: __dirname,
    }),
  ],
  devServer: {
    static: path.resolve(__dirname, "dist"),
    port: 8080,
  },
  resolve: {
    extensions: [".js", ".wasm"],
  },
};

js/index.js

前回の

import("../pkg/index.js").catch(console.error);

 

今回の

import * as wasm from "../pkg/index.js";

 

package.json

"start": "rimraf dist pkg && webpack serve --open --mode development",
"devDependencies": {
  "@wasm-tool/wasm-pack-plugin": "^1.1.0",
  "copy-webpack-plugin": "^11.0.0",
  "rimraf": "^5.0.1",
  "webpack": "^5.90.0",
  "webpack-cli": "^5.1.4",
  "webpack-dev-server": "^4.15.1"
}

npm initでインストールできるようにしてもよいかと思いますが、そもそもWebpackではなく、Viteなど別の選択肢もありまたそれも形骸化しかねないのもあり、(まぁそこまでするのも面倒というのも)とりあえずGitHubにあげた形となります。

もし困っている人がいましたらー。

追って、書籍の感想など詳細を書いていければと。

ではではぁ。

またまたぁ。

 

Comment

Related Article

ゲーム開発に必要な基本数学入門

2025.08.15

Godot 4 & Rust 始め方

2025.06.19

Rustでつくる ふっかつのじゅもん

2025.04.29

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その5

2025.04.14

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その4

2025.04.10

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その3

2025.04.08

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その2

2025.04.07

Tauri(Rust) × AI で作る GitGUIクライアントアプリ その1

2025.04.05

keyring-rsで、Macのキーチェーンに登録する。

2025.04.04

RustとWebAssemblyによるゲーム開発 Webpack5対応

2025.03.27

CATEGORY LIST

LATEST NEWS

ラズパイが高騰しているのでストレス解消のためAliExpressで購入した電子パーツ達

電子工作

2026.08.02

【2026】【VMware Fusion】MacでWindowsを無料で扱う。

windows

2026.07.19

Raspberry Pi 5 でマインクラフトサーバーを立てる(Java版 × 統合版クロスプレイ対応)

RaspberryPi

2026.06.24

ラズパイが高い。

RaspberryPi

2026.05.26

【Claude Code】フル稼働。ToDo Appを様々なGUIフレームワーク用いて作らせる。

AI・Bot・algorithm

2026.05.24

Macで歩く「たのしいバイナリの歩き方」うさみみハリケーンの代わりに、Cheat Engine / Bit slicerを使用する

アセンブラ

2026.04.12

Macで歩く「たのしいバイナリの歩き方」

アセンブラ

2026.04.10

【Railway】ひたすら安く個人開発サービスを運用する計画

サーバー

2026.04.06

たびのきろく

イベント

2026.02.23

【Railway】MySQLサービスをコスト抑えて運用する

運用

2026.01.19

あけましておめでとうございますmm DjangoアプリをRailwayに移行する。

運用

2026.01.06

効率の良い AI駆動開発について考える

AI・Bot・algorithm

2025.11.09

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、主に、ゲーム制作中心に港区六本木界隈で活動中。

FOLLOW US