目次
第1章 プログラミング言語Rustの準備
1.1 Hello, world!
- 1.1.1 変数と束縛
 - 1.1.2 関数定義と呼び出し
 - 1.1.3 プリミティブなデータ型
 - 1.1.4 構造体
 - 1.1.5 所有権と参照
 - 1.1.6 変更可能な参照
 - 1.1.7 関連関数とメソッド
 - 1.1.8 トレイト:Rustにおけるインターフェース定義
 
1.2 エラーハンドリング
- 1.2.1 文字列に関する2つの型
 - 1.2.2 HelloWorldオブジェクトから文字列への変換
 - 1.2.3 文字列からHelloWorldオブジェクトの復元
 - 1.2.4 Option型のエラーハンドリング
 - 1.2.5 Result型のエラーハンドリング
 
1.3 ライブラリーの利用
- 1.3.1 クレート
 - 1.3.2 Rustの名前空間
 - 1.3.3 use宣言
 - 1.3.4 ferris_says::sayの利用
 - 1.3.5 実行例
 
1.4 まとめ
第2章 WebAssemblyとは
2.1 WebAssemblyの特徴
- 2.1.1 ビルドターゲット
 - 2.1.2 信頼できないコードの実行
 - 2.1.3 WAT:Wasmのテキストフォーマット
 
2.2 Wasmの利用例
- 2.2.1 マルチプラットフォーム展開の例
 - 2.2.2 Wasmによるプラグイン開発の例
 
2.3 Wasmの標準化プロセス
2.4 仕様の進化とコンポーネントモデル
- 2.4.1 Wasmモジュール
 - 2.4.2 モジュールとインスタンス
 - 2.4.3 データ表現に関する仕様の不在
 - 2.4.4 コンポーネントモデル
 
2.5 まとめ
第3章 RustによるWebAssembly作成入門
3.1 RustによるWasmコンポーネント作成の流れ
3.2 cargo-componentのインストール
3.3 Hello, world!
- 3.3.1 cargo componentの利用
 - 3.3.2 ライブラリークレートの利用
 
3.4 grepコマンドクローンを作ろう
- 3.4.1 プロジェクトフォルダーの作成
 - 3.4.2 依存関係の追加
 - 3.4.3 コマンドライン引数の宣言
 - 3.4.4 ファイルの読み込み
 - 3.4.5 サンドボックス化された実行環境
 - 3.4.6 指定したパターンにマッチする行のみ出力
 
3.5 まとめ
第4章 他のプログラムから利用されるWasmコンポーネント
4.1 ライブラリーコンポーネント向けのプロジェクト作成
4.2 WIT入門
- 4.2.1 WITによるインターフェース定義
 - 4.2.2 ワールド:コンポーネントの定義
 - 4.2.3 パッケージ名
 
4.3 ワールドの実装
- 4.3.1 greetableインターフェースの実装
 
4.4 Wasmを実行するプログラムの作成
- 4.4.1 プロジェクトの作成
 - 4.4.2 ライブラリーコンポーネントの利用
 
4.5 ライブラリーコンポーネントの利用(コード生成編)
- 4.5.1 WITからのコード生成
 - 4.5.2 インスタンスとラッパーオブジェクトの作成
 - 4.5.3 生成されたラッパーオブジェクトの利用
 - 4.5.4 実行例
 
4.6 エクスポートについて
4.7 まとめ
第5章 依存関係の解決と合成
5.1 import:依存関係の記述
- 5.1.1 ワールドの追加
 - 5.1.2 greetプロジェクトが実装するワールドの明示
 - 5.1.3 hello-worldワールドを実装するプロジェクトの作成
 - 5.1.4 hello-world-implを実装
 
5.2 Wasmコンポーネントの合成
- 5.2.1 wacコマンドのインストール
 - 5.2.2 コンポーネントの合成
 
5.3 ホストコードによる実装の提供
- 5.3.1 バイナリークレートの作成
 - 5.3.2 依存するインターフェースの実装
 - 5.3.3 コンポーネントのインスタンス化
 - 5.3.4 インスタンスの提供する関数の呼び出し
 - 5.3.5 実行例
 
5.4 WebAssembly System Interface(WASI)
5.5 wasi:cli/importsの実装
- 5.5.1 wasmtime-wasiを依存関係に追加
 - 5.5.2 Greet構造体にメンバー変数を追加
 - 5.5.3 WasiViewトレイトを実装
 - 5.5.4 WASIの実装をLinkerオブジェクトに追加
 - 5.5.5 実行結果
 - 5.5.6 CLIアプリの実行
 
5.6 まとめ
第6章 コマンドラインインターフェースアプリケーションの作成
6.1 グリッチアート
6.2 本章で作成するCLIアプリ
6.3 コンポーネントレジストリーへ登録
- 6.3.1 Wargとは
 - 6.3.2 wa.devへのユーザー登録
 - 6.3.3 Wargクライアントのインストール
 - 6.3.4 wa.devへCLIから接続する
 
6.4 WITによるインターフェース定義
- 6.4.1 witファイルを保持するフォルダーの作成
 - 6.4.2 WITにおけるユーザー定義型
 
6.5 WITパッケージをコンポーネントレジストリーに登録
6.6 インターフェースを実装
- 6.6.1 Rustプロジェクトの作成
 - 6.6.2 インターフェースの実装
 - 6.6.3 Wasmパッケージの登録
 
6.7 CLIアプリの改変
- 6.7.1 ワールドの指定
 - 6.7.2 必要なクレートを依存関係に追加
 - 6.7.3 プログラムの変更
 - 6.7.4 Wasmコンポーネントとしてビルド
 - 6.7.5 Wasmコンポーネントの合成
 - 6.7.6 実行結果
 
6.8 補足として
- 6.8.1 WITのデータ型について
 - 6.8.2 パッケージのバージョン管理
 
6.9 まとめ
第7章 サーバーアプリケーションの開発
7.1 本章で作成するサーバーアプリケーション
7.2 Hello, wasi:http/proxy
- 7.2.1 プロジェクトの作成
 - 7.2.2 実装
 - 7.2.3 Webブラウザーを使った動作確認
 - 7.2.4 リソース
 
7.3 Spinの導入と利用
- 7.3.1 Spinの導入
 - 7.3.2 Spin向けのプロジェクト作成
 - 7.3.3 hello_wasi_http.wasmの組み込み
 - 7.3.4 アプリの起動
 
7.4 echo APIの作成
- 7.4.1 コンポーネントの追加
 - 7.4.2 spin.tomlの編集
 - 7.4.3 echo APIの実装
 - 7.4.4 アプリのビルドと起動
 - 7.4.5 curlコマンドを使った動作確認
 
7.5 グリッチアートを作るAPIの作成
- 7.5.1 プロジェクトフォルダーの作成
 - 7.5.2 Web APIの実装
 - 7.5.3 コンポーネントの合成
 - 7.5.4 Spinアプリへの組み込み
 
7.6 まとめ
第8章 Wasmコンポーネントとコンテナーランタイム
8.1 Wasmコンポーネントを動かすコンテナーイメージ
8.2 Docker Desktopのインストール
- 8.2.1 初期設定
 - 8.2.2 起動確認
 - 8.2.3 Wasmコンポーネントの有効化
 
8.3 Wasmコンポーネントを動かすコンテナーイメージの作成
- 8.3.1 Dockerfileの作成
 - 8.3.2 コンテナーイメージの作成
 - 8.3.3 コンテナーイメージの実行
 
8.4 Spinアプリを動かすコンテナーイメージの作成
- 8.4.1 Spinアプリの整理
 - 8.4.2 Dockerfileの作成
 - 8.4.3 コンテナーイメージの作成
 - 8.4.4 コンテナーイメージの実行