go-tokenless について
GitHub Actionsのnpm公開を長期トークンからOIDCのTrusted Publishingへ移行するコマンドラインツールで、コーディングエージェントからも利用できます。変更を事前表示して必要なワークフローと `package.json` を編集し、人の判断が必要な場合は停止します。
主な機能
- 01移行計画と差分のプレビュー
- 02公開ワークフローとpackage.jsonの編集
- 03人の確認が必要な設定を検出
- 04複数のリリースツールとワークフローに対応
- 05MCPツールとAgent Skillを提供
活用シーン
- 01npm公開をOIDCのTrusted Publishingへ移行
- 02公開ワークフロー内の長期トークンを点検
- 03プライベートパッケージ取得用の読み取り専用トークンを設定
- 04CIで公開ワークフローへのトークン再混入を防止
MCP 対応
読み取り専用の `plan_trusted_publishing` と、リポジトリのファイルを書き換える `apply_trusted_publishing` を提供します。Gitやネットワークへの書き込みは行いません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
2掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| path | string | はい | リポジトリルートの絶対パス。 |
| repo | string | いいえ | GitHub の所有者/リポジトリ(git のリモートが "origin" ではない場合)。 |
| npmArgs | string | いいえ | 生成される npm コマンドに追加する引数。 |
| offline | boolean | いいえ | npm レジストリの検索をスキップします。 |
| readToken | string | いいえ | プライベートな組織パッケージのインストール手順に渡す読み取り専用 npm トークンのシークレット名(例:NPM_READ_TOKEN)。公開手順ではトークンを使用しません。 |
| npmVersion | string | いいえ | 挿入するアップグレード手順で使用する npm のバージョン範囲。デフォルトは ^12 です。他のバージョンでは公開に失敗する可能性があります。 |
詳細
go-tokenless
NPM_TOKENを削除しましょう。 1つのコマンドで、GitHub Actionsでのnpm公開を信頼された公開(OIDC)に切り替えられます。長期間有効なトークンはどこにも保存されず、リリースごとに来歴バッジが付きます。
npmはトークンによる公開を終了します。2027年1月以降、トークン単独では公開できなくなります(npmのドキュメント)。
目次
- クイックスタート
- 変更内容
- サポート対象のリリース構成
- プライベートパッケージ
- CIでトークンレスを維持する
- AIエージェントで使用する
- オプション
- アクセスするもの
- 自分だけができること
- トラブルシューティング
- コントリビューション
- ライセンス
クイックスタート
npmに公開するリポジトリのルートから実行します。
npx go-tokenless # 1. preview: lists every change and shows a diff, writes nothing
npx go-tokenless apply # 2. edit the workflow and package.json files
その後、表示される次の手順に従います。変更をコミットし、npmでパッケージをワークフローに接続して、古いシークレットを削除します。Node 22.14以降が必要です。
変更内容
変更が必要な行だけを編集します。ワークフロー内のコメント、引用符、レイアウトはそのまま保持し、package.json では repository フィールドだけを編集します。書き込み前に、go-tokenless は両方のバージョンを再読み込みし、移行以外の変更がある場合は処理を中止します。
| リリースワークフローの問題 | go-tokenless の動作 |
|---|---|
publish ジョブ(またはワークフロー)に NODE_AUTH_TOKEN / NPM_TOKEN がある | 削除します。これにより、シークレットを削除できます。npm は OIDC を優先しますが、設定済みのトークンにフォールバックするため、古いトークンが引き続き使われてしまいます |
| ジョブが OIDC トークンを要求できない | 既存の権限を維持したまま、permissions: id-token: write を追加します |
| npm が 11.5.1 より古い(Node 22 以下) | npm install -g npm@^12 を追加するか、Node < 22 を 24 に変更します |
actions/setup-node に registry-url がない | registry-url: https://registry.npmjs.org を追加します |
JS-DevTools/npm-publish が v4 より古い | トークンが不要になった v4 に更新します |
スクリプトが .npmrc に _authToken を書き込む | 該当する行を削除します |
package.json に repository がない、または形式が正しくない | git+https://github.com/<owner>/<repo>.git を設定します(モノレポでは directory も設定します) |
判断が必要な場合は、終了コード 1 で停止し、何も書き込みません。
- 外部のユーザーから実行可能な公開処理:
pull_request_target、issue_comment、workflow_runなどのトリガーで開始されるワークフローにある publish ジョブ。OIDC を付与すると、フォークから公開できてしまいます。 - セルフホストランナー: npm は信頼された公開に使用できるランナーとして受け付けません。
- 別のリポジトリを指す
repository。 - YAML アンカー: 編集がほかのジョブにも及ぶ可能性があります。
- 公開コマンドが見つからない場合: npm トークンは渡されていますが、公開コマンドを特定できません。
ドライラン(npm publish --dry-run)は公開として扱われません。GitHub Packages に公開するステップと、GITHUB_TOKEN の値には手を加えません。
出力例
$ npx go-tokenless
go-tokenless: Ready to go tokenless. (acme/widgets)
Changes:
.github/workflows/release.yml
- publish: remove `NODE_AUTH_TOKEN` from job env
- publish: grant `id-token: write`
- publish: raise setup-node from Node 20 to 24 (trusted publishing needs Node 22.14+)
package.json
- widgets: add repository.url git+https://github.com/acme/widgets.git
Next:
1. Run `npx go-tokenless apply` (or apply the diff above) and commit the changes on a branch.
2. Add a trusted publisher for each package. With npm 11.15+ logged in with 2FA, run:
npm trust github widgets --repo acme/widgets --file release.yml --allow-publish --yes
3. Merge, then let the release workflow publish once. Check the new version shows a provenance badge.
4. Delete the old publish token secret (`gh secret delete NPM_TOKEN`) and revoke the token on npmjs.com.
サポート対象のリリース構成
| 構成 | 備考 |
|---|---|
npm publish(ワークスペースを含む) | |
pnpm publish / -r publish | pnpm 10 は npm に処理を委ねます。pnpm 11 では 11.1.3 以降が必要です |
Yarn Berry yarn npm publish | Yarn 4.10.3 以降。.yarnrc.yml から npmAuthToken を削除してください |
changesets(changesets/action) | そのまま動作します。トークンなしでの初回リリースで認証できない場合は、v2 に更新してください |
| semantic-release | @semantic-release/npm 13.1.0 以降(semantic-release 25 以降)が必要です |
release-please + npm publish | |
| Lerna / Nx release | Lerna 9 以降 |
| JS-DevTools/npm-publish | v4 に更新されます |
| release-it | npm.skipChecks: true も設定してください |
再利用可能なワークフロー(workflow_call) | npm は呼び出し元ワークフローのファイル名を確認します。呼び出し元ごとに信頼設定コマンドが出力されます |
| スクリプト内での公開 | package.json のスクリプト、./scripts/*.sh、make <target>、ローカルのコンポジットアクション(uses: ./.github/actions/...)をたどります。working-directory も含みます |
Yarn 1 yarn publish、bun publish | 対応していないツールとして検出されます。これらのツールはまだ信頼された公開を利用できないため、npm publish に切り替えてください |
プライベートパッケージ
npm 組織のプライベートパッケージをインストールする必要がある場合は、インストールのステップに読み取り専用トークンを渡してください。公開ステップでは引き続きトークンを使いません。
npx go-tokenless apply --read-token NPM_READ_TOKEN
- run: npm ci
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_READ_TOKEN }}
- run: npm publish
リリースワークフロー内のすべてのインストールステップにトークンが設定されます。個別のビルドジョブやテストジョブも対象です。npmjs.com でパッケージへの読み取り専用アクセス権を持つ粒度の細かいトークンを作成し、gh secret set NPM_READ_TOKEN で保存してください。
CI でトークンなしの状態を維持する
Action を CI に追加してください。公開ワークフローにトークンが再び入り込むとジョブを失敗させ、ジョブのサマリーに具体的な修正内容を表示します。
# .github/workflows/ci.yml
jobs:
tokenless:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v5
- uses: continuous-actions/go-tokenless@v1
# with:
# mode: report # annotate only, never fail
# read-token: NPM_READ_TOKEN # if installs use a read-only token
go-tokenless --json を読み取り専用で実行し、トークンは必要ありません。status の出力は already-tokenless、ready、blocked、no-publish-workflow のいずれかです。
AI エージェントで使う
go-tokenless は、コーディングエージェントによる実行を想定して作られています。--json 出力、明確な終了コード、MCP サーバー、Agent Skill を備えています。エージェントに次のように依頼してください。「npm の公開をトラステッドパブリッシングに移行してください。」
| クライアント | セットアップ |
|---|---|
| Claude ディレクトリ(claude.ai、Cowork、Claude Code) | Anthropic のプラグインディレクトリに申請済みで、承認待ちです。掲載されたら、ディレクトリを開き、go-tokenless を検索して Add を選択してください。その後、go-tokenless@synced として Claude Code に同期されます。それまでは、以下のマーケットプレイスコマンドを使用してください |
| Claude Code(プラグイン:スキル + MCP) | /plugin marketplace add continuous-actions/go-tokenless を実行し、続けて /plugin install go-tokenless@continuous-actions を実行します |
| Claude Code(MCP のみ) | claude mcp add go-tokenless -- npx -y go-tokenless mcp |
| Gemini CLI | gemini extensions install https://github.com/continuous-actions/go-tokenless |
| Cursor、VS Code、その他 | 以下の MCP 設定を追加します |
| スキルに対応する任意のエージェント | npx skills add continuous-actions/go-tokenless |
{ "mcpServers": { "go-tokenless": { "command": "npx", "args": ["-y", "go-tokenless", "mcp"] } } }
MCP ツールは plan_trusted_publishing(読み取り専用)と apply_trusted_publishing(ファイルを書き込みます。git やネットワークへの書き込みは行いません)です。MCP Registry には io.github.continuous-actions/go-tokenless として掲載されています。llms.txt と Agent Skill も参照してください。
オプション
npx go-tokenless [plan | apply | mcp] [options]
| オプション | 説明 |
|---|---|
--json | プラン全体を JSON(status、changes、diff、findings、trust、nextSteps)として出力します |
--diff | テキスト出力に差分を含めます(plan では常に有効です) |
--repo <owner/repo> | origin が GitHub でない場合に指定する GitHub リポジトリ |
--cwd <dir> | リポジトリのルート(デフォルト:現在のディレクトリ) |
--offline | 各パッケージがすでに存在するかを確認する npm レジストリのチェックをスキップします |
--read-token <SECRET> | インストール手順に読み取り専用トークンを指定します(このシークレットから取得。 プライベートパッケージ) |
--npm-version <range> | 挿入するアップグレード手順で使用する npm。デフォルトは ^12 で、リリースによる予期しない変更を避けるため、1 つのメジャーバージョンに固定されています。ほかのバージョンでは警告が表示され、11.5.1 未満は拒否されます |
--npm-args "<args>" | 生成されるすべての npm コマンド(アップグレード手順と npm trust)に追加する引数 |
終了コード:0 正常 · 1 ブロック(人による修正が必要) · 2 使用方法のエラー · 3 予期しないエラー。
アクセスする情報
- ファイル: 指定されたリポジトリ内の
.github/workflows/*.yml、package.jsonファイル、および関連スクリプトを読み取ります。applyと MCP ツールのapply_trusted_publishingが書き込むのは、そのリポジトリ内のワークフローファイルとpackage.jsonファイルだけです。リポジトリ外へのリンクをたどることはありません。 - ネットワーク: 各パッケージがすでに存在するかを確認するため、
https://registry.npmjs.org/<package>に読み取り専用のGETリクエストを送信します(--offlineまたは MCP のoffline: trueで無効になります)。それ以外のデータを取得または送信することはありません。テレメトリもありません。 - 実行しないこと: リポジトリのコードを実行したり、シークレットや環境トークンを読み取ったり、変更を加える git コマンドを実行したり、ユーザーに代わって npm や GitHub に接続したりすることはありません。
- 実行方法: Claude Code プラグインと Gemini 拡張機能は、
npx -y go-tokenless@<pinned version> mcpで MCP サーバーを起動します。
ユーザー自身でしか行えないこと
go-tokenless が npm アカウント、シークレット、git の履歴に触れることはありません。apply の実行後に、次の操作を行ってください。
- 各パッケージをワークフローに接続する: 表示された
npm trust github …コマンドを実行する(npm 11.15 以降。2FA が求められます)か、npmjs.com → package → Settings → Trusted publishing に移動します。 - 新しいパッケージは、まず手動で一度公開する必要があります。npm が接続できるのは、すでに存在するパッケージのみです。該当するものはプランに表示されます。
- 最初のトークンレスリリース後、古いシークレットを削除し、トークンを失効させます。
トラブルシューティング
各エラーの原因と解決方法を個別のページで確認できます:ENEEDAUTH、404 on PUT、E422 repository.url、トークンが引き続き使用される場合、2FA バイパスに関する通知。
| エラー | 主な原因 |
|---|---|
npm error code ENEEDAUTH | id-token: write が設定されていない、npm のバージョンが 11.5.1 より古い、またはワークフローファイル名が信頼済みパブリッシャーと完全に一致しない(大文字と小文字を区別し、.yml を含む) |
npm error 404 Not Found - PUT https://registry.npmjs.org/... | 上記と同じ原因、environment の不一致、または信頼済みパブリッシャーがまだ設定されていない |
npm error code E422 … repository.url | package.json の repository が GitHub リポジトリと一致しない。apply で形式を修正できます |
| 公開時にトークンが引き続き使用される | NODE_AUTH_TOKEN、NPM_TOKEN、.npmrc の _authToken、または .yarnrc.yml の npmAuthToken がまだ設定されています。npx go-tokenless を再度実行して該当箇所を確認してください |
コントリビューション
Issue とプルリクエストを歓迎します。corepack enable && yarn install && yarn check を実行してください(型チェック、ビルド、エンドツーエンドテストを行います)。コードの構成については AGENTS.md、脆弱性の報告については SECURITY.md をご覧ください。
ライセンス
MIT © continuous-actions
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。