GSoC 2024 に採択されました。

GSoC に採択された Proposal のスクショ

Google Summer of Code (GSoC) とは?

GSoC は OSS へのコントリビュート経験が浅い(or 無い)学生や社会人向けにメンターをつけて OSS コントリビュートを Google が支援するプログラムです。採択後3ヶ月の期間で活動して、無事審査に通れば Google からお金が貰えます。

summerofcode.withgoogle.com

採択された Proposal

summerofcode.withgoogle.com

僕は Dart 言語のプロジェクトに参加することになりました。

採択されたのは “Testing documentation comments” という Proposal で、Dart コード内のドキュメントコメント内に書かれたコードサンプルをテスト(analyze, lint, format、あるいは unit test)できるようなツールを作ります。最終的なアウトプットは Dart の新しいパッケージを作ることになりそうです。

Dart では慣習的にコード内にドキュメントコメントとコードサンプルが書かれることが多いのですが、コメントに書くので静的解析等が走らず保守が難しいという問題があります。特に Flutter や pub.get にあるような広く使われているパッケージには膨大なドキュメントコメントとコードサンプルがあり、それらは API ドキュメントとして他の Dart 開発者(パッケージのユーザー)にも広く読まれるので、コードに書かれるドキュメントの品質を高めることはとても重要です。

僕の取り組む “Testing documentation comments” では、そのコメント内のコードサンプルをテストできるようにすることで Dart コミュニティのドキュメントの保守をしやすくし、品質と生産性を高めることが目的です。

実際に僕が提出した Proposal は以下です。(仕事に関する項目は消してます)

docs.google.com

Proposal を書く時には以下のようなことを意識していました。

  • “Testing documentation comments” は既存の実装の改善や機能追加などではなく新たなパッケージとして機能群を作ることになるので、アイデア自体もかなりふわっとしていました。そのため、課題の背景整理や自分がどこに課題意識を持っているかをなるべく丁寧に説明しました。
  • イデアがふわっとしている = 自分のアイデアや実装してみたいものを組み込める余地がある(と思った)ので、思いついたアイデアや検討したことはとりあえず追記しました。
  • どこまでやれるか不明瞭だった(自分の出したアイデアも含めてあまりスコープを広げすぎると GSoC 期間で終わらないと思った)ので優先順位とゴールを細かく設定しました。
  • アーキテクチャも自分の中でもふんわりしていますが、ふんわりしているなりにぽんち絵を書いたりサンプルプロジェクトで試行錯誤したりして最低限詰めて、取り組む際の見通しをある程度明らかにしました。
  • 自分が社会人(特に海外の学生と比べて期間中のスケジュールがタイト)であることや日本人(英語があまり得意では無い)であることを鑑みて、スケジュールやコミュニケーションなどに関してはなるべく詳しく書きました。
  • 拙くて文法のダメな英語で書くといいアイデアを持っていても信頼されないと思うので、DeepL と壁打ちしたりしてなるべく正しい英語で書くことに努めました。(とはいえ英語力も時間も無いので実際は微妙だったと思います)

採択までの流れ

GSoC 自体は過去に参加した SecHack365 などで参加している人がいたことがきっかけで知りました。去年か一昨年あたりに社会人でも参加が可能となったので、機会があれば応募してみたいなと思っていました。

2月末か3月の頭あたりに GSoC に参加する OSS が発表され、各 OSS から Proposal の idea list が提示されるので、基本的にはその中から応募するテーマを選ぶことになります。僕は初めは Chromium などの他の OSS も見ていましたが、普段業務で Dart を書いていることもあってもっと Dart を深く知りたい・Dart を良くしたい気持ちがあり、かつ Idea list の中のテーマに惹かれたので Dart を選びました。

応募する OSS と Idea を決めたら Proposal を書いたりやる気と能力を示すためにその OSS にパッチを投げたりしますが、Dart ではIdeaに関連したcode sample を書くことが推奨されていて、僕も簡単なスクリプトを書き gist にまとめて proposal に含めました。

あとはメンターとのコミュニケーションも重要(と過去の採択者のブログとかを見て知った)なので、とりあえず取り組むIdeaを決めたらそのメンターにメールを送りました。

本当は早めに Proposal に取り組んでDraftをレビューしてもらったりするのが良いと思いますが、僕は締切ギリギリで追い込んで書き上げたのできっちりとしたフィードバックを応募期間中に貰えずに提出することになり、やや後悔しています。

あとメーリングリストもあって、そこでは他の応募者と一緒にオープンな質問を投げることができます。僕は特にオープンに質問したいことも無かったので、他の応募者のメールを眺めて雰囲気を感じたりやる気を出したりしていました。

(メンターやコミュニティとのコミュニケーションは大事なので聞きたいことがあればガンガンメールするのが良いと思います。採択率もその方が上がると思います。特に、採択されれば出した Proposal を元に取り組むことになるので採択後のためにもレビューは早い段階で貰っておくほうが良いと思います。)

Proposal は過去の参加者のブログやproposal を参考にしつつ、ChatGPT とか DeepL に教えを乞いながら書き上げました。

さいごに

日本人の参加者が日本語で書いたブログは応募時にかなり参考にさせていただき、とても助かりました。

社会人での採択は最近始まったこともあって例が少ないと思っています。本業との両立や英語など不安要素は多いですが、無事に終えられるように頑張っていきたいと思います。