📑

著者が著書「実践幽門WebAssembly」をレビューする

2023/11/05に公開

10月27日に「技術の泉シリーズ」より著書「実践入門WebAssembly」が発売されました.「技術の泉シリーズ」は技術同人誌をベースに取り扱っているブランドで,「実践入門WebAssembly」も技術書典14にて配布した「WebAssemblyでできること」をベースに内容の見直しと修正を行なったものとなっています.

そんな著書ですが「著者が著書をレビューしてみたら面白いのではないか」という思いつきからレビュー記事を書くことにしました.

同人誌版との違い

同人誌版との違いは主に3つあります.

  1. 最高にかわいい表紙イラスト
  2. 章構成の見直し
  3. サンプルコードの確認方法の変更

最高にかわいい表紙イラスト

商業誌では漫画家のゆめつきママさん(@yumetsukimama)に最高にかわいい表紙イラストを描いていただいています.

https://twitter.com/yumetsukimama/status/1717751041436123333?s=20

同人誌版はタイトルだけの簡素な表紙だったのでその差は歴然です.

同人誌版の表紙

商業誌版の表紙

私の調べによると,WebAssembly関連の本でかわいいイラストを採用している本は他に存在しないため,文字通りこの本が「世界で一番かわいいWasm本」となります.これには海外(Wasmerのアカウント)からも反応があったりと,嬉しい限りです.

https://twitter.com/wasmerio/status/1717227170014154826?s=20

章構成の見直し

商業誌版を出すにあたって,細かい構成の変更を行なっています.

同人誌版ではRustからWasmをビルドする方法を紹介していましたが,商業誌版ではRustに加えてDartからWasmをビルドする方法を紹介しています.執筆時点でDartからのWasmビルドは安定版として組み込まれてはいませんが,Wasmのガベージコレクタの先行実装例ということで追加しました.

他にも,商業誌版は文言の修正など全体的に見直しを行なっています.

サンプルコードの確認方法の変更

同人誌版ではサンプルコードの実行確認として主にブラウザを使用していましたが,商業誌版では主にDenoを用いた実行確認に変更しています.

Denoを用いるように変更したのは,サンプルコードをより手軽に試してもらえるようにしたいという意図(htmlの用意とサーバーの用意が不要になる)からです.とはいえ同人誌版でも元々どちらでも動くコードをサンプルコードとして用意していたため,商業誌版でもDeno特有の実装(Deno APIなど)を用いたりはせず,ブラウザでもそのまま動かすことができるコードを用意しています.
※一部TSを用いているため,JSにトランスパイルする必要があります.

レビュー

「実践入門WebAssembly」の章立ては次のようになっています.

  1. WebAssemblyの概要
    1. WebAssembly Text Format
    2. 仮想マシン
    3. WebAssemblyの恩恵
  2. WebAssemblyの基本的な使い方
    1. 基本仕様
    2. ブラウザー上で実行する
    3. 文字列の扱い
    4. Single Instruction/Multiple Data
    5. まとめ
  3. コンパイル言語からビルドする
    1. Hello, Rust
    2. wasm-pack
    3. Hello, Dart
    4. まとめ
  4. WebAssemblyの活用
    1. ウェブでの活用
    2. ウェブ以外での活用
    3. まとめ

「実践入門WebAssembly」はWasmの詳解を目的とした本ではありません.「Wasmの名前を聞いたことある」人や,「興味を持っている」人をターゲットとしています.Wasmの詳解本はすでに良い本が出回ってます.本書はその詳解本やWasmのチュートリアル[1]に手を出す前に知っておきたい前提知識を提供することを目的として執筆しています.

各章の紹介

1章では.Wasmの仕組み(バイナリフォーマットであることやスタックVMであること)の紹介から,Wasmの生まれた背景,どういうメリットがあってどういうふうに活用されようとしているのかをざっくりと紹介しています.

2章では,wat(WebAssembly Text Format)を用いて簡単な処理を行うWasmモジュールを作成し,それをブラウザ上で実行する方法を紹介しています.また,JSからWasmの関数を呼び出すだけでなく,WasmからJSの関数を呼び出す方法,WasmからWasmの関数を呼び出す方法も一通り紹介し,これによりWasmを動かすためにどういったことを行わないといけないのか,ということを一通り知ることができます.
また,Wasm上で文字列を扱う方法についても言及しており,その延長線上でWasmのSIMDを用いた実装の紹介と,そのベンチマークについても言及しています.

3章では,Rustのビルドオプションを用いてWasmをビルドする方法と,wasm-packを用いてビルドする方法をそれぞれ紹介し,wasm-packがWasmを呼び出すためにどういったJSのコードを生成しているのかを紹介しています.
また,Dartからのビルドについても紹介しています.Dartを用いている理由としては,Wasmのガベージコレクタを用いる言語としてWasmのサポートを進めているためです.DartからWasmへビルドするのは現時点ではお手軽ではないですが,将来的にRustやC++以外の言語がWasmをサポートする可能性を示唆するものとして紹介しています.

4章では,Wasmを用いてできることを紹介として, Wasmにビルドしたjqをブラウザ上で実行する例や,Goのコード上からWasmをプラグインとして実行する方法,Wasmを実行ファイルとして扱えるWASIの紹介を簡単に行なっています.

総評

「実践入門WebAssembly」はWasmをどうやって扱うのか,何ができるのか,について一通りの回答を示した本となっています..紹介ページ[2]には76ページと記載がありますが,20ページは付録のサンプルコードのため,実際の本文は約50ページと少なく,非常に読みやすい本となっています.
「少しだけ興味ある」という人こそ手に取って読んでいただくことをお勧めします.読んでみて「物足りないよ」という場合は,参考文献に詳解本や各サイトへのリンクを掲載しているので,Wasmのを知るための入門書としてお勧めの1冊です.

脚注
  1. https://developer.mozilla.org/ja/docs/WebAssembly/Rust_to_Wasm ↩︎

  2. https://nextpublishing.jp/book/17203.html ↩︎

Discussion