Web GDE の Erick Wendel さんがオープンソース コミュニティのサポートを受けて Node.js に根本的な変化をもたらした方法

5月 23, 2023
Kevin Hernandez Developer Relations Community Manager

世界的に知られているテクノロジーのバグに遭遇したことはありますか?その場合、どのように対処しましたか? 

Web GDE の Erick Wendel さんなら、大手テクノロジー企業を悩ませているバグに真摯に向き合って、そのソリューションを見つけるでしょう。 

Erick さんはコミュニティ主導型のデベロッパーであり、母国のブラジルで無料コースを提供していたソフトウェア コミュニティを通じて、この分野で仕事を始めました。この経験から、Erick さんはオープンソース プロジェクトとコラボレーションに強い関心を持つようになり、ランタイムでのサブプロセスの動作に影響を与える Node.js 内の問題を解決することにつながりました。Erick さんは、知識の共有に情熱を持ち続けており、詳細な YouTube 動画(ポルトガル語)で、バグをどのように解決したかをわかりやすく説明しました。



erickWendelNodeJS
FrontInSampa カンファレンスで講演する Web GDE の Erick Wendel さん

バグ

Node.js には、子プロセスと呼ばれるモジュールがあり、これにより他の関数内でタスクを作成してデータをバックグラウンドで処理できます。このプロセスは、マシンやウェブページのリソースをより効果的に活用し、ページの読み込みを高速化します。JavaScript でモジュールをインポートしようとする場合、モジュールの読み込みには主に次の 2 つの方法があります。

  1. CommonJS: スクリプトを特定のシーケンスで読み込む必要があります。このメソッドでは、そのシーケンスですべてのモジュールが読み込まれるまで、プログラムの実行が一時停止されます。
  2. ECMAScript モジュール: JavaScript がモジュールを非同期的に読み込むことができるため、ファイルを読み込むときに、プログラムの実行が一時停止されません。

Erick さんは受講生向けの授業の準備をしているときに、Node.js の子プロセス モジュールを使用して、バックグラウンドで実行される関数をスケジュールしようと試みました。親プロセスは、正常に動作している場合、関数を呼び出した後すぐに、バックグラウンドで実行されているプログラムにメッセージを送信するはずでした。しかし、Erick さんは、このプロセスの実行中にエラーが検出されることに気づき、コードを何度も書き換えました。自分のコードが問題なく動作することを確信していましたが、エラーは発生し続けました。そこで、Erick さんは、「ここに setTimeout 関数を置いて、少し待ってからイベントを要求してみたらどうだろうか。そうすれば、うまくいくだろう」と考えました。Erick さんは、これが実際にバグであることに気づき、Node.js の GitHub リポジトリに即座にアクセスして、問題を報告し、他の貢献者と協力して最良のソリューションを見つけました。

ソリューションを見つける

Erick さんは、バグに気づいた後、これが自分だけに影響を与える問題ではないことを確認したいと思いました。「この問題を Google で検索したところ、JavaScript を実行している人なら誰でも使用できる Facebook JestYarn などの大きなライブラリでこうした問題が見つかりました」と Erick さんは語っています。Erick さんはオープンソース プロジェクトおよびコラボレーションの推進者として、Node.js の GitHub で Issue を作成し、他の貢献者の参加も得て、この問題について議論しました。

Erick さんは、このバグを修正するために使用したリソースについて質問されたとき、すぐにオープンソース コミュニティについて言及しました。Erick さんは、Node.js への最も重要な貢献者の 1 人だと思われる Anna Henningsen さんと話しました。Erick さんが提案したアイデアは、新しいイベントを子プロセス モジュールに導入し、そのイベントの「準備ができた」ときにユーザーに警告することでした。しかし、この変更により、新しいプロセスの使い方を学ぶことをコミュニティに強いることになる、と Anna さんが指摘しました。代わりに、Anna さんは、「すべてのメッセージをキューに追加し、子プロセスの準備ができたら、それらを一斉にディスパッチしたらどうですか」と提案しました。このようなコラボレーションは、Erick さんがまさに求めていたものであり、Anna さんによるこのソリューションのおかげで、Node.js を使用するすべてのアプリケーションを台無しにすることなく、バグを修正することができました。

Anna さんはすばらしいサポートを提供し、GitHub でディスカッションを開始するとすぐに、コミュニティのメンバーがこのプロジェクトについてコメントしたり、意見を述べたりしました。Erick さんは、「私が最初のソリューションを提示した後、多くの貢献者が私のコードを見直し、『いや、これは適切な方法ではない。これを修正する必要がある。これはパフォーマンスの問題だ』などと言いました。私はたくさんのフィードバックをもらい、多くのことを学び、最終的に同意を得ることができました」と回想しています。オープンソース コミュニティの助けがなければ、Erick さんはより多くの問題を引き起こすようなソリューションに取り組むことになっていたでしょう。しかし、コミュニティは Erick さんの盲点を指摘し、このコラボレーションのおかげで、シームレスなソリューションが実現しました。

Erick さんのソリューションを使用すると、Node.js は ECMAScript モジュールを使用してバックグラウンド タスクを効果的に実行することができます。Node.js に最初からあった問題を解決したことに対して、さまざまな大企業が Erick さんとオープンソース コミュニティに感謝しています。

効果

Erick さんは、この問題を解決した後、 Node.js のコアメンバーとなり、pull リクエストをレビューしたり、ディスカッションに参加したりしており、この領域で影響力のあるデベロッパーだと見なされるようになっています。また、Erick さんは、世界中のカンファレンスに招かれ、オープンソースの開発と自身の経験について話しています。

Erick さんは、オープンソース プロジェクトの力をより多くの人に知ってもらいたいと考えており、学生であれ専門家であれ、すべての人にオープンソースを支援するよう求めています。こうしたプロジェクトは、Erick さんが世界に強い印象を残すという目標を達成することを後押ししています。「私は人々が永久に忘れないものに自分の名前を刻みたいと考えています。それは、オープンソースの力だと思います。アイデアを付け加えたり、何かを修正したりすることで、デベロッパーとしても、人間としても成長できます」と Erick さんは語っています。

Erick さんは、問題を解決して(Erick さんの最新のソリューションは、1 行のコードで Node.js のバグを修正しました)、自身が学んでいるほか、YouTube チャンネルを通じて教育の機会を提供し続けており、次の大きな課題に取り組むことを楽しみにしています。

Erick さんからの感謝

Erick さんは、このソリューションへのサポートと貢献について、オープンソース コミュニティ、特に Anna Henningsen さんと Rich Trott さんに感謝しています。「Node.js の経験豊富な共同編集者なら、このバグをほんの数分で修正できたでしょう。共同編集者のおかげで私は役に立つことができ、最善を尽くすことができました。この経験をずっと忘れません」と自身の言葉で謝意を表しています。

You can find Erick on Twitter, GitHub and YouTube where he published a step-by-step tutorial (in Brazilian Portuguese) on how he fixed this bug and also gave a summarized tech talk sharing his journey.

Google Developer Experts(GDE)プログラムは、イベントでの講演やコンテンツの公開を通じてデベロッパーや企業、テック コミュニティを積極的にサポートしている経験豊富なテクノロジー エキスパート、インフルエンサー、ソートリーダーのグローバル ネットワークです。