5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ユニークビジョン株式会社Advent Calendar 2023

Day 12

cargoのRegistryについて

Last updated at Posted at 2023-12-11

CargoのRegistryについて解説します。

Registryとは?

Cargo,crateの文脈で言うとRegistryはcrateを配信するAPIです。
有名、というか公式のcrates.io以外の知名度はないに等しいので実質crates.ioだと思ってくれていいです。
Registryの役割はCargo向けにcrateをダウンロードできるようにしたり、アップロードできたり、所有者を変えたり、crateの情報を取得で来たりします。

crateのダウンロード方法

CargoがRegistryからcrateを取得する手段は以下の通りです。

  1. CargoがRegistryからindexを取得する
  2. indexの情報を基にcrateファイルをダウンロードする

index

indexには、crateの情報が保存されています。
決められたディレクトリ構成に則って配置されたjson"もどき"のファイルを保存してあります(内部はjsonのobjectを配列にせずに結合した形のファイル)。
中身の情報はほとんどCargo.tomlと同じです。
違いは、

  • yanked (取り下げられているか)
  • checksum (.crateファイルのSHA256 checksum)
    くらいでしょう。
    またindexにはcrate情報のほかにconfig.jsonがあります。
    ここにはレポジトリのdl先やapiのURLが載っています。

index取得には二種類の方式があります。

git

gitはその名の通りgitでindexを取得します。
indexの全ファイル(!)が入ったレポジトリからclone,pullして取得します。
よって"遅い"です!
crates.ioの場合 https://github.com/rust-lang/crates.io-index にあります。
ディレクトリ構成としては基本的には
{1,2文字目}/{3,4文字目}/{crate名}
のファイルが置いてあります。例えばserdeなら https://github.com/rust-lang/crates.io-index/blob/master/se/rd/serde です。
4文字未満のcrateにはまたルールがあるのですが割愛…。

sparse

Rust 1.68で安定化🎉、1.70からデフォルト🎉🎉になった方式です。
必要なindexだけをHttpで取得してくれます。
パスはgitと同じです。
crates.ioからserdeを取得するならば https://index.crates.io/se/rd/serde でできます。

余談ですが、private registryのURLを設定する際にsparse+https:// のような形にしないといけないですが、あくまで設定する際の表記であって、内部ではただのhttpsから始まるURLでアクセスしてくれます。(勘違いしてた…)

crateのダウンロード

こちらは単純に指定された名前でダウンロードされるだけです。

indexに配置するconfig.jsonのdlのkeyのURLから取得します。
基本的には{dlの値}/{crate}/{version}/download (serdeならhttps://crates.io/api/v1/crates/serde/1.0.193/download)
でダウンロードできますが、下の/{crate}以下はdlにpathを指定することで変更することもできます。

Web API

config.json"api"のキーで保存されたurlがあるとそこに対してcargoがapiを実行できるようになります。

例えば以下のような機能が生えています。

  • publish: Registryにアップロードする
  • yank: crateのバージョンを取り下げ(yank)することができます。
  • search: crateを検索する
  • me: login用に誘導する

Authentication

認証です。crates.ioから引っ張てくるだけでは無用ですが、
自前でRegistryを立てる場合の認証を担います。
最近(1.74で)安定化されました!🎉
詳しくは別記事を作る(予定)です!

おわりに

ほとんどここを読めばわかるよ!
https://doc.rust-lang.org/cargo/reference/registries.html

5
2
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
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?