![見出し画像](https://assets.st-note.com/production/uploads/images/108444181/rectangle_large_type_2_c8634c78e9217061270a00a1e9114556.png?width=1200)
【完全保存版】AstarのWASMコントラクトのCargo.tomlを学ぼう
本日は、Cargo.tomlファイルについて学んでいきたいと思います。
![](https://assets.st-note.com/img/1686962485244-zIcRHwwmLB.png?width=1200)
ちなみに、「Cargo.toml」とは、パッケージを管理するツールである「Cargo」の設定を行うためのファイルです。
1 [dependencies]について(依存関係の設定)
1 [dependencies]について
ここで、依存関係の設定を行います。
ここで、使いたい他のRustクレートを指定します。
![](https://assets.st-note.com/img/1686955307249-Ucgd6YiRI0.png?width=1200)
2 使用する名前について
下のような場合、右で規定したパッケージを「scale」という名前で使用するという指定になります。
![](https://assets.st-note.com/img/1686955468857-wBsp4GirEe.png?width=1200)
3 default-featuresについて
これはデフォルトのフィーチャーについて規定し、基本的には、falseになります。
![](https://assets.st-note.com/img/1686955573680-XYYQ1q5fuK.png?width=1200)
これは、不要な依存関係や機能を含めないためです。
4 featuresについて
ここでは
![](https://assets.st-note.com/img/1686962478710-qRTAUpBMPq.png?width=1200)
「derive」フィーチャーを有効にしています。
![](https://assets.st-note.com/img/1686962306268-IY7CQ8dN5z.png?width=1200)
2 [lib]について(ライブラリクレートの設定)
6月21日追記
[lib]について、Astarのコアメンバーから、path以外は書く必要がない旨を教えてもらいました。
そのため、この章は参考程度でお願いします。
1 [lib]について
ここでは、ライブラリクレートの設定を行っています。
なお、「クレート(crate)」とはコードをパッケージ化する基本単位です。
![](https://assets.st-note.com/img/1686953797766-3BAk66nh0a.png?width=1200)
そして、他から使われる、再利用可能な機能を提供しているのが、ライブラリクレートです。
2 pathについて
どのファイルを使うのかを規定しています。
![](https://assets.st-note.com/img/1686954051247-yO4Qw3P9CQ.png?width=1200)
3 crate-typeについて
これは、作られるバイナリの種類を示しています。
![](https://assets.st-note.com/img/1686954133694-yBkpaFxuGH.png?width=1200)
4 cdylibについて
ここでは、C互換のダイナミックライブラリを作ることを表しています。
![](https://assets.st-note.com/img/1686954234688-MCyVYf4ein.png?width=1200)
これは主に、他の言語から呼び出されるときに使用されます。
5 rlibについて
これは、Rustの静的ライブラリを作ります。
「cdylib」と異なり、「dy(動的)」が入っていませんね。
![](https://assets.st-note.com/img/1686954582210-82agIaSlJm.png?width=1200)
これは、他のRustライブラリから使用されるためのものです。
つまり、他のコントラクトから依存される場合には、これがないと動きません。
3 [features]について(機能の有効性の設定)
1 [features]について
これは、何の機能を有効にするのか(または、無効にするのか)を設定する場所です。
![](https://assets.st-note.com/img/1686949397435-r8I4Jg2deH.png?width=1200)
2 default = ["std"]について
これは、デフォルトとして、「std」という機能を有効にするということを表しています。
![](https://assets.st-note.com/img/1686949504996-LmQcGBMzO2.png?width=1200)
そして、「std」とは、Rustの標準(Standard)ライブラリを表します。
つまり、デフォルトでRustの標準ライブラリを使用することを示しています。
3 std = ["", "",]について
ここは、依存関係で有効化する「std」がどれかを表しています。
例えば、「ink」において、有効化する「std」は「ink/std」になります。
![](https://assets.st-note.com/img/1686949860980-WSC22Xwgb6.png?width=1200)
仮に、「openbrush/std」が書いていなければ、「openbrush」の「std」は有効になりません。
4 ink-as-dependencyについて
これは他のコントラクトから依存される場合のフラグになります。
これがあることで、他から依存されることを前提としたコンパイルの挙動を行います。
![](https://assets.st-note.com/img/1686950087067-LyysEpz9lX.png?width=1200)
このコントラクトが他から依存される場合は、その依存先のコントラクトで、下のように設定されます。
![](https://assets.st-note.com/img/1686950375631-4DQKrNWe44.png?width=1200)
4 [profile.dev]について(ビルト時の設定)
1 [profile.dev]について
こちらはビルドを行うときの設定についての場所です。
![](https://assets.st-note.com/img/1686950905170-u73gSAcsvA.png?width=1200)
2 codegen-unitsについて
これは、「codegen(コードの生成)」をいくつのCPUコアで行うかを定めます。
![](https://assets.st-note.com/img/1686951042997-v4zfvtwlRZ.png?width=1200)
多いほど、ビルドの時間は短縮されますが、最終的なバイナリのパフォーマンスは、必ずしも良い影響を与えません。
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊