目次
第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 コンテナーイメージの実行