RustでWorkspace機能を用いて依存クレートを復数のプロジェクトで使い回す

公開:2020/09/30
更新:2020/10/13
1 min読了の目安(約900字TECH技術記事

はじめに

Rustで、復数のプロジェクトで依存しているクレートのバイナリサイズが大きい時、それを共通化して持たせることでディスクサイズを削減することができます。そのときに必要だった処理を備忘録程度に書き残します。

プロジェクト構成

具体的なプロジェクト構成はその場合、このようになります。

  • 親プロジェクトにも、子プロジェクトにもCargo.tomlがあることを確認してください。
  • それぞれの子プロジェクト、sketch_01 ~ sketch_03が共通の依存クレートを持ちます。
.
├── Cargo.lock
├── Cargo.toml
├── README.md
├── sketch_01  # プロジェクトその1
│   ├── Cargo.toml
│   └── src
├── sketch_02  # プロジェクトその2
│   ├── Cargo.toml
│   └── src
├── sketch_03   # プロジェクトその3
│   ├── Cargo.toml
│   └── src
└── src
     └── main.rs

Cargo.tomlの設定

親フォルダのCargoはこのように書きます。

./Cargo.toml
[workspace]

members = [
    "sketch_01",
    "sketch_02",
    "sketch_03",
]

それぞれのプロジェクトはこのようなCargo.tomlとなります。

sketch_01/Cargo.toml
[package]
name = "sketch_01"
version = "0.1.0"
authors = ["example <me@example.com>"]
edition = "2018"

[dependencies]
共通化したい依存クレート名 = "0.14.1" # バージョンは適当

cargoでの実行

このとき、親フォルダを開いた状態で、プロジェクトを指定して実行する場合に、以下のようなコマンドがあります。

cargo run --bin プロジェクト名 --release