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

Archives Details

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

Rust

2025.03.27

どもです。

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

参考書など書籍を数えるところ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

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

Rustで創る MOS 6502 CPU その3 (Cursorと共に)

2025.02.24

Rust-SDL2 examplesをすべて試す

2024.09.01

CATEGORY LIST

LATEST NEWS

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

Rust

2025.04.29

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

Rust

2025.04.14

う、動くぞ! Mac mini Apple M4 Pro で PS3ソフトを遊ぶ。RPCS3 Mac版を起動

Game

2025.04.12

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

Rust

2025.04.10

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

Rust

2025.04.08

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

Rust

2025.04.07

時代を先取りし過ぎた ニューラルネットワークが導入されたゲーム『がんばれ森川君2号』を令和に嗜んでみる。

Game

2025.04.06

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

Rust

2025.04.05

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

Rust

2025.04.04

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

Rust

2025.03.27

Rustで創る MOS 6502 CPU その3 (Cursorと共に)

Rust

2025.02.24

あけましておめでとうございます(24日経過)

イベント

2025.01.24

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

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

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

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

FOLLOW US