久々に npm パッケージ作った。オレオレ ESLint プラグインを AI だよりで初作成
自分の中の好きなコーディンスタイルで、
- 空行にもインデントスペースを書いて垂直アラインメントを揃える
- ドキュメンテーションコメントの空行の末尾もスペースを書いて垂直アラインメントを揃える
if () { }と書かずに、開始パーレンを繋げてif() { }と書く} else {と1行で書かずに、終了ブレース直後に改行を入れる
というモノがある。2013年に新卒入社し、初めてのプログラミング言語として Java を習った時から数年の間に培われた、完全にオレオレなルールだ。
- 過去記事 : 2017-03-30 空行もインデントしてる人少ないのかも
このような書き方、ESLint や Prettier のようなフォーマッタ・リンターでは全く推奨しておらず、特に Prettier を入れると空行のインデントスペースなんてゴッソリ削ってしまう。AI エージェントが書くコードも if () とスペースを入れて書く挙動がデフォルトで、個人的には好かない。少なくとも自分が書いたコードとのスタイルが全く合っていない。
チームで開発する業務ではもう黙って Prettier・ESLint 推奨ルールをかませて、自分のスタイルを守らずにツールに従っているのだが、自分が趣味で書くコードくらいは自分の好きなスタイルで書きたい。そう思って、コレをなんとか ESLint ルール化できないか考えた。
時は2026年。AI はこの1年で大躍進を遂げ、つい3年前では「調べながら自分で書く」しかなかったモノが、今となっては「…そういうワケで、以上のようなルールの ESLint プラグインを作って欲しい」と Claude に頼んだら、即座に出来上がってしまった。
最初はプロジェクトローカルにルールファイルを置いて、そのプロジェクトでだけ運用していたのだが、ふと ESLint プラグインを一般公開してみたくなったので、やってみた。ココら辺も、文献を読んで仕組みは理解しつつ、動かないところがあったら Claude に聞いたり、VSCode 拡張機能で Codex にローカルファイルを見てもらったりした。ということで CJS (CommonJS)・ESM ("type": "module")・TypeScript 対応も完了。
出来上がったソースコードは以下。
いつの間にやら、GitHub Actions からの npm publish はトークンを発行しておくのではなく、Trusted Publishing という仕組みで、CI 上からのみ2段階認証を適切にバイパスするようになっていた。
ということで GitHub Actions 向けの Secret 定義はゼロになった。おまけに npmjs.com でのバージョン表記の横に、ちゃんと信頼された GitHub Actions から Publish したことを示す緑のチェックマークが付くようになった。
併せて、使っている人がいるかは分からないけど GitHub Packages Registry (GPR) に対して npm publish する時の設定も微調整しておいた。
AI のおかげで適切な package.json や .npmignore が出力され、その内容もしっかり理解できたので、$ npm install -D @neos21/neos-eslint-plugin でインストールしてみると、プラグインとして必要なコードはコレだけ。とってもスッキリ。
./node_modules/@neos21/neos-eslint-plugin/
├ LICENSE
├ README.md
├ dist/
│ ├ index.d.mts
│ ├ index.d.ts
│ ├ index.js
│ ├ index.js.map
│ ├ index.mjs
│ └ index.mjs.map
└ package.json
AI の無料枠だけでだいぶ生き残れている。課金してゴリゴリ何かしたくなる気持ちも分からんでもない。