Google Summer of Code と Chrome 拡張機能

中国出身の 2 年生で、ウェブ開発に情熱を注いでいます。1 年目は大学の技術部に入学し、このクラブは、私にとってコーディングとオープンソースを知るきっかけとなりました。クラブでは、コーディングが大好きな、考え方が似ているパートナーのグループに出会いました。2023 年の初めに Google Summer of Code について学びました。Google が組織するこのグローバル プログラムは、学生とオープンソース団体を結び付け、オープンソースのアクティビティに参加することで夏を有意義に過ごせるようにガイドします。

さっそく応募してみましたが、幸いなことに、参加が承認されました。この夏、Chrome Extension Samples リポジトリへの投稿に費やしたのは記憶に残り、貴重な経験です。もちろん、効果的なコミュニケーション、コーディング スキル、プランニング能力など、多くのことを学びました。

GSoC 2023 の締めくくりに、GSoC での私の経験を共有する価値はあります。この投稿では、私自身も参加して GSoC の一般的なプロセスについて簡単に紹介するので、参考になれば幸いです。

私が GSoC に貢献した経緯

私は Chromium GSoC 2023 プロジェクトを申請しました。私の主な仕事は、既存の Chrome 拡張機能のサンプルを Manifest V3 で動作するようにアップグレードすることです(関連するスクリプトやドキュメントも含まれます)。

初期段階

GSoC について知ったのは 2023 年 2 月でしたが、まだ適用すべきかどうかわかりませんでした。当時、私はいくつか懸念がありました。

  • 私は内向的で、英語が母国語ではないため、メンターとのコミュニケーションは難しいかもしれません。
  • GSoC コミュニティは世界中から参加しているため、タイムゾーンの違いに対処するのは難しい場合があります。
  • GSoC は非常に有名なプログラムであるため、競争力が保たれるため、自分の可能性は低く思えるほどです。

ですが、これらのいずれも問題ではないと自信を持って言えます。

ストーリーを語る前に、2022 年の初めに起こった出来事についてお話ししたいと思います。このインシデントは、私が GSoC に参加する機会にもなりました。Manifest V2 に基づくブラウザ拡張機能を Manifest V3 に移行したいと思っていました。移行を完了するには、ドキュメントを参照してすべての API の変更を理解する必要がありました。また、参照用に関連するサンプルがあるかどうかも検索する必要がありました。新しい API を理解し、コードを移行することは、私にとって非常に困難です。

だからこそ、GSoC のプロジェクト リストを見て、MV3 に関連するアイデアを見つけたとき、とてもワクワクしました。Manifest V3 拡張機能のサンプルの改善と、将来のデベロッパーのためのアメニティの提供に熱心に取り組みました。

3 月に、担当メンターの 1 人であるオリバーさんに、私の意図について簡単なメールを送りました。

GSoC プロジェクトへの参加申請

いつも YouTube をご利用いただきありがとうございます。

中国のコンピュータ サイエンス(CS)学部生です。GSoC で Chrome 拡張機能のサンプル関連のプロジェクトについて知り、Manifest V3 サンプルの改善に興味を持たれました。API サンプルに取り組む経験はあまりありませんが、ウェブ開発と MV3 拡張機能開発(https://github.com/daidr/paimon-webext)の経験があるため、MV3 API サンプルの重要性を認識するに至ったので、両方について学び、貢献したいと思います。それでもこのプロジェクトに申し込めますか?

よろしくお願いいたします。

しばらくして、Oliver と Ali(Oliver の上司)から返信がありました。彼らは私の質問に答え、GSoC の特定のルールとタイムラインについて詳細な情報を提供してくれました。また、有益な参考資料も数多く共有してくれました。

腕を射たようなもので、前に進む決意を強めてくれました。今後のオープンソース イベント(GSoC 2024 など)への参加に興味がある場合は、まず一歩を踏み出すことが最も重要です。ためらわずに挑戦してください。

申請前に、プロジェクトのコードを確認し、ドキュメントにざっと目を通しました。GSoC は、参加者がコミュニティに慣れるために約 1 か月のコミュニティの絆を深める期間を設けていますが、予備知識のおかげでプレッシャーを軽減し、より的を絞った提案を書くことができました。

プロジェクトによって提供されたスターター バグを解決しようとしました。これらの問題は比較的シンプルで、プロジェクトをすぐに理解するのに役立ちました。私はメンターのオリバーに感謝しています(当時は私の指導者ではありませんでした)。詳しい説明が必要なときはいつでもメールに即座に返信し、辛抱強く問題を解決してくれました。提案書の作成中に問題が発生した場合は、提案内容をメンターに送って、改善が必要な部分がないか確認することもできます。

承認を受ける

申請前に行うのは、提案書の作成です。提案書には、申請フォームのほか、アイデア、目標、スケジュールを含める必要があります。作業対象のプロジェクトによっては、提案用の追加のテンプレートが提供される場合があります。あらかじめ用意された提案書の例が多くオンラインで参照できます。

下書きが完成したら、メンターに送信してフィードバックを求めました。申し込みを送信した後、時間がかかります。そして 5 月上旬に、採用が承認されたという通知が届きました。

コードワーク

最初のボンディング期間中に、まず残りのスターター バグに対処し、習得すべき新しいスキルがあるかどうか確認しました。残りの時間はドキュメントを読みます

メンターと話し合った後、タスクに割り当てる時間を合理的なものにするために目標を調整しました。また、すべての API サンプルを一覧表示する新しい developer.chrome.com ページを作成し、開発者が必要なサンプルをすばやく見つけられるように基本的なフィルタを提供するというアイデアについても説明しました。これは私にとってかなり複雑なタスクであり、プロジェクトを定義し、プロダクト要件に関するドキュメント(PRD)を作成するのに、メンターと私はかなりの時間を要しました。

この大規模なタスクでは、リポジトリを走査して拡張機能のサンプルとそれらが使用する API のリストを含む JSON ファイルを生成する自動スクリプトをサンプル リポジトリに用意する必要があると判断しました。developer.chrome.com ドキュメント リポジトリでは、このファイルを使用してページを作成するようになりました。

まず、Babel を使ってサンプルコードの抽象構文ツリーを分析し、使用されている API を特定しようと考えました。メンターにこの考えを話したところ、同様の取り組みが以前からあったことがわかり、このアプローチの実現可能性を確認しました。コードが完成すると、メンターと彼のチームの他のメンバーが、コードのセグメンテーションへの注意、コードスタイルの標準化、関数の適切な文書化など、貴重な提案を行ってくれました。

大小さまざまなレビューを経て、コードは問題なく統合されました。スレッド全体は GitHub で見つけるか、ライブページをご覧ください。

まとめ

GSoC が私にもたらしたメリットと言えば、まずはブラウザ拡張機能 API に関連する知識を理解することです。ドキュメントを読み、新しいサンプルを書くことで、さまざまなブラウザ拡張機能 API を詳細に理解できました。

さらに、包括的なコードレビュー プロセスや PRD の作成など、GSoC の承認を受けるまでは経験がほとんどなかった多くのスキルを習得しました。また、GitHub Actions を使用してワークフローを自動化し、Babel を使用してすべての拡張機能サンプルを走査し、使用されている API を追跡する方法を学びました。さらに、Nunjucks のテンプレート エンジンを初めて体験しました。こうした能力はプログラミングに不可欠であり、学んだことを嬉しく思います。オープンソース コミュニティに参加できることは、私に喜びをもたらします。

この夏は忘れられない思い出をたくさん与えました。コーディングはコンテンツに満足できるから。患者のメンターに出会って指導し、興味深い知識を教えてくれて、経験を豊かにしてくれます。

コンピュータ サイエンス分野の知識は無限です。他者と比較した際に、オープンソースに対する私の理解は氷山の一角にすぎないことに気づきました。しかし、ちょっとした工夫が役立ちます。GSoC はオープンソースに参加する出発点として最適だと思います。

また、私の経験が、オープンソース活動に将来参加する際の参考になれば幸いです。

Google Summer of Code への参加を希望される方へのおすすめをいくつかご紹介します。

  1. 自分に合ったアイデアを選ぶ: 私の意見では、アイデアを探すときは、興味、スキルを優先することが重要だと考えています。この方法なら、投稿プロセス全体を通して熱意を維持できます。
  2. 量より質: GSoC で承認される可能性を高めるには、多くの提案を送信できます。しかし、人間のエネルギーには限界があるため、品質の方がおそらくより重要だと思います。最終的には、2 つか 3 つのアイデアに集中する方が役に立つかもしれません。
  3. 新しいことを恐れない: プロジェクトで取り組んだことのないテクノロジーをぜひお試しください。1 か月近くもコミュニティの絆を深め、なじみのないテクノロジーについて理解を深め、それを実装できる夏を過ごしましょう。頑張ってください!
  4. 事前にプロジェクトの内容を把握します。たとえば、開発ドキュメントに目を通したり、以前の commit の履歴と問題を確認したり、過去の pull リクエストをざっと確認したりできます。プロジェクトの概要を事前に把握しておくと、より包括的な提案書を作成できます。
  5. コミュニケーションを維持する: メンターと定期的にコミュニケーションを取り、問題に直面したときは躊躇せずに質問しましょう。申し込み前か承認後かは問いません。ほとんどのメンターは、進んで問題の解決を手伝ってくれるので、進行状況を追跡してもらうことができます。

ご精読ありがとうございました。