見出し画像

Rust100本ノックより: ライブラリの作り方(準備編)

用語的にはライブラリクレートですね。プロンプトを出して文字列を入力させ、数値として取得させようというコードはNo.5あたりからちょこちょこ使っているため、コードに何度も含めておくのはしのびないですね。ということで良くあるのが「ライブラリ」という形で分離しておいて、必要なときに取り込むというものです。

ここでは、「文字列を入力させ、数値を返す」コードをライブラリに追い出して、差し替えてみたいと思います。

今回のポイントは既にバイナリクレートを作ってる状況においてライブラリを追加したいというケースで、後付けでライブラリにコードを分離させたいと言うときに役立つかと思いますよ。

やり方の基本​

やり方自体はRustの公式(の翻訳)にも記載があります。

公式にある以上は、いろんな方法の中で基本のやり方として覚えて損の無い話なのでしょう。

ライブラリ(クレート)の作成

これ自体は特に問題ありません、Cargo.tomlファイルのある(PROJECT無いの)トップディレクトリにおいて、重ねる気分でcargoしちゃえばOKです。

$ cargo new --lib mylib
Created library `mylib` package

処理対象として追加していく

トップにあるCargo.toml(本来のプロジェクト側)に対して、以下の2つを設定していきます。

- [workspace]セクションの追加による内部プロジェクトの認識処理
- 依存関係(dependenciesセクション)で内部プロジェクトを依存関係として認識させる
[package]
name = "knock100"
version = "0.1.0"

...(中略)...

[workspace]
members = [
   "mylib"
]

なお、ワークスペースの追加をしなくても次にある依存関係を書けば使うこと自体は問題ありません。

というか、公式ドキュメントを見ると、ワークスペース設定してないのにCargo.lockファイルはトップのものを共有してるっぽいですがなにか違いが起きてるんでしょうか?

あとは依存関係です。もともと[dependencies]セクションがあるので、そこに追加します。

[dependencies]
mylib = { path = "./mylib" }

これで認識できるようになったはずです。次は実際にライブラリにコードを移して、認識できるようにする部分ですね。

この記事が気に入ったらサポートをしてみませんか?