Rustプロジェクト、crates.ioでの「非正規ダウンロード」のサポートを2023年11月20日に終了:URLでハイフンとアンダースコアを区別せずに使える機能が無効に
Rustプロジェクトは、「crates.io」の非正規ダウンロード機能のサポートを2023年11月20日に終了する。
Rustプロジェクトは2023年10月27日(米国時間、以下同)、「crates.io」における非正規ダウンロード機能のサポートを2023年11月20日に終了すると発表した。
crates.ioは、Rustコミュニティーのためのクレート(Rustのライブラリ)のレジストリ。Rustプロジェクトで利用されるクレートの多くはcrates.ioで公開されている。
非正規ダウンロードは、クレートが公開されているURLにハイフンやアンダースコアが含まれる場合に、ハイフンの代わりにアンダースコアを、あるいはアンダースコアの代わりにハイフンを指定しても、そのクレートをダウンロードできる機能。
serde_deriveクレートは「https://crates.io/api/v1/crates/serde_derive/1.0.189/download」で公開されている。アンダースコアの代わりにハイフンを使用し、クレート名の一部に大文字を使用した「https://crates.io/api/v1/crates/SERDE-derive/1.0.189/download」でも、ダウンロードできる。
なお、crates.ioでは、このようにserde_deriveクレートが既に存在する場合、serde-deriveクレートを公開することはできない。
非正規ダウンロードのサポートを打ち切る理由
crates.ioチームは、クレートのダウンロードの信頼性とパフォーマンスを高めていく計画だが、非正規ダウンロードのリクエストをサポートしていると、この計画に支障が出る。crates.ioサーバが全てのダウンロードリクエストに対してデータベース検索を実行し、正規のクレート名を見つける必要があるためだ。正規のクレート名は、ダウンロードURLの構築に使用され、クライアントはそのURLにHTTPリダイレクトされる。
crates.ioチームはパフォーマンス上の懸念に対処するため、少し前にキャッシュレイヤーを導入した。だが、全てのダウンロードリクエストがバックエンドサーバを経由することが依然として問題となっており、crates.ioの利用が現在のペースで増加すれば、この問題は緩和しそうもない。
この問題に対処していく中で、非正規ダウンロードをサポートしなければならないことから、ダウンロードリクエストのためにCDN(コンテンツデリバリーネットワーク)を直接使用することもできない。そこでcrates.ioチームは、非正規ダウンロードリクエストのサポートを終了することを決めた。これにより、パフォーマンスと信頼性が大幅に向上すると見込んでいる。
非正規ダウンロードのサポート終了の影響は
crates.ioチームによると、RustソフトウェアプロジェクトのCUIビルドツールである「cargo」は、常にパッケージインデックス内の正規のクレート名を使用し、対応するダウンロードURLを構築する。このため、crates.ioが非正規ダウンロードのサポートを打ち切っても、cargoは以前と全く同じように動作する。
またcrates.ioのリクエストログから、以下のユーザーエージェントが非正規ダウンロードのサポートに依存していることが分かった。
- cargo-binstall/1.1.2
- Faraday v0.17.6
- Go-http-client/2.0
- GNU Guile
- python-requests/2.31.0
「cargo-binstall」は、クレートのバイナリをインストールするツールだ。メンテナーは今回の変更を既に認識しており、cargo-binstallの最近のバージョンがこの変更の影響を受けないことを確認している。
crates.ioチームは、非正規ダウンロードに依存しているスクリプトでは、パッケージインデックス、データベースダンプ、またはcrates.io APIから得られる正規名を使用するように調整することを推奨している。どのデータソースが最適か分からない場合は、crates.ioデータアクセスページを参照することを推奨している。
サポート終了までのスケジュールは次の通り。
- 2023年11月20日〜:非正規ダウンロードのサポートを停止し、移行エラーメッセージを返し、同機能の利用者に移行の必要性を知らせる
- 2023年12月18日〜:移行エラーメッセージの代わりに通常の404エラーを返す。これにより、crates.ioチームはデータベースクエリ(の一部)をなくせるようになる
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
RustでWebアプリの実装にチャレンジしてみよう【準備編】
Rustを使った「Webアプリ」の開発はどのようなものになるのでしょうか? 本連載のスタートとなる今回は、アプリ開発の下準備として、Rustの現状を踏まえた連載の目的を紹介し、Webアプリ開発環境の構築を通じて、Rustのプロジェクト管理の基本をおさらいします。C++からRustに移行して幸せになる人、そうならない人 その違いは?
C++はRustが登場する前から成熟度の高い言語だった。開発者はC++からRustに切り替える必要があるのだろうか。必ずしもそうとは限らない。C++とRustの品質、両言語の相違点と類似点を調べて、どちらのプログラミング言語を選ぶかを決めたい。Javaの”やらかし”でC#と人気逆転か 激変プログラミング言語人気ランキング
TIOBE Softwareが発表したプログラミング言語の人気ランキング「TIOBEインデックス」の2023月10月版では、JavaとC#のレーティングが1.2ポイントのわずかな差に縮まっている。