Node.js に初めてのコントリビューションをしている話

本エントリは Node.js Advent Calendar 2019 14日目の記事です。

はじめに

どうも、さぃと (@saitoeku3) です。
今日はあまりにも家を出たくなかったので、ピザとコーラのデリバリーをして幸せになっていました。

さて僕は普段から Node.js でバックエンド APISSR サーバを書いたり、Electron から child_process で FFmpeg を叩いたりしているのですが、どれを思い返しても割と普通の使い方しかしていなかったので最初はネタに困っていました。

それでも何かできることがないか探していたところ、前から Node.js にコントリビューションしたかったけれど踏み出せていないことを思い出して、この際だからチャレンジすることにしました。

きっかけ

少し前になるのですが、2019年2月に Yahoo Japan が開催したインターンシップの「Node.js 黒帯・OSSデベロッパーコース」に参加していました。そこでは、大津さん (Node.js の TSC Emeriti) や 栗山さん (Node.js の黒帯)、伊藤さん (現在フロントエンドの黒帯) から Node.js の仕組みや OSS に貢献する意義を1週間かけて学びました。

当時は Node.js 初心者どころかプログラミングを本格的に学び始めてから数ヶ月しか経っていなかったのですが、非同期処理の話から実際にアプリケーションを作るところまで非常に丁寧に教えていただけて最高の体験ができました。

もう察している方もいるかもしれませんが、このインターンの名前に OSS とあるように最終的には「Node.js にコミットできるといいよね」という話が期間中にありました。しかし、まだ Node.js への理解が浅いことや期間が短いことで実現しませんでした。

それから1年弱が過ぎ、ある程度 Node.js に触れてきた今だからこそ当時やり残した Node.js への貢献に挑戦してみました。

何に取り組むのか決める

まず最初は何に取り組むのか決めるために good first issue を調べていました。しかし、意外と初心者には難しそうなものが多かったり、既に誰かがやる流れになっていたりして良さげなものは見つかりませんでした。そこで、OSS 貢献はドキュメントやテストから始めると良いと言われているのを思い出して調べ直すと次の issue が見つかりました。

Documentation for http.message.url suggests using deprecated url API #30048

内容は http API についてのドキュメントの message.url にある URL をパースする例の中で非推奨となっている url API が紹介されているというものでした。

こんな内容です。

$ node
> require('url').parse('/status?name=ryan')
Url {
  protocol: null,
  slashes: null,
  auth: null,
  host: null,
  port: null,
  hostname: null,
  hash: null,
  search: '?name=ryan',
  query: 'name=ryan',
  pathname: '/status',
  path: '/status?name=ryan',
  href: '/status?name=ryan' }

この issue で指摘されているように v11.0.0 からは DEP0116: Legacy URL API に書かれているように、require('url') で使用する API が非推奨になって、代わりに WHATWG URL API の使用を推奨しています。

修正点がわかりやすかったので、この issue に取り組むことにしました。

image

取り組み始めるまで

取り組みたい旨を伝えたのは良いのですが、始めるまではしばらく待つ必要がありました。理由はおそらく修正内容をどうするべきか @nodejs/url で議論されていたからだと思われます。待っている間は少し不安な気持ちになったのですが、3週間程度経つと「こんな感じで修正するといいよ」とアドバイスを頂けました。

(ちなみにこの間に shisama さんNode.jsへのコントリビュート解説、そしてOSSへ貢献するということ が公開されたので手を合わせながら読んでいました。)

PR を送る

PR を送る前には、大津さんが書かれた CONTRIBUTING の翻訳CODE_OF_CONDUCT を読んで最低限のマナーを把握するようにしていました。OSS に貢献するつもりが逆に迷惑をかけていたら悲しいですよね…😢

実際にドキュメントの修正を始めてからは以下のことに気をつけました。

  • 既存の内容と齟齬がないか
  • 英語は適切か
  • コミットメッセージはわかりやすいか

今回修正する箇所は API 自体が変更されているので内容が変わるのは仕方ありませんが、本来書かれているべきことを消してしまうのは修正ではなくてただの削除です。もとの非推奨な API でできたことを新しい API でもできることを確認してから修正しました。

また、Node.js に限らず多くの OSS は英語が標準です。Issue や PR での議論やコミットメッセージは英語で書かなければなりません。正直ここまでなら多少雑だったり間違えたりしていても大丈夫ですが、ドキュメントで間違った英語を使うのはさすがにマズイのでいつも以上に Google 翻訳で意味が伝わるか確かめていました。

送った PR: doc: update message.url example in http.IncomingMessage #30830

まだ Merge はされていないため貢献できた!とは言えないのですが、ついに一歩踏み出すことができました 🎉

追記 (2019/12/18) Merge されました!

おわりに

もともと OSS 活動は熟練したプロの開発者がしているイメージを持っていたので「自分なんか…」と敬遠していた時期もありましたが、今回は思い切って PR を送ってみました。修正箇所はごくわずかでも Node.js という広く使われている OSS に関われたのは素直に嬉しいです。

周りの学生の話を聞くと、やはり僕と同じように OSS 活動にハードルを感じている人は多いようです。しかし、少し勇気を振り絞るだけで世界中の優秀なプログラマと一緒に活動できるのは素晴らしいことですよね。

いきなりコードベースでの貢献をするのは難しくても、僕のようにドキュメントの修正から始めることもできます。もし、本エントリを読んで OSS 活動に興味を持たれた方がいたら一緒に挑戦しましょう!