Maintainer Month: オープンソースのメンテナーがやっている仕事
2022年の6月は、GitHub主催でMaintainer Monthは、オープンソースのメンテナーが集まって情報共有したり、メンテナーを祝ったり、支援したりするイベントが行われていました。
Maintainer Monthに気づいたのはThank you to our maintainers | The GitHub Blogのとき(6/24)なのだったので、残り一週間でしたがオープンソースのメンテナンスとメンテナーについて色々書いていました。
- Maintainer Month: epubリーダーアプリ bi-epub-readerを作った | Web Scratch
- Maintainer Month: オープンソースをメンテナンスするコツ | Web Scratch
- Maintainer Month: なぜtextlintを作ったか | Web Scratch
- 初めてでもわかる、GitHub Sponsorsでオープンソースを支援する方法
オープンソースのメンテナーそのものに関する話って意外と書く機会がないので、ちょうどいい機会だと思って書いてみました。 Maintainer Monthのイベントの目的もそうですが、メンテナーとしての自分の話を色々書いてみたので興味があったら読んでみてください。
オープンソースのメンテナーがやっている仕事(タスク)
Maintainer Monthは6月で終わったので、6月にやっていたオープンソースのメンテナンス関係のタスクを振り返ってみます。 実際オープンソースのメンテナンスでどういうことやってるのかを参考になるかなーと思います。
自分は色々なオープンソースをやるタイプなので、それぞれライブラリ/ツール/プロダクトなどで書いていきます。
JavaScript Primer
これは、今年の1月ぐらいから徐々にやっていましたがjsprimerをES2022に対応しました。 ES2022の仕様に合わせてリリースする予定だったので、事前にリリースノートまでは用意しておいて、リリースされた記事などを書いてリリースしました。
ES2022は結構変更が多かったので大変だった。
textlint
RFC: Improve error location · Issue #835 · textlint/textlintというエラー位置の詳細情報を含めるというRFCを実装を完了して、リリースまで持っていくのをやっていました。
実装自体は、結構前に大体できていたんですが、結構大きな範囲の変更(ファイルを100コ近くいじってる)が必要になってしまって、その確認が重たくて放置していました。 これが、Maintainer Month: オープンソースをメンテナンスするコツでも言ってた、「小さなリズム」でやるべき理由でもありますね。
この過程でバリデーションを色々強化していたのですが、GitHub Copilotの補完が便利でした。
こういうバリデーション書くのが楽 pic.twitter.com/saKxJwgPE3
— azu (@azu_re) June 25, 2022
そのほかには、Twitterでtextlint関係のエラーの話をみて、詳細をIssueとして作ってもらって、調べてみたらtextlintのコアではなくルール側のバグだったのでこれを修正していました。textlintのコア自体は大きくならないようにしてますが、調べてみないとどっちのバグか分かりにくいという状況はたまにあります。
この辺ももっと切り分けがしやすくできるといいなーと思いながら、修正していました。
github-advisory-database-rss
github-advisory-database-rssというGitHub Advisory Databaseの脆弱性情報をRSSとして取得できるサイトを作ってます。
GitHub Advisory DatabaseがErlangとElixirに対応したので、RSS Feeds for GitHub Advisory Databaseも同じく対応していました。
ついでなので、依存関係も一緒にアップデートしていました(自分はこういうときに依存も上げてしまうこと多い)。
TypeScriptを使ったNode.js ESMの対応(失敗)
check-ends-with-periodというライブラリはTypeScriptで書かれています。 TypeScript 4.7+でNode.js ESMサポートしたというのでこのライブラリで実験してみようと思って対応していました。
実際にやってみたらできないという現実にぶつかって失敗しました。
理想的には、同じsrc/*.tx
からCJS向けのファイルとESM向けのファイルをそれぞれ出力したいという構成でやりたい感じでした。
tsconfig.json
: generates esm tomodule/*.js
fromsrc/*.ts
tsconfig.cjs.json
: generates cjs tolib/*.js
fromsrc/*.ts
TypeScriptでは、ESMをimportするには.ts
のファイルでimport foo from "./foo.js"
のように.js
拡張子をつけてimportする必要があります
しかし、TypeScript Design Goalsでは、import pathを書き換えないなどの原則があります。
また、Node.jsのESMサポートはtype: module
とpackage.json
に書くと、.js
ファイルはESMとして扱われます。これは同じ.js
拡張子でESMとCJSを出し分けるのが無理という話になっています。
(ものすごい非合法的なハックはあります。)
TypeScriptのデザインとNode.jsのESMサポートの仕組みが噛み合ってなくて、tsconfig
ファイルでCJSとESMをだし分けたいみたいなやり方ができないことに気がつきました。
詳細は同じような話をしていたIssueに書いています。
なのでやってみたけど、失敗して保留しています。(もちろんbundlerとか別のツールを使えばできるけど、tsc
のみでやりたい)
safe-marked
safe-markedはmarkedとDOMPurifyを組み合わせて、デフォルトで安全なHTMLを出力するMarkdown変換器です。
内部的に使ってるJSDOMがメジャーアップデートしてたので、更新してました。 このリポジトリはrenovatebotでmajorのPRが出るので、それに反応して作業してます。
Secretlint
Secretlintは、パスワードとかAPIトークンとかの機密情報をチェックするLintツールです。
こっちもTypeScript 4.7で、CJSでのDynamic Importが正式にサポートされたので、TSをアップデートしたのでそこに対応していました。CJSでのDynamic Importは、ESMでルールとかプラグインを書くために必要になってます。
- 🛡🔑 Secretlint 4.0.0: ESMで書かれたルールのサポート、secretlint-disableコメントのサポート | Web Scratch
- 以前対応したときDynamic Importの問題について書いている
- fix(config-loader): use native import() by azu · Pull Request #275 · secretlint/secretlint
また、secretlintignore
で-
が使えないバグが報告されたので、これを修正していました。
あとは、SecretlintのDocker ImageにSARIFフォーマットの対応が入ってた方がいいんじゃない?というIssueがきたので、そうだよねって話をしてPR出してもらって入れていました。
HonKit
HonKitはGitBookのForkですが、GitBook時代からある気がするバグが報告されたのでそれを修正していました。
@security-alert
SARIFファイルをGitHubのコメントとして書いたり、整形できる@security-alertをツールをやっていて、 最近これのCo-Authorが増えたのでレビューとかしていました。 あとはOrganizationに移したり、allstar設定したりとかしていました。
- Fix: –failon process exit code by Gby56 · Pull Request #44 · security-alert/security-alert
- FEAT: add –fail-on for commenting by Gby56 · Pull Request #41 · security-alert/security-alert
JSer.info
毎週記事を書いた。
- 2022-06-01のJS: Lerna 5.0.0、TypeScript 4.7、wireit - JSer.info
- 2022-06-06のJS: Angular 14、Cypress 10、Vue 2.7 α - JSer.info
- 2022-06-15のJS: Safari 16 Beta、Fastify v4、Node.js 16のEOLの予定日の変更 - JSer.info
- 2022-06-21のJS: Internet Explorer 11のサポート終了、Vue 2.7 Beta、社内のReactコンポーネントのメンテナンス - JSer.info
- 2022-06-28のJS: ECMAScript 2022、TypeScript 4.8 Beta、CodeMirror 6 - JSer.info
まとめ
6月にやっていたオープンソース活動はこんな感じでした。
基本的に重要な通知はいまだにメールで受け取っていますが、メール開く気分じゃないときって結構あるので、Issueのトリアージとかだけでもやってくれる人いると結構助かるなーって印象です。 でも、Issueのトリアージやってくれる人って意外と多くないから、結構難しいだよなーって感じもしました。(いい感じにHelp Wantedを明示できるといいのだけど)
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。