トークン不要でnpmパッケージを公開できるtrusted publishingを試す
GitHubは、APIトークンを使わずにnpmに安全にパッケージを公開できる「trusted publishing」を発表しました。
実際に私が管理しているすべてのパッケージをtrusted publishingに移行したため、設定方法を紹介します。
trusted publishingとは?
npmのtrusted publishingとは、認証にOpenID Connect(OIDC)を使用して、GitHub ActionsまたはGitLab CI/CDのワークフローからnpmパッケージを安全に公開できる仕組みです。
trusted publishingを使うと、流出や再利用ができない、短期間のみ有効なワークフロー固有の認証情報でパッケージを公開できるため、長期間有効なトークンを管理する必要がなくなり、セキュリティが向上します。
また、trusted publishingを設定すると、指定したGitHub ActionsまたはGitLab CI/CDのワークフローからの公開のみを受け付けるようになります。
さらに、デフォルトでnpmのprovenance statementsが有効化されています。
provenance statementsは、npmパッケージの透明性を向上させられる機能で、日本語では「来歴証明」や「来歴情報」といったところでしょうか。
この機能を使うと、パッケージのnpmページにチェックマークのバッジが表示されるようになります。

このバッジをクリックすると、パッケージがどのリポジトリーのどのコミットからどのようなシステムでビルドされたかを確認できます。
手動でnpmパッケージを公開する場合などには、手元でコードを変更してから公開できてしまうため、GitHubで公開されているソースコードとnpmで公開されているコードが同一とは限りませんが、provenance statementsを使うとそれらが同一であることを証明できます。
なお、provenance statements自体は従来のトークンによるパッケージ公開でも利用できます。詳細については、こちらの記事で紹介しています。

trusted publishingの設定方法
すでにGitHub Actionsを利用してパッケージを公開している場合、trusted publishingへの移行は非常に簡単です。
まずは、trusted publishingに移行したいnpmパッケージの設定を開き、[Trusted Publisher]セクションで[GitHub Actions]または[GitLab CI/CD]を選択します。
![npmのパッケージの設定画面のスクリーンショット。[Trusted Publisher]セクションの[Select your publisher]に[GitHub Actions]と[GitLab CI/CD]の2つのボタンが表示されている](/_next/image/?url=%2Fapi%2Fmedia%2Ffile%2Fnpm-trusted-publishing-settings.png&w=3840&q=75)
ここでは例として、GitHub Actionsを選択しました。
それぞれの項目には、次のような内容を入力します。

- Organization or user:GitHubリポジトリーを所有している組織またはユーザー。たとえば、リポジトリーが
https://github.com/facebook/react/ならfacebookと入力します - Repository:GitHubのリポジトリー名。たとえば、リポジトリーが
https://github.com/facebook/react/ならreactと入力します - Workflow filename:npmにパッケージを公開する処理を実行するGitHub Actionsワークフローのファイル名。たとえば、
.github/workflows/release.ymlでパッケージを公開している場合は、release.ymlと入力します - Environment name:GitHub Actionsでenvironment機能を利用している場合は、npmパッケージの公開に使用するenvironmentの名前を入力します。environment機能を使用していない場合は空欄にします
必要な項目をすべて入力したら、[Set up connection]をクリックして設定を保存します。
次に、GitHub Actionsの設定ファイルを編集します。
ここでは、前述のChangesetsの記事のGitHub Actionsの設定を例として示しますが、Changesetsを使っていない場合でも同様の手順で移行できます。
name: Release
on: push: branches: [main]
concurrency: ${{ github.workflow }}-${{ github.ref }}
jobs: release: runs-on: ubuntu-latest
permissions: contents: write id-token: write # この設定を忘れずに pull-requests: write
strategy: matrix: node-version: [24.x]
steps: - uses: actions/checkout@v5
- name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }}
- run: npm ci
- name: Create Release Pull Request or Publish to npm id: changesets uses: changesets/action@v1 with: version: npm run ci:version publish: npm run ci:publish env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }}今回の場合は、単純に環境変数からNPM_TOKENを削除するだけで大丈夫です。
permissionsでid-token: writeを設定していない場合は、OIDCに必要なので追加してください。
これで、設定は完了です。npmにパッケージを公開できるか確認してください。
問題なくパッケージを公開できることが確認できたら、npmの不要になったトークンをGitHub Actionsのシークレットから削除するとともに、npmのダッシュボードから失効させておきましょう。
参考リンク
記事をシェア
フォローして最新情報を入手
Googleの優先ソースに追加すると、このサイトの記事をGoogleで見つけやすくなります。また、ぜひXやRSSフィードもフォローしてください。
関連記事
-1.png&w=1080&q=75)
生まれた時から、母国語よりも先にJavaScriptを使っていました。ネットの海のどこにもいなくてどこにでもいます。
Webフロントエンドプログラマーとして、TypeScriptを用いたWebアプリやブラウザー拡張機能を制作。Xのシャドウバン検知ツール「Shadowban Scanner」やリンクカード復活ツール「Restore Link Card」を公開し、国内外のメディアで紹介されました。iGEM 2023ではJapan-UnitedチームのWikiを制作してGrand Prizeの獲得に貢献。ブログではXやSNSの最新ニュース、不具合の検証と対処法、フロントエンド開発の知見を発信しています。






![[新しいXチャットへようこそ]というテキストが画面に大きく表示されており、その下には次の3つの説明が表示されている。[エンドツーエンドの暗号化:メッセージは、端末にかかわらずエンドツーエンドで暗号化されています。][最先端のプライバシー:Xを含め、他の人がメッセージを読むことはできません。][パスコードを設定:メッセージを保護するため、4桁のパスコードを設定してください。]これらの説明の下には、[パスコードを作成]という大きなボタンが配置されている](/_next/image/?url=%2Fapi%2Fmedia%2Ffile%2Fwelcome-to-new-chat.png&w=1920&q=75)

![[Search Engine Selector]というアプリからの通知のスクリーンショット。[ブラウザと検索サービスを選択]というタイトルで、本文には[ウェブページを表示しリンクを開くアプリと、検索サービスアプリを選択してください]と書かれている。通知の下部には[アプリを選択してください]というボタンが表示されている](/_next/image/?url=%2Fapi%2Fmedia%2Ffile%2Fandroid-search-engine-selector-notification.png&w=3840&q=75)


