表題のとおりNode.jsのCollaboratorになりました。
最初の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になっているIssueやPull RequestをWatchしていました。
僕は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はWindowsやmacOSやLinuxで実行できるようになっています。
それら複数OSでも問題なく動作することを保証するためにCIを使って検証しています。
Pull Requestを作るとまずTravis CIでlintとtestが実行されます。
Pull RequestがApproveされていくとCollaboratorの方がCIを実行してくれます。Jenkinsで動いています。
このCIがすごくて、様々なOSでビルドやテストを同時に並列で行います。様々なLinuxディストリビューションやmacOSやWindowsで実行されます。
僕は普段macで開発しているのですが、環境によってテストが失敗することもあります。
また、OS依存の機能もあるので可能であれば複数のOSでテストをPull Requestを作る前に実行されることをお勧めします。
僕は普段はmacOSを使っていますが、LinuxやWindowsのマシンで確認することもあります。
Windowsやmacしか手元にないという方もいるかと思います。
僕も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のコミュニティをもっと活発化したいので関西の皆さん一緒にやっていきましょう!!