LoginSignup
2
3

More than 1 year has passed since last update.

Cargo Alternate Registryを使ってオレオレツールを誰かに使ってもらいやすくする

Last updated at Posted at 2023-04-16

CargoないしRustのパッケージレジストリといえばcrates.ioで、ここにpublishしておけばcargo install ...でインストール可能になるわけですが、Rustで書いたオレオレツールやClosedな環境でのみ使うツールを公開するわけにはいかないので、なにかいい方法はないかな〜と探してみて一番楽そうだった方法のメモ。

あくまで「Closedな環境」が前提。Publicにしたらやばい。

準備

「Cargo Alternate Registryを使って」とまるで自作したかのようないい振りだけど感謝しながら既成ツールを使う。

Cargoは使える状態だとして、CargoリポジトリのWikiに記載されていたcargo-http-registryを使う。

cargo install cargo-http-registry

やる

レジストリとして使うディレクトリへのパスを渡すだけ。

お試しで/tmpあたり作っておけば良さそう。パスが存在しなければ勝手に作ってくれる。

cargo-http-registry /tmp/registry

これでレジストリの準備はおわり。

レジストリを使うための設定

このレジストリをcargoコマンドが認識できるように~/.cargo/config.tomlに次を追記しておく。

ポートは環境によって変わりそう。cargo-http-registryを実行して生成されたconfig.jsonに記載されたポートに合わせる。

# ~/.cargo/config.toml
[registries]
my-registry = { index = "http://127.0.0.1:62159/git" }

fileプロトコルでも使えるみたいなので、ファイルサーバーにレジストリを設置しておくみたいな場合はそっちでも良さそう。

クレート公開側の設定

cargo publishで公開したいので、そのためのアレコレ。

自前レジストリにログインする

ログインする。

> cargo login --registry=my-registry                 
please paste the token found on http://127.0.0.1:62159/me below
<何でもいいので適当に入れておく>
       Login already logged in

トークンはこの際何でもいいので適当に入れる。Login already logged inになればOK。

適当なクレートを公開してみる

ハローワールドを公開してハローワールドしてみる。

cargo new my_crate_bin && cd my_crate_bin
cargo publish --registry=my-registry --allow-dirty

正しく公開できるとcargo-http-registryで指定したディレクトリ直下にmy_crate_bin-0.1.0.crateが爆誕しているはず。

公開方法としてはコレで良いですが、公開するであろうパッケージのCargo.tomlに次を追記しておくと、crates.ioに万が一にでも上がってしなうことはなくなる(そもそもログインしていなければ上がることはないが)。

publish = ["my-registry"]

cargo-http-registryのREADMEで初めて知った。

オレオレクレートを使ってみる

自分以外の誰かが使うことを想定して。

もちろん利用者も~/.cargo/config.tomlに自前レジストリを使うための設定が必要になる。

また、(環境変数でもコントロール可能なので必須ではないが)HTTPプロトコルでアクセスするならnet.git-fetch-with-clitrueにしておく。

# ~/.cargo/config.toml
[registries]
my-registry = { index = "http://127.0.0.1:62159/git" }

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

これで利用者側の準備おわり。インストールしてみる。

cargo install my_crate_bin --registry=my-registry

# net.git-fetch-with-cliの設定を書かないままHTTPでやり取りするならこっち
CARGO_NET_GIT_FETCH_WITH_CLI=true cargo install my_crate_bin --registry=my-registry

インストールできたはず。

> my_crate_bin
Hello, world!

OK。もういらんので消す。

> cargo uninstall my_crate_bin                     
    Removing /Users/sk/.cargo/bin/my_crate_bin

おわりに

Cargo Wikiに記載されている代替ツールはいくつか検討してみたが、(自作するモチベーションはなくて)コレが一番自分のユースケースにあってそうだった。

(Crate?Package?わからん)

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3