別にしんどくないブログ

正直しんどいので更新はゆるくやります

Node.js Core Collaboratorになった 〜なるまでを振り返った〜

表題のとおりNode.jsのCollaboratorになりました。
f:id:Shisama:20181108193251p:plain

最初のPull Requestが2018-05-03なので約半年かけてなりました。
この半年を振り返りたいと思います。
Node.jsのCollaboratorになりたい方やContributeしたい方の役に立てれば幸いです。

ContributeするきっかけになったのがLekoさんがNode学園 29時限目で発表された以下のスライドでした。
(参加していないのですが・・・。すみません。。)

speakerdeck.com

このスライドをきっかけに#node-contribution のslackチャンネルでのやりとりを見たり、実際のPull Requestを拝見させていただきました。
Slackはhttps://iojs-jp.slack.com/から参加できます。

このあと、同僚のid:taminifと主催している関西Node学園 1時限目でNode.jsをビルドして最新版を使ってみようという発表をしました。ちょうどNode.js v10がリリースされるタイミングでした。

ちょっと変更してビルドして動かしてって遊んでいて、ソースコード読むのにも慣れてきたので何かコントリビュートできないかなと思い、OpenになっているIssuePull RequestWatchしていました。

僕はC++が得意なわけではないのでドキュメントの修正やテストの追加ならできそうと感じました。しかし、この時はどのテストが不足しているかもわかりませんでした。

First Pull Request

その後、同僚がLTするということもあってNode学園 30時限目に参加しました。
そこで古川さん id:yosuke_furukawaにお会いし、どこから始めたらいいか相談したところ「fsがPromiseになったところはテストのカバレッジが低いんじゃないかな」と教えてもらいました。
実際root/internal/fs/promises.jsカバレッジは80%を満たしていませんでした。

テストのカバレッジレポートはNode.js Code Coverageで見ることができます。

そこでfsのPromiseのテストのカバレッジを上げるためにできそうなところを初Pull Requestを出したのが以下です。

github.com

初めてのnodejs/nodeへのPull Requestは「これでいいんだろうか」と不安でした。ドキュメントと他のPull Requestを何回も見て問題ないか確認しました。
ちなみにIssueやPull Requestの作り方やコミットメッセージの書き方はnode/CONTRIBUTING.md at master · nodejs/node · GitHubに記載されています。

node/doc/guides/contributing at master · nodejs/node · GitHub にも詳しい手順は記載されています。

CODE_OF_CONDUCTという行動規範も必読です。

Coverage Driven

そこからはずっとカバレッジを上げていました。テストを書いているとバグやドキュメントの不備を見つけることがあります。そういったものを修正することでテストだけではなくユーザーが使うものに貢献することができます。
世界中の多くの人に使われているプロダクトなのでバグの修正は遠く離れた国の誰かの助けになっているかもしれないし、ドキュメントに載せたサンプルコードや説明は公式ドキュメントとして世界中の人のリファレンスになっていると思うとやりがいあると思います。

僕のNode.jsへのContributeの方法はカバレッジ駆動でした。
Node.jsへのContributeはテストから初めてみるのはお勧めです。
慣れてくるとソースコードが結構読めるようになります。
あと、カバレッジが低いところのテストを書いていると知らなかったAPIを見つけることができるのでユーザーとしても学習できると思います。

マルチプラットフォーム

ご存知の通り、Node.jsはWindowsmacOSLinuxで実行できるようになっています。
それら複数OSでも問題なく動作することを保証するためにCIを使って検証しています。
Pull Requestを作るとまずTravis CIでlintとtestが実行されます。
Pull RequestがApproveされていくとCollaboratorの方がCIを実行してくれます。Jenkinsで動いています。
このCIがすごくて、様々なOSでビルドやテストを同時に並列で行います。様々なLinuxディストリビューションmacOSWindowsで実行されます。

f:id:Shisama:20181106021044p:plain

僕は普段macで開発しているのですが、環境によってテストが失敗することもあります。
また、OS依存の機能もあるので可能であれば複数のOSでテストをPull Requestを作る前に実行されることをお勧めします。
僕は普段はmacOSを使っていますが、LinuxWindowsのマシンで確認することもあります。
Windowsmacしか手元にないという方もいるかと思います。
僕もmac上で書いたコードをLinuxで動かしたいときがあります。そのときのためにDockerfileを作りました。
Node.jsの開発環境を作るのが手間って人もこのDocker上で開発していただけると思います。

github.com

あと、npmのパッケージに影響がないかどうかを調べるテストもあります。

github.com

Nominating

コミット数を増やしていくとContributorsに表示されるようになりました。
しかし、Collaboratorになるには他のCollaboratorの方からの推薦が無いとなれません。

node/GOVERNANCE.md at c774dc31988d8a3205a08968c1794f6589b9af06 · nodejs/node · GitHub

「もうそろそろCollaboratorの推薦があるころかな」と思っていたあたりから結構時間がかかりました。
このとき内心では「なれないのでは・・・」と不安を感じました。
ですが、とにかくここでは終われないし、Contributeすることは楽しかったので諦めずに少しずつコミットしていきました。

ある日、TSCメンバーのAnnaさんからTwitterでフォローされて何事かと思ったら「メール送ったよ」ってツイートに対する返信があり、メールをチェックすると"Would you be interested in becoming a collaborator on the Node.js core repository?"とのことだったので、もちろんYesと答えてしばらくするとNominatingのIssueが作られました。

github.com

その後、JoyeeからメールがあってCollaboratorに追加する作業を行うonboarding sessionを行いました。

onboarding sessionはCollaboratorに追加する作業です。Collaboratorとリアルタイムでやりとりします。

onboarding sessionの前に以下のonboardingに関するドキュメントを必ず読んでおいてください。僕は読まずにonboarding sessionをやってしまい、かなり時間がかかりました。
Joyeeには本当に申し訳ないことをしてしまった・・・
node/onboarding.md at master · nodejs/node · GitHub

以下はonboarding sessionで作ったCollaboratorに追加するPull Requestです。

github.com

そして今に至る。といった流れです。

Collaboratorになると

コードレビューを行うことができます。
masterにマージすることができます。
CI(Jenkins)のジョブを実行することができます。
Collaborator Summitに参加することができます。
Node.jsのチームメンバーになります。

英語

Node.jsに限らずOSSにContributeすることで多くのことが学べますし、世の中の役に立つ実感を感じますしやりがいがあります。 みんなもっと使っているOSSへのContributeすればいいのにと思います。
僕の周りでOSS活動をしない人はやはり英語に抵抗があるみたいです。しかし、そこは自動翻訳やオンライン辞書などのサービスにどんどん頼ればいいと思います。
元々英語を扱う仕事をしていたこともあって英語自体に抵抗がなかったですが、Google翻訳を多用しました。(僕はWeblioの中の人ですがWeblio翻訳は使ってな・・・)
まず自分で英文を書いてみて、それをGoogle翻訳で日本語にして意味がわかれば多くの場合通じます。
それでもやっぱり英語は勉強した方がいいです。
onboarding sessionのときは英語でリアルタイムなやりとりをします。
僕はGoogle Hangoutで音声通話で行ったのですが、英語力無さすぎてJoyeeには大変迷惑をかけてしまいました

最後に

ここまで長い文章に付き合ってくれたあなたに素敵な耳寄り情報です。
11/23、11/24に開催される東京Node学園祭にはNode.jsのTSCのメンバーやCollaboratorの方々が海外からも多数来日します!日本ではここでしか聞けない話をしてくれます!
2日目の11/24に学園祭内で開催されるCode And LearnはNode.jsに初めてContributeするまでをCollaboratorがサポートしてくれるハンズオンです。Node.jsにContributeしてみたい方はぜひご参加ください!他にも面白いハンズオン企画があります!
現地で会いましょう!

nodefest.jp

これからもNode.jsにContributeしてもっと良くしていくので、Node.jsをみんな使ってくれると嬉しいです!

あと関西でもNode.jsのコミュニティをもっと活発化したいので関西の皆さん一緒にやっていきましょう!!