こんにちは。、まっくす(@maximum_80)です。 JPHACKS2020のアドベントカレンダー向けのエントリーです。
今年はコロナの影響もあり、色々と大変なことも多かったのですが、無事にJPHACKSの開催を終えることができました。その中で、今年はチーム開発力を競う新しい取り組みにを実施したので、ご紹介したいと思います。
この記事が役に立ちそうな人
- オンラインで開発者向けイベントを開催している人・企画している人
- オンラインでのチーム開発力を高めたい人
同様の企画はまだ自分では見つかっていないので、比較的ユニークな内容なのではないかと思います。(もし近いことをやられている方がいれば、是非情報交換したいです!)
TL;DR
- 400名規模のフルオンラインハッカソンを開催した
- オンライン上でのチーム開発力を競うコンペ企画を運用した
- 「チーム開発実践入門」をベースに、Criteriaを作成した
- GitHub API / Google App Scriptを使って自動採点してSlackに毎日ランキングを投稿した
- はじめての企画で課題はたくさんあるが、参加者からは楽しんでもらえたので、来年もオンライン開催の場合は改善して実施したいと思う
JPHACKSとは
JPHACKSとは全国の学生を対象にしたハッカソン型のコンテストで、2014年から開催を初めて、今年は7回目の開催です。
という想いから、東京大学情報理工学研究科と開催をしたのがきっかけで、あれよあれよと規模を拡大してきて、現在に至ります。
現在では、20校近くの学校と連携し、全国400名以上の学生が集まる、日本でも有数の規模のハッカソンになっています。
私をはじめ当社では運営事務局という形で、企画から運営までを担当させていただいてます。
今年は完全フルオンラインでの開催
本場の甲子園が中止になったりと、コロナの影響をうけて、我々も開催可否について組織委員の先生方とたくさん議論をしました。
しかしながら
甲子園の文化をつくるなら継続が重要なので、規模を縮小してでもなんとか開催はしたい!
という熱い想いを受け、時期早々に「完全オンライン型」に切り替えることを意思決定して、4月ごろから開催に向けて準備を進めてきました。(正直当初はかなり不安でした。。。結果としてオンラインが功を奏して規模は過去最大になりました)
オンラインでチーム開発ができるのだろうか
開催にあたり、コロナ禍において企業のインターンシップも減ってきている中で、実践的なチーム開発をする機会を得ることは容易ではないので、学生がフルオンライン型でアイデアを決定したり、役割分担をして開発を円滑に進められるのか、という部分に不安がありました。
オンラインでのチーム開発力を讃えたい
しかしながら、学生にとっても企業にとってもこのような With/Afterコロナ時代においては、これまで以上にオンラインツールを活用しながら、チームで円滑に開発を進めていくリモートでのチーム開発力は重要になってくるのではないか と考え、これまでのJPHACKSでは特にスコープをしていなかった開発プロセスにおいても、何か焦点を当てられないかと議論をしました。
そこで、今年の開催では チームでの開発力が高いチームに対して特別な賞を用意しよう という話になり、今回の取り組みを実施することになりました。
賞を用意するのはいいとして
それってじゃあどうやって決めるの?審査するのは大変ではないか?
となり、人為的ではなく、完全に自動でスコアリングして公正に順位を決めるコンテスト形式のアイデアを思い付きました。
実際にやったこと
Best Team Collaboration Award という賞を新設し、サブ企画として任意参加でプチコンテスト開催
Hacking期間(1週間)の間に、チーム開発のベストプラクティスの実践をしているチームをスコア化して競いあうプチコンテストを開催することにしました。
JPHACKSでは、初めてチーム開発を実施するような比較的チーム開発初心者の方もいることや、本筋としてはプロダクトで競いあうことが重要なので、全員必須参加とすることはせずに、あくまでチーム開発力を競いたいチームだけが任意で参加できる形式を取ることにしました。
チーム開発実践入門をベースにCriteriaを作成
採点基準は、まず骨子となる参考を決めたいと思い、色々考えた結果チーム開発実践入門という書籍で紹介されているチーム開発のベストプラクティスを
- ソースコード管理
- チケット管理
- CI/CD(継続的インテグレーション・デプロイ)
という観点から、達成項目をCriteriaとして作成して点数を決めて、合計点を競う形式にしました。
実際の採点項目を一部公開します。(全部公開してしまうと対策できて来年使えなそうなので全部は公開しません。。。)
GitHub API & Google App Script で採点の自動化
JPHACKSでは幸い、全てのチームにGitHub/Slackを提供していました。そこで、基本的にはチームごとのリポジトリから、GitHubAPIを経由して上記のCriteriaを達成しているかを判定して、採点をおこなうスクリプトを作成することにしました。(Google App Scprit)(ソースコードは公開できないですあしからず)
Slackでスコア状況をリアルタイムで実況
また、競い合うような空間設計をしたかったので、コンペティションのようなリーダーボード運用をしたいと考えました。
そこで、専用のSlackチャンネルを作って、そこに毎日2回、現在のランキングをボットで投稿して、競い合える状況を作りました。
コンセプトは事前に公開しておりますが、採点項目の詳細開示しないようにして、参加者が項目を考えながらチーム開発を進めていくような座組みをつくりました。(いわゆるプライベートジャッジのようなイメージ)
実際にやってみた結果
やってみた結果としては、狙い通りチーム開発ガチ勢のチームが最終的に優勝しました。
優勝チームのリポジトリがこちら
ブログでもチーム開発の進め方をまとめてくれています。
そういった意味では、ある程度信憑性のあるCriteriaを作ることができたのではないかと思います。
予想以上に参加者に楽しんでもらえた(80チーム中25チームが参加)
10チームぐらいが参加してくれたらいいか、と思っていたのですが、想定以上に多くのチームに参加をしてもらえました。
Best Team Collaboration Award!!??
— kugi (@kugi_masa) 2020年10月31日
アツイ!!!!!#JPHACKS
点数の高いチームのリポジトリを覗きにいくチームが発生
リーダーボードを公開していたのですが、基本的にGitHubは公開されているので、開催期間中に順位の高いチームのリポジトリを覗きにいくという事案がありました。
個人的にこれはとても良かったと思っていて、優秀な人たちがGitHub上でどんなことをやっているのかを調べたり、ベンチマークして真似してみようと思うのは学習プロセスとしてもとても良い流れが組めたのではないかと思います。
改善点
実際に運用してみて、懇親会で学生からフィードバックをもらったので、次年度以降に継続する場合の課題や改善点をまとめます。
特定の開発領域(特にハードウェア)が不利に感じる
GitHubで管理している性質上難しい部分ではあるのですが、ハードウェア、デバイスを使って開発をしているチームにとっては少し不利になってしまいました。
ハードウェアを用いる場合はチームコラボレーションというよりは、どちらかというと一人ひとりでパッキリと役割が分担されているケースが多いので、ブランチを切っての作業やコードレビューなどが行われにくいのも性質としてあると思います。
フレームワークを使うと結構有利に(実際は目チェックで最終点数調整をした)
最近流行のフレームワークを用いると、デフォルトでテストコードの雛形が用意されていたり、基本的にビルドの自動化がされることが前提だったりするため、特定のフレームワークを用いるだけで点数があがってしまうケースがありました。
テストコードの記述に関しては、最終的に一つ一つのファイルを読みにいって、デフォルトのコードなのか、それともテストコードを編集してテストが書かれているのかを確認して点数調整を実施したのですが、このあたりはある程度採点の項目を細分化したり、採点の重み付けを変更したり、自動化していきたいと思いました。
終わりに
今回JPHACKSの企画の一環として実施したものになりますがミクシィさんが実施されているGit Challenge*1のような形で
- 企業のインターンシップ企画として活用する
- 技術研修の一環としてチーム開発時に用いる
などなど、企業のHR活動としても応用できそうなポテンシャルを感じたので、色々と模索していきたいと思いました。