『Rustで学ぶWebAssembly』
https://gyazo.com/0ae031adb414edd1ecd6807b35288c09
2024/10/10
■■■第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.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 コンテナーイメージの実行
■■8.5 まとめ