BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース 非公開クレート用に代替レジスタを導入したRust 1.34

非公開クレート用に代替レジスタを導入したRust 1.34

原文(投稿日:2019/04/18)へのリンク

Cargo 1.34の最も大きな特徴は、 代替カーゴレジストリの使用をサポートしたことだ。これは企業環境において、ゲームチェンジャになる可能性がある。さらに今回のリリースでは、ドキュメンテーションテストで"?"がサポートされ、標準ライブラリにいくつかの改良が加えられている。

これまでは、プロプライエタリあるいはクローズドなソースコードを使用している開発者にとっては、Cargo.tomlファイル内のgitあるいはpath句を通じて依存関係を指定する、というのが唯一の選択肢だった。ほとんどの場合はこれでうまくいくのだが、バージョン管理をサポートしていない、という大きな欠点があり、常に最新バージョンを使用しなければならなかった。Rust 1.34では、Cargoが代替レジストリをサポートするようになった。これはcargo/config内で指定するもので、crates.ioとも共存する。

[registries]
my-registry = { index = "https://my-intranet:8080/git/index" }

プライベートレジストリを作成すれば、依存関係の宣言にregistryキーを使用することで、cargo.ioではなく、そのプライベートレジストリから依存関係を取得できるようになる。

[dependencies]
other-crate = { version = "1.0", registry = "my-registry" }

最小限構成のカーゴレジストリは、 インデックスを格納したローカルgitリポジトリと、cargo packageを使って作成された.crateファイルを圧縮してホストする、HTTP/HTTPSサーバで実装することができる。このインデックスは、config.jsonファイルと、利用可能な各クレートにひとつのファイルで構成される。config.jsonファイルでは、利用可能なクレートを取得するインデックス内の場所と、利用可能であれば公開用APIエンドポイントを指定する。パッケージファイルには基本的に、そのクレートで利用可能なパッケージバージョンのリストが含まれている。

代替レジストリでも、cargo publishをサポートすることができる。ただしこの場合は、単純なgitリポジトリでは不十分で、 config.jsonファイル経由で参照されるWeb APIを提供する必要がある。このAPIは、publish (/api/v1/crates/new), yank (/api/v1/crates/{crate_name}/{version}/yank), unyank (/api/v1/crates/{crate_name}/{version}/unyank)など、さまざまな操作をサポートするが、ただし現時点では、そのようなAPIを汎用的かつ再利用可能に実装したものは存在しない。

代替レジストリにクレートを公開するには、最初にcargo loginコマンドを使用して、認証トークンを?/.cargo/credentialsに保存する必要がある。これを行うことで、 cargo publish --registry=...が使用可能になる。

言語レベルでは、前述のように、ドキュメンテーションテスト中の?の使用がサポートされるようになった。 ドキュメンテーションテストとは、ドキュメントに含まれている例が、rustdocによって一種の単体テストとして使用可能になるという、Rustの便利な機能である。現時点では、fn main()を含まない場合には、?を使用することはできない。

標準ライブラリにも多くの変更が加えられた。TryFromTryIntoの変換特性は、不確実な(fallible)変換のサポートを追加することで、安定性が向上している。例えばTryFromでは、i64からi32への数値変換が可能かどうかを確認することができる。

let big_number = ...i64;
let try_smaller_number = i32::try_from(big_number);
assert!(try_smaller_number.is_err());

Rust 1.34標準ライブラリには、この他にも安定化が図られており、リリースノートで詳細を確認することができる。

今後の計画としては、Steve Klabnik氏がHacker Newsスレッドで、 async/awaitのサポートが今後数リリース内に登場することを発表している。その他にもconstジェネリクスや総称関連型特殊化など導入が期待される。

この記事に星をつける

おすすめ度
スタイル

BT