見出し画像

学生の皆さん、オープンソース貢献してみませんか?Google Summer of Codeの季節です

早いことで、2021年も2月に突入しましたね。この季節(今年はちょっと遅めですが)毎年恒例のGoogle Summer of Codeが開催されます。私が参加したのは2年前の2019年で今更感も多少ありますが、せっかくNoteを始めた、かつ自らが経験し、特に日本の学生の皆さんにも是非勧めたいということで、記事を書いてみます。

画像2

そもそもGoogle Summer of Code(GSoC)とは?

簡単に言うと、「Googleからお金をもらいながら、オープンソースソフトウェア(OSS)プロジェクトに約3ヶ月参加する」学生向けプログラムです。「それってつまりGoogleのインターンシップ?」とよく間違われますが、違います。このプログラムにおけるGoogleの役割は、「OSSプロジェクトの選定」と、「参加者に対する給付金の提供」の2つで、学生はGoogleが選定したOSSプロジェクトの中から貢献先を1つ選び、その開発者にメンターになってもらって、リモートで一緒に開発を行います。

3ヶ月間なにをするのか?

「オープンソース貢献」といっても、いろんなプロジェクトがあり、関わり方もさまざまで、初めての人にとってはイメージつかないですよね。GSoCでは、学生が貢献したいと思うOSSをリストからピックして、そのOSSコミュニティがあらかじめ用意してくれているアイデアをベースに、取組内容(=実装したい機能)を考えることが出来ます。

例えば、昨年のGSoC2020に参加したOSSプロジェクトはこちらでご覧いただけますが、有名どころでいうと、下記のような感じです:

言語系:Python、Swift、Ruby、Dart
OS系:Debian、LLVM、Arduino
データ系:OpenCV、Tensorflow、PostgreSQL、R Project
セキュリティ系:OWASP Foundation、Wireshark、Metasploit
・Web系:Django、Drupal
・デザイン・メディア系:Blender、VideoLAN
・インフラ系:Jenkins、Cloud Native Computing Foundation
・開発者ツール:git、homebrew、webpack、neovim など

そして、実際にGSoC参加者が開発に取り組んだ機能でいうと、下記のような事例があります:

PyPA: Allow pip to Download in Parallel (リンク
・Pythonのパッケージマネジャーpipによるパッケージダウンロードの並列化の実装
Tensorflow: GCS, S3 and Hadoop support for Tensorflow(リンク
・Googleがオープンソース化した機械学習フレームワークTensorflowの外部ストレージ互換性機能の実装

そう、世界中のエンジニアコミュニティ全体に対して、結構インパクトのある機能にも貢献することができます。ワクワクしてきませんか?

自分の参加したプロジェクトについて

「で、あなた自身はどのようなプロジェクトに参加したの?」という疑問を持たれると思うので、ここで少しご説明したいと思います。

参加背景
GSoC自体は、経営学部の授業が嫌いで、プログラミング未経験ながらコンピュータサイエンス専攻に鞍替えした大学1年の後期に、参加した先輩経由で知りました。そこから自分自身が参加したのは、結局大学4年卒業ギリギリのタイミングでした(海外大なので、7月卒業のため滑り込みセーフ)。動機としては、「卒業するし、就職先も経営コンサルなので、最後にOSSという形で自分が書いたコードが少しでも誰かの役に立てばいいなー」というもので、参加を決めたのは開催1ヶ月半前のタイミングです。

参加したOSSプロジェクト
OSSプロジェクトリストを見る中で、自分のDevOps経験との関連度が高かったKapitanを選びました。Deepmindのエンジニアの方々が社内で開発したものをオープンソース化したツールです(今レポジトリ見ると、deepmind/kapitanからkapicorp/kapitanになってることに気が付きました笑。あと、以下のとおりロゴが可愛いです)。イメージ、kubernetesとかterraformなどのコンフィグレーションを、きれいなヒエラルキーに整理して管理できるテンプレートツールです。私の取り組み内容はこちら(英語)にあるので、ご興味があればお読みください。

画像3

なぜ参加を勧めるのか?

ここが今回一番強調したい部分です。実際の参加を通じて感じた下記のようなメリットから、お時間のある学生の皆さんに参加を強く勧めたいと思います。

自分の書いたコードが、世界中の誰かの役に立っている実感
これはGSoCというよりOSSについて言えることですが、世界中の誰にでも無償で使ってもらえるものを、自分という開発者が可視化される形で提供することができるので、大きなやりがいを感じられます。私自身、比較的小さめのプロジェクトに参加したのですが、「この機能実装してくれてありがとう!」という感謝の言葉を、海外数カ国のユーザーから直接いただけたことが、すごく誇らしかったです。

優秀なメンターによる手厚いサポートを通じたスキルアップ
これこそがまさにGSoCの醍醐味です。通常、OSS貢献がしたいとなった場合、「メンター」として定期的に指導してくれる人を確保するのはなかなか困難です。オンライン上のやり取りで、お互いの人物像を把握しづらいし、そもそもボランティアなので指導負担を強いれないですしね。一方、GSoCなら、メンター(+メンティー)という役割がしっかりとアサインされるため、優秀な開発者に手厚く指導いただきながら、開発に取り組むことができ、確実に自身のスキルアップに繋がります。これは単にコーディングスキルが向上するというだけではなく、

このOSSに本当に必要な機能はなにか、色んな人がプロジェクトに参加する中、どうやったらメンテしやすいコードになるかをしっかりと考え、
・(OSS開発は基本的にGithub等でのやりとりとなるため)他の開発者にとっても分かりやすいテキストコミュニケーションを意識する

など、将来周りを巻き込んでプロジェクトを推進できるような一流エンジニアに必要な要件定義やコミュ力を磨けます
また、英語でのやりとりになるので、日本の学生にとってはグローバルで活躍するエンジニアになるための大きなステップとなるはずです。前述の通り、基本的にはテキストベースのコミュニケーションとなるので、むしろ現状英語に課題意識のある学生ほど、参加ハードルが下がるはずです。

ポートフォリオの充実
特に学生の皆さんは、就活で自分のプログラミングスキルを企業に披露する必要があったりしませんか?最近では、直接Githubプロフィールを企業に見せるケースも多いですよね。その場合、単なる自己完結のプロジェクトではなく、実際に誰かの役に立っているコードを書いたことを見せられるのは、選考過程で大きなプラスになります。私の場合は、貢献先のOSSを使っていた某テック企業のエンジニアから、Slackで直接お声掛けいただいたこともあります。

給付金
また、多少なりともGoogleから給付金という形でお金をいただくこともできます。もらえる額は地域によって異なるのですが、日本在住の場合は、US$2,700です(2021年は期間が短縮され10週間となっていることもあり、前年比で減額のようです)。ちなみに、5年ぐらい前は、住んでいる地域に関わらずUS$6,000ぐらいもらえたそう。

画像4

では、どうやって応募するのか?

ここもまたGSoCの醍醐味ですが、普通のインターンシップ選考とは違い、何に取り組むかをあらかじめ決めた上で、それをどのようなアプローチで取り組むかを考えるのが肝になります。つまり、一般的な就活なら、「私はこのようなことを勉強し、このような経験をしてきました。優秀なので、雇ってください」という経歴ベースでの売り方になりますが、GSoCの場合は、「この機能をこのようなアプローチで実装します」というProposalを提出し、基本的にはそれに基づいてメンターが参加者を選びます。そのため、メンターが見るのは、主に下記の3点です:

1. そのOSSおよび実装したい機能に対する理解:なぜその機能が必要なのか、その機能を実現すると、ユーザーにとってどういう付加価値となるのか
2. その機能を実装する上での課題の特定およびアプローチの選定:どのような技術スタックで、どのようなアーキテクチャで、どのようなタイムラインでやるか など
3. 提案内容を実装できる能力の裏付け

3.については、単純な経歴ではなく、現実的なアプローチが提案できているか(例えば、現実的なタイムラインが引けているか)や、そのOSSに対するこれまでのプルリクエスト(PR)の出来など、プラクティカルな部分が判断材料となります。なので、「Proposal提出までに最低1つはPRを送ってください!」というメンターは多いです。

画像4

どういう人が参加できるのか?

ここまで読んだ頂いた方の中には、「楽しそうかついい経験になるのは分かったが、自分が参加できるか分からない」と不安に感じる方もいらっしゃると思います(特に、英語に自身がない方)。そこで、どのような人なら参加できそうかを考えてみます。

(大前提として)応募資格

・18歳以上であること
・(応募ではなく)選考通過のタイミングで、学生であること。専攻は問いません
・プログラム期間中の滞在国で、就労資格があること。日本人で日本に住んでいるなら問題なし
・アメリカとややこしいことになっている国に住んでいないこと

参加できる人の特徴

1. 高2レベルの英語の読み書きができる
2. 実用的なコードがそれなりに書ける
3. 自走できる

それぞれ詳細にお話すると、

1. 高2レベルの英語の読み書きができる
辞書を引きながらでも、GithubのIssueが読めて、分からない事があればググってStackOverflowなどの英語サイトを活用できる人なら大丈夫です。

2. 実用的なコードがそれなりに書ける
ここの判断はめっちゃ難しいですが、フレームワーク/ライブラリを使って、1000行以上のアプリケーション・プログラムを書いたことがある人が当てはまるかなと想像します。年数で区切るのはあまり好きではないですが、プログラミングをガッツリ学んで、半年以上のイメージです。
とにかく参加をしたい方は、自分の得意な言語をベースに、参加するOSSプロジェクトを絞ることをおすすめします。私の場合はPython使いなので、Python系のプロジェクトに絞って応募しました。

3. 自走できる
前述の通り、応募前のプルリクエスト作成は基本的にマストですし、選考プロセスでProposalを書く必要があります。また、メンターがいると言えど、基本的には自分が主となって開発をすすめるプログラムです。なぜならOSS貢献者は、普段別の仕事をされている方がほとんどで、毎回すぐに質問に応える余裕はないからです。となると、自分でググってわかることと、メンターとすり合わせるべきことの判断ができて、効率的に仕事ができる作法が身についている人がおすすめです。一方で、遠慮しすぎるのではなくて、わからないことはしっかりとわからないと言えば優しく教えてくれるので、そこは心配しないでください。

まとめ

読み返すと、かなり漠然とした内容になっており反省しかありませんが、一人でも多くの学生に目を通してもらって、こういうプログラムがあることを知ってもらうきっかけになればよいなと思います。近年は、日本で働く海外出身のエンジニアを見かける機会が多く、エンジニアとして活躍するためには国際的な環境で活躍することが今まで以上に求められるので、学生のうちにこのようなプログラムに参加するのも良い経験になるのではないでしょうか。
今回はGSoCがあまり国内で知られていない前提で書いたので、プログラムの説明に重点を置きましたが、実体験ベースの話が気になる方がいらっしゃれば、教えて下さい!

2021年は、3月30日に応募開始です!

この記事が気に入ったらサポートをしてみませんか?