Rustの公式パッケージレジストリとして、月間190億リクエストを処理する「crates.io」。Rustの採用が拡大する中、2026年1月には大型アップデートが実施され、セキュリティタブやSLOCメトリクスなどの新機能が追加されました。
「Rustを始めたいけど、ライブラリの探し方がわからない」「crates.ioの最新機能を把握しておきたい」という方に向けて、この記事ではcrates.ioの全体像と実践的な使い方を解説します。
この記事でわかること
- crates.ioの役割と基本的な使い方
- 2026年に追加された新機能(セキュリティタブ、Trusted Publishing強化など)
- npm・PyPIとの違いとcrates.ioならではの強み
crates.ioとは
crates.ioは、Rustプログラミング言語の公式パッケージレジストリです。Rustのパッケージは「クレート(crate)」と呼ばれ、crates.ioはこれらを公開・検索・ダウンロードするための中央プラットフォームとして機能します。
JavaScriptにおけるnpm、Pythonにおける PyPIに相当する存在です。
運営はcrates.ioチームが担当し、Rust Foundationが支援しています。ファイルホスティングはAmazon Web Servicesが、CDNはFastlyがそれぞれ提供しています。バックエンドはRustで構築されており、Webフレームワークにaxum、データベースアクセスにdieselを採用しています。
crates.ioが解決する課題
Rustでアプリケーションを開発する際、HTTP通信、JSON解析、非同期処理といった汎用的な機能を毎回ゼロから実装するのは非効率です。crates.ioを使えば、世界中の開発者が公開したライブラリを数秒でプロジェクトに導入できます。
また、バージョン管理と依存関係の解決をCargoが自動で処理するため、ライブラリ同士の互換性を手動で調整する必要がありません。
主要機能
1. クレートの検索と発見
crates.ioのWebサイトでは、キーワード・カテゴリ・ダウンロード数・更新日などでクレートを検索できます。各クレートのページには、README、バージョン履歴、依存関係ツリー、docs.rsの自動生成ドキュメントへのリンクが表示されます。
2. Cargoとのシームレスな連携
Rustのパッケージマネージャ「Cargo」と完全に統合されています。Cargo.toml に依存関係を記述するだけで、Cargoがcrates.ioからクレートをダウンロードしてビルドします。
[dependencies]
serde = "1.0"
tokio = { version = "1", features = ["full"] }
reqwest = { version = "0.12", features = ["json"] }
cargo add serde コマンドで対話的に追加することも可能です。
3. セキュリティタブ(2026年新機能)
2026年1月のアップデートで、クレートページに「Security」タブが追加されました。RustSecデータベースと連携し、以下の情報を表示します。
- アドバイザリ識別子(RUSTSEC-XXXX-XXXX)とCVE番号
- 脆弱性の概要と影響を受けるバージョン範囲
- CVSS重大度スコア
npmでは npm audit を実行して初めて脆弱性が判明しますが、crates.ioではクレートを選ぶ段階で確認できます。この機能はAlpha-Omegaプロジェクトの資金提供のもと、Rust Foundationを通じて実装されました。
4. Trusted Publishing
CI/CDパイプラインからAPIトークンなしでクレートを公開できる仕組みです。OIDCベースの認証フローを使い、長期間有効なAPIトークンの管理が不要になります。
2026年時点の対応状況は以下のとおりです。
| CI/CDサービス | 対応状況 |
|---|---|
| GitHub Actions | 対応済み |
| GitLab CI/CD | 2026年1月に追加(GitLab.com限定) |
さらに、クレート所有者はTrusted Publishingを強制モードに設定できます。有効にすると従来のAPIトークンによる公開が無効化され、Trusted Publishing経由でのみ新バージョンを公開できます。過去にセキュリティインシデントの原因となった pull_request_target と workflow_run トリガーもブロック対象になりました。
5. SLOCメトリクスとダウンロード統計
クレートページにソースコード行数(SLOC)が表示されるようになりました。依存関係として追加する前にクレートの規模を把握でき、不必要に巨大なライブラリの導入を避けられます。
ダウンロード統計も改善され、ボット・スクレイパー・ミラーからのリクエストがフィルタリングされるようになりました。実際の開発者による利用状況をより正確に反映します。
npm・PyPIとの比較
| 項目 | crates.io | npm | PyPI |
|---|---|---|---|
| 言語 | Rust | JavaScript | Python |
| パッケージマネージャ | Cargo | npm / yarn / pnpm | pip / uv |
| オプション機能(features) | あり | なし | extras で類似可能 |
| セキュリティ情報の表示 | 選定時(Securityタブ) | インストール後(npm audit) | 外部ツール依存 |
| Trusted Publishing | GitHub Actions / GitLab CI | なし | GitHub Actions / GitLab CI 等 |
| 名前空間 | フラット(早い者勝ち) | スコープあり(@org/pkg) | フラット |
crates.ioの特徴的な点は「features」の仕組みです。1つのクレートが複数のオプション機能を定義でき、利用者は必要な機能だけを有効化できます。これにより、不要なコードのコンパイルや依存関係の肥大化を防げます。
クレートの公開方法
自分のライブラリをcrates.ioに公開する手順は以下のとおりです。
- crates.ioにGitHubアカウントでログインし、APIトークンを取得する
cargo loginでトークンを設定するCargo.tomlにメタデータ(name, version, description, license)を記載するcargo publishを実行する
公開後はセマンティックバージョニング(semver)に基づいてバージョンを管理します。問題のあるバージョンは cargo yank で取り下げられます。yankedバージョンは新規利用者にはダウンロードされませんが、既存の Cargo.lock で固定されたプロジェクトには影響しません。
2026年のインフラ改善
フロントエンドの技術的な刷新も進行中です。従来のEmber.jsベースのUIから、Svelte + TypeScriptへの移行が実験的に開始されました。OpenAPI記述から型安全なAPIクライアントを自動生成する仕組みも導入されています。
インフラ面では、Sparse IndexがFastly CDN経由で配信されており、月間740TB・190億リクエストを処理しています。また、データベース内のGitHub OAuthトークンが暗号化されるようになり、セキュリティが強化されました。
まとめ
crates.ioはRustエコシステムの中核を担うパッケージレジストリです。2026年のアップデートでは、セキュリティタブによる脆弱性の可視化、Trusted Publishingの拡張と強制モード、SLOCメトリクスなど、開発者体験とセキュリティの両面で大きく進化しました。
Rustを使った開発では事実上必須のインフラであり、今後もSvelteフロントエンドへの移行など、継続的な改善が予定されています。