ScalaMatsuri 2020 におけるハッカソンの仮想化

in

本稿は ScalaMatsuri Day 2 アンカンファレンスで OSS ハッカソンを仮想化したことのレポートだ。誰かがアンカンファレンスのトピックとして提案したらしく、僕は朝会でファシリテーターとして申し出ただけなので事前準備は特に無し。元々は 4時間 (JST 正午 - 4pm、EDT 11pm - 3am) で枠をもらったが、うまく回ったのでコーヒーブレイクの後も数時間続いた。

アンカンファレンスをやるときにいつも強調してるのは「二本足の法則」で:

いつでも自分にとってその場からの「学び」や自分から場への「貢献」が無いなと感じた場合: 自分の二本足を使って別の場へ移動すること

オンラインのアンカンファレンスで、複数のセッションが行われているので別のトークを見るために抜けたり途中から参加することは自由であることを事前に伝えた。

使ったもの

  • Zoom Meeting
  • Discord
  • Google Docs

主なコミュニケーションは ScalaMatsuri が用意していた Zoom Meeting を使った。これで異なる参加者が自分の画面を共有したり質問をしたりできる。潜在的な問題としては、全員が他の人全員を聞こえる状態になるので、複数のグループが同時にペアプログラムをしたいといった状況には向かない。

テキストベースのコミュニケーションとしては Discord を使った。Discord はリンクを共有したり、質問をしたりにも使う。僕たちはやらなかったが、Discord のボイスチャンネルを使って画面の共有も可能なのでプロジェクト毎にボイスチャンネル分かれるという使う方もできると思う。

プロジェクトと GitHub issue の列挙、どの作業をしたりのかのサインアップには Google Doc 一枚を使った。

流れ

  • メンターをできるプロジェクトメンテナの人が参加してるかを聞く
  • プロジェクトメンテナは他の人が手を付けやすい good first な GitHub issue を Google doc に書いて、Zoom でその簡単な説明をする。
  • 参加者は issue の隣に自分の名前を書いてサインアップする (ペアで一つの issue に取り組むことも可)
  • プロジェクトメンテナは単体テストと統合テスト (scala/scala だと partest、sbt/sbt だと scripted) の走らせ方を解説
  • 自分も共同作業する場合はプロジェクトメンテナはもっとチャレンジングなタスクを提案してもいい
  • 人の出入りがあるので、上記をリピート
  • 基本的にはミュートしてハック
  • ファシリテーターは、皆が作業するものがあるかどうかの確認を定期的に行う
  • 誰かがタスクを完了したら成功でも失敗でも Zoom で軽く発表する。(参加者が多い場合はこれは1日の最後にやってもいい)

scala/scala

Scala のコンパイラや標準ライブラリが開発される scala/scala にコントリビュートに興味がある人が多かった。明らかなバグ修正じゃない場合は scala/scala へのプルリクは数ヶ月放置されたりする可能性もある旨を注意した。

面白いことにアサインされた最初の issue は参加していた @exoego さんがエンバグしたものみたいだったので渋谷さんとペアで見ていただきました。

役に立つかもしれないリンク:
- https://github.com/scala/scala/blob/2.13.x/CONTRIBUTING.md#junit
- https://github.com/scala/scala/blob/2.13.x/CONTRIBUTING.md#partest
- https://docs.scala-lang.org/ja/overviews/reflection/symbols-trees-types....

sbt

good first な issue を考えるのはどのプロジェクトでも実は難しかったりする。簡単すぎる場合もあれば、一見簡単に見えて一日じゃ直すのが不可能なバグであったりする可能性もある。sbt に関しては、最近出た sbt 1.4.0 新機能周りのバグ修正を提案した。

sbt-gpg

Airframe

メンテナの Taro Saito さん (@xerial) が参加してて Scala Steward だと Scalafmt のバージョンを上げたあと scalafmt を走らせないので PR が止まっててそれを誰か手動で直してくれないかというリクエストがありました。

Scala Steward

TATSUNO Yasuhiro さん (@exoego) は大本の原因を直そうと Scala Steward 本体へチャレンジ。

まとめ

今後レビューなどが入って引き続き作業が必要なものもあると思うが、皆で 12ぐらいのプルリクを送ることができ、うまくいったと思う。当然誰かが 1日で作業できるよりも多くの作業量だ。そういう意味では、このようなハッカソン的なイベントを行うことは issue を見つけて、有志の人が集まれる場があれば多大な戦力倍増となると思う。

GitHub issue の話をしたりコードを書いたりというコンテキストを通じて、もう何年も知っている Scala プログラマーと楽しい時を過ごせ、今まで話したこと無かった人とも話せたのは良かった。誰もコード書かなかったら機能しなかったセッションなので、参加してくださった皆さんありがとうごさいます。