📦

cargo-component 0.7.0へのアップグレード

2024/02/03に公開

cargo-componentから、コード生成にwit-bindgenを利用するようになりました。これに伴い、依存するライブラリーやソースコードを次のように変更する必要があります:

  • cargo-component-bindingsを依存するライブラリーから削除
  • wit-bindgenを依存するライブラリーに追加
  • cargo_component_bindings::generate!();を、ソースコードから削除
  • mod bindingsをソースコードに追加

一方、Cargo.tomlにあるcargo-component用の設定は変更する必要がありません。参照するワールド名や、ownershipの設定は、0.7.0へ移行後も有効です。

依存するライブラリーの変更

以下の2つが該当します。

  • cargo-component-bindingsを依存するライブラリーから削除
  • wit-bindgenを依存するライブラリーに追加

どちらもコマンドで更新できます:

% cargo component remove cargo-component-bindings
% cargo component add wit-bindgen

ソースコードの変更

これまでは、ソースコード中のマクロ呼び出しによってwitファイルからのコード生成が行われました。マクロはビルド次に処理されるため、生成されたコードはtarget/bindingsフォルダに出力されていました。0.7.0からは、cargo-componentコマンドが、ビルドの前処理としてコード生成を行います。そのため、マクロ呼び出しは不要となりました。

また、生成されたコードはsrc/bindings.rsに出力されます。生成されたコードはビルド時には他のソースコードと同様に扱われるため、ビルド対象となるように、モジュールツリーに登録する必要があります。

上記の修正をlib.rsに行うと、次のようになります:

-cargo_component_bindings::generate!();
+mod bindings;

Discussion