crates.io Trusted Publishingが2025年7月11日にアナウンスされ、OpenID Connect (OIDC)を使ってトークンレスでCIからRustパッケージを公開できるようになりました。
今回は、crates.io Trusted Publishingを使ってGitHub ActionsからトークンレスでRustパッケージを公開するメリットと手順を解説します。
はじめに
Trusted Publishingにする動機やメリットについては、NuGetのTrusted Publishingを紹介する記事で解説しています。 creates.ioも従来はPATを用いる必要があったのですが、Trusted Publishingを使うことでOIDCを利用したトークンレスでのパッケージ公開が可能です。 簡単な設定で十分な効果を得られるので、ぜひ利用していきましょう。
設定方法
公式ドキュメントに沿って設定していきましょう。 crates.ioとGitHub Actionsそれぞれで設定します。
crates.ioでTrusted Publishingを設定
crates.ioにログインし、設定したいCrateのページを開きます。 SettingsタブにTrusted PublishingセクションがあるのでAddをクリックします。

Trusted Publishingの設定画面が表示されるので、以下を入力Saveをクリックします。ワークフローファイル名を入力すると、リポジトリにワークフローファイルが存在するかチェックしてくれて便利です
- Publisher: GitHubを選択 (GitLandも選択可能)
- Repository owner: 自動入力される
- Repository name: GitHubリポジトリ名
- Workflow filename: パッケージの公開処理をするワークフローファイル名
- Environment name: GitHub Environmentを使っているなら指定

ちなみにcrates.ioへの公開をTrusted Publishingに限定できるので、動作確認できたらチェックを付けておくと個人PATを使う事故を防げます。

GitHub Actionsワークフローの設定
GitHub Actionsのワークフローを設定します。コツは3つです。
- ワークフローファイル名はcrates.ioで指定したWorkflow filenameと一致させる
rust-lang/crates-io-auth-actionアクションを実行するジョブにid-token: writeの権限を付与する- rust-lang/crates-io-auth-actionアクションを使ってcrates.ioの短命トークン取得する
サンプルのワークフローrelease.yamlは次の通りです。git tagでバージョンタグをプッシュしたときにパッケージを公開します。
name: Publish crates on: push: tags: - 'v*.*.*' jobs: publish: permissions: contents: read id-token: write # OIDCトークン発行のために必要 runs-on: ubuntu-24.04 steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5. # ビルド - run: cargo build --verbose # cratesの短命トークンを取得 - uses: rust-lang/crates-io-auth-action@b7e9a28eded4986ec6b1fa40eeee8f8f165559ec # v1.0.3 id: auth # 取得した短命トークンを使ってcratesを公開 - run: cargo publish --manifest-path csbindgen/Cargo.toml env: CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}
タグをプッシュすれば、GitHub ActionsがトリガーされてOIDCを使ってcrates.ioのパッケージが公開/更新されます。
まとめ
他のパッケージサービスと同様に、crates.ioもTrusted Publishingが使えます。トークンレスでパッケージ公開できるので、ぜひ使っていきましょう。