個人的 npm ライブラリ開発Tips 2025
リリース方法
npmはOIDCを使用したリリースが可能であるので基本的にこれを使用すること
リリース方法は semantic-releaseを使用したりしていたが、GHAを動かしてRelease PRを作成→マージでtag発行 + npm publish する方法を採用した。
下記に記載のやり方が、シンプルで制御もしやすかった
少し変えたものが以下。
リリースPRが作成されるので、

マージするとReleaseのGHAが走る。
releaseのGHAの内容は以下。
繰り返すがOIDCを使用しているため、npm_tokenは使用しない。
初回リリース
npmのOIDCはまだリリースされていないライブラリの場合は使用できないので、setup-npm-trusted-publishを使用するとnpmのページから設定ができるようになるので便利。
GitHub Actions
セキュリティ
- コミットハッシュでのバージョン指定必須。
- pinactなどを使用して、pinすること。
サプライチェーンアタックなどへの対策のため、GitHub Actionsのyamlの内容はlinterにかける
- ghalintやzizmorを使用すること
actionlintとzizmorを回しているyamlの例
permissionは必ず設定すること
linterを入れるとpermission未設定の場合は基本的落ちるようになるはず
そのほか設定
CIには同時実行数の制御を入れる
pushした前の状態のCIを回したいことはあまり無いのと、GHAの無料枠を無駄に食いつぶしたく無いため
timeoutの設定
timeoutも必ず設定すること。こちらも前述の同じ理由
参考
pre-commitによる機密情報の誤commitを防ぐ
secretlintを使用してシークレットをGitHubにpushしないようにpre-commitで防ぐ。
レポジトリに設定するかどうかは人によるが、最近はAIに書かせることも多いのでレポジトリに追加している。
参考
CodeQL
パブリックレポジトリの場合、CodeQLが無料使用できるので使用する
CodeQL を使うと、コード内の脆弱性やエラーを特定することができ、結果は GitHub 内で code scanning アラートとして表示される。要するに、パブリックなリポジトリなら、自動で AI によるセキュリティチェックを受けられるというものだ。
PR をレビューするために AI に課金する、といったことをしなくても、設定だけで GitHub が提供してくれる。パブリックリポジトリが対象のため、導入しない理由もなさそうだ。今回の攻撃も、これで防げた可能性は高いとされている。
実際使ってみても、たまにセキュリティ的に怪しいところをalertしてくれるので便利。
設定方法などは下記
renovateを使用した依存パッケージのアップデート
deprecatedになったライブラリや脆弱性が含まれるライブラリのアップデートを自動で行うためにrenovateを使用。dependabotでも良い、要は手動よりも自動化すること
サプライチェーンアタックに対応するために、minimumReleaseAge は1日以上を設定しておくこと
オートマージを行う場合はCIでのテストが必須なのでテストは整備しておく必要あり
毎回作るのも面倒なので、自分用のrenovate-configを作成した
使用側で設定はオーバーライドできるのである程度の融通は効く
テスト
ライブラリの種類次第だが、end-to-endのテストをCIで回せるようにしておいた方が良い
AIに書かせた場合でも、テストを回せば一番外側から見た動作の検証が可能になるのは楽。不要なコードを削ぎ落としていく作業も楽になる。
spanner-assert だとTaskfileを使用してテストを作成したのが良かった
Spanner Emulatorの起動を待ったり、seedを投入したりが1つのファイルで書けるので見通しも良い。
GoのツールであるtestfixturesにPRを送った際に、taskfileを使用したテストが整備されており非常に体験が良かったので真似した
npmは"Require two-factor authentication and disallow tokens"を設定する
npmのRequire two-factor authentication and disallow tokensをパッケージに設定すると、公開にも2要素認証が必要になるため、npm tokenを使ったパッケージの公開はできなくできる
上記の対応を行う。
ライブラリを作成しpublishする側にも責任があるなーとつくづく思う最近
開発時の便利なもの
pkg.pr.new
コミットごとにnpm i を使用して手元でライブラリの挙動を確かめることができるようになる。

npxコマンドを使用したテンプレート生成ライブラリを開発した際は非常に便利だった
rulesetのimport
(ツールではない)mainブランチへの直pushを防ぐrulesetなどをGitHubの設置画面から設定するが、毎回ぽちぽちしていた。ふとUIを眺めると以下のようにimportできるので一度設定すればそれを使用すれば良い。GitHubにあげておいてもいい。

sort-package-json
package.jsonをソートしてくれる。地味に便利。
publint