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) を使用したトークン管理不要の自動公開について記載しています。
npmの認証変更の背景
GitHubは2025年9月29日に、npmのセキュリティ強化として以下の変更を発表しました。
- Classic Access Tokenの廃止
- Trusted Publishing (OIDC) またはGranular Access Tokenへの移行推奨
- より細かい権限管理の実現
移行先として2つの選択肢があります。
- Granular Access Token
- Trusted Publishing (OIDC)
Granular Access Tokenは、従来のトークン方式を改良したものでパッケージごとの権限管理が可能となっていますが、定期的なトークンのローテーションが必要です。 Trusted Publishingはトークンを完全に排除した新しい認証方式で、公開を自動化しトークンを完全に排除したものです。
jrnl-mcpでは、トークン管理の手間を完全に排除できる Trusted Publishing を採用しました。
自動公開の仕組み
全体のフロー
jrnl-mcpでは、以下のフローで自動公開を実現しています。
- GitHubでリリースを作成
- GitHub Actionsが自動起動
- 依存関係のインストールとテストを実行
- 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 public
重要なポイントは、
- GitHubのリリース機能を使用することで、手動でのトリガーが可能になる。これにより、意図しないタイミングでの公開を防ぐ。
permissionsの設定により、GitHub Actionsはnpmに対して一時的なOIDCトークンを発行・認証する。長期的なトークンをSecretに保存する必要がない。npm publish --provenance --access publicにより自動的にprovenance(出所証明)が生成され、パッケージがどのリポジトリから公開されたか検証可能となる。npm run test:ciにより公開前のテストを自動化する。
Trusted Publishing の設定方法
Trusted Publishingを使用する場合、npm側での設定が必要です。
1. npm でパッケージを公開
まず、通常の方法で初回のパッケージを公開します(トークンを使用)。npm側でパッケージが存在している必要があるためです。
2. npm で Trusted Publishing を設定
- npm のパッケージ設定にアクセス
- 公開したパッケージの"Settings"タブを開く
- "Publishing access"セクションで"Add a publisher"を選択
- GitHub Actionsを選択し、以下を設定する
- Repository:
<username>/<repository-name>(例:yostos/jrnl-mcp) - Workflow: ワークフローファイル名(例:
publish.yml) - Environment: 未指定(デフォルト)または特定の環境名
- Repository:
3. GitHub Actions の設定
前述のワークフロー設定で、id-token: write 権限を付与するだけで完了です。トークンをSecretに保存する必要はありません。
トークンベースとの比較
Trusted Publishingを使用することで、以下の作業が不要になります。
- npmトークンの作成と保存
- GitHub Secretsへのトークン登録
- トークンの定期的なローテーション(Granular Access Tokenの場合、最大90日ごと)
- トークン漏洩のリスク管理
まとめ
Trusted Publishing (OIDC) とGitHub Actionsを使用したnpmパッケージの自動公開により、以下のメリットが得られました。
- 公開作業の効率化
- トークン管理の完全な排除
- セキュリティの向上
- 品質の担保
- 透明性の確保(自動provenance生成)
特に、Trusted Publishingの導入により、トークンの定期的なローテーションや漏洩リスクの心配が不要になり、セキュリティと運用性が大幅に向上しました。npmパッケージを公開している方は、ぜひTrusted Publishingへの移行とGitHub Actionsによる自動化を検討してみてください。
Granular Access Tokenでもセキュリティは向上しますが、定期的なローテーション(最大90日ごと)が必要なため、可能であればTrusted Publishingの使用を推奨します。