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 build
やcargo 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