Rustライブラリの作成・管理

Rustで機能実装するとファイル単位でmoduleとなり、pubスコープを付けるだけで再利用可能になります。
基本的には、モジュールの集合体(単なるプロジェクトのファイル群)が自然にライブラリになります。

プロジェクト新規作成時に、cargo new --libを使うとライブラリ向けのcrate(Rustパッケージ)になります。

gitでライブラリcrateを配布する

ライブラリcrateを利用する方法は、自作ライブラリであってもCargo.tomlのdependenciesに指定するだけです。

crate.ioに公開したcrateについては名前指定のみでインストール可能ですが、そのほかに任意のgitリポジトリを指定するオプションがあります。

[dependencies]
some-private-crate = { git = "ssh://[email protected]/some-private-crate.git" }

cargo buildcargo runを実行すると、gitリポジトリからcrateを取得する挙動になります。ライブラリを更新したい場合はcargo updateです。
さらに詳細なオプションについては、 Cargo Bookに解説があります。

また、以下の設定をビルドするクライアントの~/.cargo/configに記述しておくと、gitコマンドを利用する挙動となりssh認証なども可能です。

[net]
git-fetch-with-cli = true

これにより、単に認証つきのプライベートgitリポジトリに置くだけで、非公開のライブラリを配布・管理できます。

pathオプション

クレートの取得対象はgitだけでなく、ローカルディレクトリをpathオプションで指定することも可能です。

[dependencies]
some-private-crate = { path = "../some-private-crate/" }

開発初期段階など、頻繁に更新する必要がある段階では便利です。

monorepo

Cargoには ワークスペースという機能があり、サブディレクトリに複数のcrateを持つようなmonorepo構成を標準で手軽に作成できます。

ライブラリをgitリポジトリで配布する場合にも、crate名を適切に指定するだけでワークスペース内の該当ライブラリを名前解決してインストールできます。

単機能に近いライブラリなども、monorepo化しておけば迷うことなく管理できます。

中馬崇尋
Chuma Takahiro