ソースコードや設定ファイルに含まれるAPIトークンやパスワードなどの機密情報を見つけるSecretlintのv12.0.0をリリースしました。

このバージョンでは、次のように追加で検知できるようになったサービスが10個あります。

  • Groq、Hugging Face、Notion、GitLab、Grafana、HashiCorp Vault、Vercel、Databricks、Docker、Figma

あわせて、@secretlint/secretlint-rule-preset-recommendのパッケージサイズを約80%削減しています。

新しく追加された検出ルール

@secretlint/secretlint-rule-preset-recommendに、次の10個のサービスのAPIトークンなどを検出するルールが追加されました。

  • Groq - gsk_から始まるAPIキー
  • Hugging Face - hf_から始まるUser Access Token
  • Notion - secret_/ntn_から始まるIntegration Token
  • GitLab - Personal Access Token、Pipeline Trigger Token、Runner Registration Tokenなど
  • Grafana - Service Account TokenやCloud Access Policy Token
  • HashiCorp Vault - hvs./hvb.から始まるトークン
  • Vercel - Access Token
  • Databricks - dapiから始まるPersonal Access Token
  • Docker - dckr_pat_から始まるPersonal Access TokenとDocker Hub認証情報
  • Figma - figd_/figu_/figoa_などで始まるトークン

@secretlint/secretlint-rule-preset-recommendを使っている場合は、v12.0.0にアップデートすると自動的にこれらのルールも有効になります。

今回追加したトークンは、GitHubのSecret scanning partnerのリストを参照することで、確度の高いパターンを持つトークンに絞り込んでまとめて実装しました。 誤検知が少ないトークンフォーマットを持つサービスを優先したため、検出精度を保ったままカバー範囲を広げられています。

Presetのパッケージサイズを約80%削減

@secretlint/secretlint-rule-preset-recommendのパッケージサイズを、v11と比べて約82%削減しました。

Preset v11 v12 削減率
@secretlint/secretlint-rule-preset-recommend 1,036KB 187KB -82%
@secretlint/secretlint-rule-canary 1,060KB 211KB -80%

10個のルールが増えたにもかかわらず、全体としては約82%縮小しています。

主な要因は、GCPのService Account p12ファイル検出ルール(@secretlint/secretlint-rule-gcp)で使っていたnode-forge依存の置き換えです。 Web CryptoベースのPKCS#12 MAC検証実装に差し替えました。 p12ファイルの判定に必要なのはMACの検証だけなので、パース・復号処理を含むnode-forge全体を抱える必要がなくなりました。

Breaking Change: Node.js 22+のサポート

v12.0.0では、Node.js 20のサポートを終了し、Node.js 22以上が必要になりました。 Node.js 20は2026-04-30でActive LTSが終了するため、少し前倒しでサポートを切っています。

Breaking Change: CommonJSビルドの削除

v12.0.0では、各パッケージのCommonJSビルドと、CJS/ESMのdual packageサポートを削除しました。 ESMのみの配布になります。

Secretlint自体はv7.0.0でESMへ移行済みでしたが、互換性のためCJS向けのビルドも残していました。 Node.js 22+でESMの利用が一般化したため、dual packageの保守コストを削減するためにCJSビルドを削除しています。

SecretlintをCLIとして利用している場合、特に影響はありません。 Node.js 22+ではrequire(esm)がサポートされています。 そのため、@secretlint/node@secretlint/coreなどをrequire()しているコードもそのまま動作します。

使っているプロジェクト: SecureClipboard

Secretlintを組み込んだプロジェクトの例として、先日公開したSecureClipboardを紹介します。

SecureClipboardはクリップボードを監視するmacOSアプリです。 コピーされたテキストや画像に機密情報が含まれていた場合、自動でマスクします。 内部ではsecretlintの単一バイナリ版をsubprocessとして呼び出してスキャンしています。

v12.0.0で追加されたGroqやHugging Face、Notion、Vercel、Docker、Figmaなどのトークンも、SecureClipboard側で追加対応なしに検出できます。 このように、secretlintをライブラリ/バイナリとして組み込む使い方でも、presetをアップデートするだけで検出対象を拡張できます。

まとめ

Secretlint v12.0.0では、10個のサービスに対応する新しい検出ルールを@secretlint/secretlint-rule-preset-recommendに追加しました。 同時にpresetのサイズを約80%削減しています。 CJSビルドの削除というBreaking Changeがあるので、ライブラリとして利用している場合はESMへの移行が必要です。

フィードバックがあればGitHubのIssueでお知らせください。