GitHub Actionsでnpmパッケージ公開を自動化する - Trusted Publishingで実現するトークンレス運用
npm パッケージの公開を手動で行っていると、毎回トークンの管理やビルド、テストの実行など煩雑な作業が発生します。また、2025 年 9 月 29 日に GitHub が発表したnpmの認証強化により、Classic Token の廃止と、Trusted Publishing または Granular Access Token への移行が必要になりました。Trusted Publishing (OIDC) を使ってトークン管理不要のセキュアな公開フローを構築した手順を解説します。 本記事では、私が開発しているjrnl-mcpパッケージで実装した、 GitHubが発表したnpmの認証強化 対応の Trusted Publishing (OIDC) を使用したトークン管理不要の自動公開について記載しています。 GitHubは2025年9月29日に、npmのセキュリティ強化として以下の変更を発表しました。 移行先として2つの選択肢があります。 Granular Access Tokenは、従来のトークン方式を改良したものでパッケージごとの権限管理が可能となっていますが、定期的なトークンのローテーションが必要です。 Trusted Publishingはトークンを完全に排除した新しい認証方式で、公開を自動化しトークンを完全に排除したものです。 jrnl-mcpでは、トークン管理の手間を完全に排除できる Trusted Publishing を採用しました。 jrnl-mcpでは、以下のフローで自動公開を実現しています。 この仕組みにより、リリース作成だけでパッケージの公開が完了します。 実際に使用しているワークフロー設定は以下の通りです。 重要なポイントは、 Trusted Publishingを使用する場合、npm側での設定が必要です。 まず、通常の方法で初回のパッケージを公開します(トークンを使用)。npm側でパッケージが存在している必要があるためです。 前述のワークフロー設定で、 Trusted Publishingを使用することで、以下の作業が不要になります。 Trusted Publishing (OIDC) とGitHub Actionsを使用したnpmパッケージの自動公開により、以下のメリットが得られました。 特に、Trusted Publishingの導入により、トークンの定期的なローテーションや漏洩リスクの心配が不要になり、セキュリティと運用性が大幅に向上しました。npmパッケージを公開している方は、ぜひTrusted Publishingへの移行とGitHub Actionsによる自動化を検討してみてください。 Granular Access Tokenでもセキュリティは向上しますが、定期的なローテーション(最大90日ごと)が必要なため、可能であればTrusted Publishingの使用を推奨します。npmの認証変更の背景
自動公開の仕組み
全体のフロー
GitHub Actionsの設定
name: Publish to npm
on:
release:
types: [published]
permissions:
contents: read
id-token: write
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
registry-url: "https://registry.npmjs.org"
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm run test:ci
- name: Publish to npm
run: npm publish --provenance --access publicpermissionsの設定により、GitHub Actionsはnpmに対して一時的なOIDCトークンを発行・認証する。長期的なトークンをSecretに保存する必要がない。npm publish --provenance --access publicにより自動的にprovenance(出所証明)が生成され、パッケージがどのリポジトリから公開されたか検証可能となる。npm run test:ciにより公開前のテストを自動化する。Trusted Publishing の設定方法
1. npm でパッケージを公開
2. npm で Trusted Publishing を設定
<username>/<repository-name>(例: yostos/jrnl-mcp)publish.yml)3. GitHub Actions の設定
id-token: write 権限を付与するだけで完了です。トークンをSecretに保存する必要はありません。トークンベースとの比較
まとめ
参考リンク