GitHub Contributions グラフを緑豊かにしてみましょう(feat. Armeria Sprint)

はじめに

こんにちは。この記事を読んでいる方の中に、GitHub contribution graphが日照り状態の方はいませんか。この記事では、その日照りの解消につながるArmeria Sprintイベントとその感想を紹介します。

時々、技術カンファレンスのスケジュールで「スプリント(sprint)」というイベントを目にすることがあると思います(例えば、PYCON Development Sprints)。あるいは、アジャイル(agile)開発手法に登場するのでスプリントという言葉に馴染みのある方も多いでしょう。では、「オープンソーススプリント」とは何か。そしてオープンソーススプリントである「Armeria Sprint」ではどのような活動が行われたのかを紹介します。

オープンソーススプリントとは?

オープンソーススプリントとは、オープンソースに興味を持っている人々が集まり、OSS(オープンソースソフトウェア)コントリビューションをしてみることと定義できます(OSSコントリビューションについては前回の記事でもっと詳しく説明しているのでご参考ください)。イベントによって差はありますが、通常は1日で終わらせます。1日の場合は、午前は全員が集まってそれぞれのタスク(どのissueを担当するか)を決め、午後はコーディングに集中します。 

参加する人は、大きくメンター(mentor)とメンティー(mentee)に分けられます。メンターは主にスプリントで扱うOSSに直接貢献した経験がある人が担当します。そして、まだ経験はないけれどこの機会に貢献してみようと参加を申し込んだ人がメンティーになります。今回のオープンソーススプリントでは、メンテナー(maintainer)である3人の方がメンターとなりました。 

なぜ行うのか

OSSコントリビューションをしてみたくても、個人的な時間を割いて作業するのはなかなか難しいですよね。また、自分一人では質問があってもどこに聞けばよいのか分からなくて迷う場合もあります。さらに、一人でやるよりも誰かと一緒に活動することでもっと頑張れる場合も多々あります。オープンソーススプリントは、このような人たちをサポートするために開かれるイベントです。具体的には、気持ちはあっても自分一人ではOSSコントリビューションに割く時間がなかったり、初めてOSSコントリビューションを試みる人たちのためのイベントです。

新しいコントリビュータの参加は、オープンソースコミュニティーをさらに豊かにします。メンターとして参加した場合でもメリットがあります。たとえば、さまざまな人と顔を合わせて彼らの質問に答えていくうちに、それまで新しいコントリビュータが参加できなかった原因は何かを確認できる貴重な機会になります。 

Armeria Sprintのまとめ

今回のイベントは、LINEで働く開発者から参加者を募集しました。メンターとメンティーの割合を考慮し、先着順10名とお知らせしました。募集を開始するとすぐに定員に達し、さらに10名がキャンセル待ちになるなど想定以上の反響があり非常に驚きました。参加申し込みから分かるように、みんな熱意に溢れる方でした。イベントは2日間にわたって開かれました。初日は歓迎セッションが2時間、2日目はスプリントが4時間行われました。

Welcome Session

歓迎セッションは参加者の自己紹介から始まりました。その後、下記の内容を軽く説明しました。

OSSコントリビューションを行う前に読んでおくこと

  • Contributing
    • プロジェクトに貢献する方法や守るべき規則について書いてあるドキュメントです。
    • Armeriaでは、上記についてChecklist for your pull requestにまとめられています。きちんと確認しておくと、コードレビューにかかる時間を短縮できます。
  • Contributor License Agreement
    • 普段、見過ごしがちのドキュメントです。通常、OSSコントリビューションの前に署名を求められます。
    • 署名について短く3行でまとめてみました(プロジェクトごとに内容は異なる場合があります)。
      • 署名の目的は、コントリビュータとプロジェクト、ユーザーを保護することです。
      • 署名が完了されると、あなたはそれぞれ貢献した部分をArmeriaプロジェクトと同じ条件で公開することに同意することになります。
      • あなたの貢献は現状のままArmeriaプロジェクトに反映され、何かバグや欠陥があっても責任は負わなくてもよいことになっています。
  • Code of Conduct
    • コミュニティーで遵守すべき行動規範です。OSSの基本精神である「自由」を追求するために守るべき行動規範を説明するドキュメントです。

タスクを決める

初日に全員が集まる一番大きな理由は、それぞれのタスクを決めるためでした。全員が集まって、初心者向けのissues(good-first-issues)を一緒に確認しました。issueごとに説明は書いてありましたが、issueが発見された背景や流れについてより詳しくメンターが説明しました。また、そのissueを解決するためには、どのような技術の背景知識が必要でどこを確認すべきか、などについてもメンターが説明しました。

担当するissueを決めたら、すぐにそのissueに「I am working on this」または「I’ll handle this issue」のようなコメントを残します。それは、他の人と同じissueを担当しないようにするためです。

開発環境を設定する

全員がissueを選んでから、みんなできちんと開発環境を設定しました(Setting up your IDE)。

開発環境を設定するとき、「fork&cloneが終わった人はペットボトルを横にしてください」という、小さな工夫を取り入れました。

スプリントの結果

下記は、今回のスプリントで新しくオープンしたプルリクエストです。

  • #1742 Allow using wildcards with RequestContextExportingAppender
  • #1743 Provide a way to create a client with an Endpoint rather than with a URI
  • #1744 Show armeria version in doc service
  • #1745 Enable to convert JSON format request to String
  • #1747 Introduce ‘export-as-curl’ button to a debug request window

今回の参加者はシャイな社員が多かったので、プライバシーを保護することにいたしました。

自分のノートパソコンは自分で守る!パソコンから離れて食べるためなら、ピザは立ち食いでも問題なし!

感想

参加者からの声

  • 気軽に質問できるメンターがいること、そしてお互いを思いやる姿がよかったです。OSSに対する漠然とした恐れを減らせるこのような機会が、今後増えてほしいと思います。 
  • 説明ではきっと簡単だと思ってissueを選んだのですが、どうやらメンターに騙されたようです(笑)。しかし、OSSコントリビューションができる時間がとれたのは、大変よかったです。
  • 開発者なら誰でも一度は「OSSコントリビューションをしてみよう」と思ったことがあるでしょう。今回のイベントは、それを始めるチャンスになったのでよかったです。
  • いざ解決してから見ると、実際のコーディングは数行しかなかった気がします。しかし、いろいろと考えさせられるissueでした。  
  • issueについての説明は簡単でしたが、既存のコードを理解するのにかなりの時間がかかりました。Armeriaのコードや仕組み全体に目を通す時間が先にあったら、より簡単にアプローチできると思います。
  • これまで他のOSSに貢献してみようと、何度か試みたことがありますが、毎回失敗しました。今回は、メンターがそばにいたので簡単に貢献できました。 
  • チームでArmeriaを使っています。開発していると何か必要なことが出てきますね。必要なことが出てきたときに、これからは直接貢献して修正できればいいと思って、今回のイベントに参加しました。コードを読みながらもっと勉強してみます。
  • 私には、issueにアプローチすることが少し難しかったです。しかし今回、基本を固めることができたようでよかったです。
  • ある程度の機能は実装できたと思いますが、プルリクエストを送る前に時間が終わってしまったので残念です。片づけて、そのうちプルリクエストを送ります。 

メンターからの声

  • OSSの開発が難しいと思う方へ:あるissueを見てどうすれば解決できるか分からない場合、どう解決すればいいのかをそのissueにコメントすることから、OSSコントリビューションが始まります。あまり心配しないで、どんどん質問してください。そのような質問が、私たちには大きく役立ちます。 
  • このイベントで、OSSに関心を持っている開発者の仲間が、こんなにたくさんいることが分かりました。一緒に同じ空間で、助け合うことができて嬉しかったです(Starのことは、みんな忘れていないですよね?)。
  • 初めてのイベントで少し心配しましたが、参加者のみなさんにとても真面目に取り組んでいただきました。ほんとうにありがとうございました。イベントは終わりましたが、質問があったらいつでもGitHubやSlackにメッセージを残してください。
  • もちろん今日、プルリクエストを送るだけでも大きな進歩でしたが、これからが本番だと言いたいです。特に、コードレビューが開発能力を高めますので、あきらめずにマージ(merge)できるまで頑張ってついてきてください。
  • コントリビュータと顔を合わせて、一緒に問題を解決する時間がとても意義深いものでした。今後もこのようなイベントが多く行われることを願います。

終わりに

参加者のみなさん、大変お疲れさまでした。今回のイベントが共に成長できる時間であったことを望みます。また、楽しい時間を過ごせたことに感謝します。今後も、さらに充実したイベントを企画していきますので、よろしくお願いします。

私は、このようなイベントは初めて担当しましたが、下記の2つのドキュメントが大きく役立ちました。この場を借りて、下記のドキュメントを作成してくださった方々にも感謝申し上げます。