ESLintチームから200ドルもらった話

ESLint チームから $200 いただきました！とても嬉しくありがたいです！
プログラマー人生の中でも、あまり無い経験だと思ったので駄文ですがこの経験を残そうと思います。
一応書いておくと**私は ESLint の中の人ではありません**。

まず簡単な時系列（日本時間）

- 3/26朝、ESLint [TSCミーティング](https://discord.com/channels/688543509199716507/688545247843713092)でコントリビューターの誰に今月分の寄付をするのが良いか話し合われる。  
  ミーティングメモのPR: https://github.com/eslint/tsc-meetings/pull/246
- 3/26朝、ESLint チームのリーダーである [Nicholas](https://twitter.com/slicknet) さんから、あなたに $200 あげます（かなり意訳）な旨のメールが届く。
- 3/26、メールに案内の通りに [Open Collective](https://opencollective.com/eslint/expenses) で申請。3/27、申請が承認される。
- 3/30 $200 もらた！

ESLint チームのリーダーである [Nicholas](https://twitter.com/slicknet) さんの3/26朝のつぶやき：

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Just sent out emails to various ESLint contributors letting them know that the team has awarded them cash for their contributions. ESLint values all contributions and the team picks the top outside contributors each month to pay for their help. 💵🙏😀</p>&mdash; Nicholas C. Zakas (@slicknet) <a href="https://twitter.com/slicknet/status/1375198854098771971?ref_src=twsrc%5Etfw">March 25, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## ESLint の Contributor Pool プログラム

ESLint の予算の中からコミッター・貢献者 (Contributor) に寄付をしようというプログラム（おそらく）。
おそらくと書いたのは下記リンクのミーティングメモからそう読み取ったけど、ここには「Contributor Pool」という名前は（まだ？）無いので、間違ってるかもしれないという保険です。

https://github.com/eslint/tsc-meetings/blob/master/notes/2020/2020-11-19.md#monthly-budget-for-committers-and-new-contributors

Contributor Pool なのか、Contributor Pool の内の一つの企画なのかわかりませんが、毎月 \$500 をコミッター・貢献者の中から影響のあった貢献に対して、寄付という形でお返しするという取り組みで、ありがたいことに私も選ばれ、\$200 受け取ることになりました。

## どんな人が選ばれる？

プルリクエストなどのコード的な支援、issue などの問題定義や議論的な支援、Discord での質問への回答などで、プロジェクトに貢献した人たちの中から ESLint の中の人によって選ばれるようです。
おそらく人数的な制限はなく、毎月の \$500 を上限に選ばれている印象です。

詳細を知りたい場合は、[ESLint の TSCミーティングメモのリポジトリ](https://github.com/eslint/tsc-meetings)や [ESLint の TSCミーティング用チャットチャンネル](https://discord.com/channels/688543509199716507/688545247843713092)を覗いてみてください。

## 私はなぜ選ばれたの？

選ばれた理由の詳細はわかりませんが、[このプルリクエスト](https://github.com/eslint/eslint/pull/14072)が評価されたということようです。

### 評価されたと思われる、このプルリクエストの内容

[このプルリクエスト](https://github.com/eslint/eslint/pull/14072) (PR) は ESLint の [no-restricted-syntax](https://eslint.org/docs/rules/no-restricted-syntax) ルールやカスタムルールと、JSX や TypeScript と一緒に使用する際に、一部の定義方法（ASTノード選択セレクタ）を使用するとクラッシュするという問題を修正するものです。
2月にマージされ [ESLint バージョン7.20](https://eslint.org/blog/2021/02/eslint-v7.20.0-released)で取り込まれました。

### このプルリクエストの経緯

この内容はかなりマニアックなので興味ない方は読み飛ばすと吉です。

元々の問題は ESLint がオプショナルチェイニング (Optional Chaining) をサポートするタイミングで発覚しました。私は当時、ESLint のオプショナルチェイニングのサポートが待ち遠しくて関連する issue や PR をかなり追いかけていました。そんな中、最後の [ESLint のオプショナルチェイニングサポートの PR](https://github.com/eslint/eslint/pull/13416) を覗いてみると、作業がとっても大変そうだったので、個人的に改修作業の洗い出しだけでも手伝えないかと思いいろいろやっていたら [no-restricted-syntax](https://eslint.org/docs/rules/no-restricted-syntax) ルールの一部の設定（セレクタ）でエラーになることを見つけました。
https://github.com/eslint/eslint/pull/13416#issuecomment-645119294
ついでにこれはオプショナルチェイニングには関係なく JSX や TypeScript と一緒に使用しても起こる問題だということがわかりました。
ただこれは ESLint の改修だけでどうにかなるものではなく、依存パッケージの [esquery](https://github.com/estools/esquery) の機能拡張が必要で、パパッと直せるものではないこともわかりました。

（ちなみに、この時は気がつきませんでしたが、私がメンテナンスしている [eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue) でも[同様の問題を報告している issue](https://github.com/vuejs/eslint-plugin-vue/issues/870) がありましたorz）

この問題（不具合？）が実際ユーザーにとって影響あるかといえば、ぶっちゃけ、影響無いと言っても良いぐらいどうでもいい不具合だったと思います。そのセレクタ使わなければ良いだけですし、問題になるセレクタは、どちらかといえばマニアックなセレクタでしたので。  

そうは言っても直ったら直ったで、[とあるメソッドの第３引数をチェックする](https://github.com/vuejs/eslint-plugin-vue/issues/870)とか ESLint ルール職人じゃなくても設定で簡単にできたりと良いことはあるので、 [esquery](https://github.com/estools/esquery)に [issue を開いて](https://github.com/estools/esquery/issues/111)ついでに [PR も開いて](https://github.com/estools/esquery/pull/112)みました。これは**2020年（去年）の6月**のことです。

そんな PR を開いたことも忘れた頃（今年2021年の2月）に、この PR にコメントがつきます。コメントされると GitHub で通知が来るので見てみると、どうやら [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint) や [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) でも同様の問題が発覚し報告されたらしく、関係している人がコメントをくれたようです。このコメントを見てか esquery の管理者も注目してくれたようで、レビューが進み、PR がマージされ、リリースされることになりました。

せっかく、esquery への機能拡張が取り込まれたので、この追加機能を利用する[修正 PR](https://github.com/eslint/eslint/pull/14072) を ESLint に開き、マージされ、リリースされたというのが経緯です。

### このプルリクエストはそんなに凄かった？

各プルリクエストをみるとわかりますが、内容的には単純な機能拡張で拡張内容もどこかの（esquery と同じ org の）パッケージを参考にした内容であり、プルリクエストを開いてからマージされるまでは時間がかかりましたが、作業時間的には1,2時間程度だったと思います。先にも書きましたが、僕はぶっちゃけ大した問題（不具合）では無いと思っていたので、issue とプルリクエストを開いてからは放置していたぐらいです。
つまり、「全然**凄くない**」と私は思っています。
少しだけアピールを入れておくと、2つのパッケージを修正しないと直らない比較的面倒臭い部類の問題で、私はその両方で PR し、それらが両方マージされたというのは少しだけレアかなとは思います。
ただこれも特別な技術が必要とかはなく、やろうと思うかどうかと、マージされるまで（レビュー対応など）やりきるかどうかだけなので特別なことではないです。

## ESLint の Contributor Pool プログラムのここが素晴らしい

（と私が思っていること）

まず、もらえた人はとっても嬉しいです（のはず、少なくとも僕は超嬉しい）！
お金もらえたことがではなくてまず選ばれたことが嬉しいです！
別にお金はなくてもいい、とまで言えば猫被りな感じですが、さらにそこにある程度の金額が乗れば、英語が分からなくても彼らがどれだけ貢献者を大切にしているかが伝わると思います。

（ようやく？）最近は OSS のチームや個人を金銭的な支援をしようという活動が増えてきたように思いますが、Contributor Pool は、OSS チーム外の貢献者にもその支援を広げようという、さらに一歩進んだ取り組みのように思いました（僕は他のOSSの支援金の使い方をほとんど知らないので大げさかもですが）。OSS を継続するにはメンテナンスするチームとチームメンバーへの支援も重要ですが、同時に貢献者の存在もかなり重要です。Contributor Pool はそれを反映した素晴らしい取り組みであると思います。

## 言いたいこと

OSS 貢献をしたいと考えている方はぜひ ESLint に貢献してみてはどうでしょうか？
さすがに \$200 狙って貢献するというのは狙ってもらえる物ではないと思うのでやめた方がいいと思いますが、運などが重なれば、僕みたいにもらえることがあるかもしれませんし、書いてきたように ESLint チームは貢献者を大切にしている※ので、そんなチームとコラボレーションするのは良いことだと思います。
難しい修正や難しい議論をする必要はありません。全ての貢献は感謝されますし、ちょっとめんどくさそうなことに貢献するだけで \$200 もらえることもあります（ありました！）。もしコーディングが苦手でも[質問チャット](https://discord.com/channels/688543509199716507/717416886685401108)に少し参加して初心者の質問に数個答えるだけでも大きな貢献です。（質問への回答はContributor Poolの選出の対象です）

（※もちろん ESLint 以外の多くの OSS も貢献者を大切にしていますが今回は ESLint の話なので ESLint に限定した言い方をしています）

また、OSS チームで貢献者が増えなくて困っているような場合は、Contributor Pool のやり方を参考にしてみても良いのかなと思いました（しらんけど）。

## あとがき

正直自分は、ESLint チームが貢献者への金銭的支援をやっているのは知っていましたが、自分が対象者になるまでは、自分には関係のない（選ばれるわけがない）ことだと思っていたのもあってか、その効果や目的について考えたり調べたりすることはありませんでした。
今回、ESLint チームが貢献者をとても大切にしていることに気がつけたので、このことが少しでも広まればいいなと思います。

また、ESLint 以外の OSS チームも色々と取り組みをしていたり、目に見える取り組みをしていなくても、多くの OSS チームは貢献者を大切にしていると思います。OSS 貢献をしたいと考えていてまだできていない方はぜひ一歩踏み出して issue / PR / 質問回答などしてみてください。おそらく彼らはあなたの貢献を望んでいます。そのことをあなたに伝える方法をまだ持っていないだけです。