本題に入る前に Rust についておさらいです。

    • C/C++ と同等の実行速度を持つ、C/C++ でしかできなかった領域をサポートする比較的新しい言語

 

    • 言語特性で実行時安全性が担保されている

 

    非常に人気がある

一方で良いことばかりではありません。

    • 比較的新しいため利用実績がまだあまりなく、エコシステムも成長しきっていない

 

    • 実行時安全性を担保するために面倒くさい・難しいコーディングや考え方が強いられる、また実行時安全性は絶対ではない

 

    人気はあるが実際に使用している人は少ない

今回は上記の「エコシステム」という部分にフォーカスした記事です。

crates.io とは

crates.io は Rust のパッケージリポジトリです。最近の言語はパッケージ、ライブラリ、モジュールと呼び方は違えど、それらを一元管理するリポジトリが存在し、簡単にパッケージを導入したり依存関係を解決したりできるのが当たり前になってきています。

以下にざっとパッケージリポジトリを洗い出してみました。ここから欲しい機能のパッケージを探し出してプロジェクトに導入するわけですね。

    • Node.js: npm

Ruby: RubyGems

Perl: CPAN

Python: PyPI

Java: Maven

Rust: crates.io

Haskell: Hackage

これらリポジトリにパッケージを登録することはそれほど難しくもないですし、費用がかかるということもありません。今回は Rust のパッケージを crates.io に登録した際の手順や注意点を紹介していきます。

アカウント登録

crates.io はアカウントを作成しないとパッケージを登録できません。また、アカウントは GitHub の SSO オンリーです。

スクリーンショット 2023-12-03 15.40.05.png

Rust のパッケージを登録する開発者なら、当然 GitHub のアカウントぐらい持ってますよね、という割り切りは好感が持てます。

ダッシュボード

ダッシュボードでは自分が登録したパッケージのダウンロード数が見れます。

スクリーンショット 2023-12-03 15.42.01.png

ダウンロード数が伸びるとモチベーションが上がりますね、きっと。登録したクレートをクリックするともっと詳細な情報が表示されます。

スクリーンショット 2023-12-03 16.24.05.png

API トークン

パッケージの登録はブラウザから行うのではなく cargo コマンドから行います。そのために API トークンをブラウザから発行しておき、cargo コマンドでそれを使用します。

スクリーンショット 2023-12-03 15.46.56.png

同じトークンは再取得できないので、大切に保管しておきましょう。

cargo login

コマンドでログインします。この際に先程の API トークンの入力が求められます。

cargo publish

手元にある Cargo プロジェクトを crates.io に登録します。

注意点

crates.io にパッケージを登録してみて気がついた点です。

良い名前は取られている

crates.io 全体でネームスペースが単一なので、同じ名前のパッケージは後から登録できません。そして、登録したパッケージは削除できないため、既に使用されているパッケージ名が後から空くということもありません。

逆を言えば、自分で登録したパッケージ名は変更することも消してなかったことにすることもできない、ということになります。

バージョニングに注意

公開するパッケージはセマンティックバージョニングに準拠している必要があります1。

私は先急いでしまい 1.0.0 を公開してしまいましたが、しばらくは 0.x.x で公開を続けるべきでした。インターフェイスを変えたくなっています。

スクリーンショット 2023-12-03 16.11.46.png

過去に公開したバージョンは消せない

過去に公開したバージョンは、非公開にこそできるものの、なかったことにはできません。取り返しが付かないため、よく考えて公開するようにしましょう。

まとめ

Cargo を使用して crates.io に登録することによって、他の Rust プログラマに簡単に利用してもらえ、Rust コミュニティのエコシステムにも貢献できるため、ぜひ皆さんにも積極的にパッケージを公開してもらいたいのですが、登録すると取り消せなかったり変更できなかったりするため、公開前は十分に注意してから行ってください。

Publishing a new version of an existing crate ↩

广告
将在 10 秒后关闭
bannerAds