LoginSignup
1
0

大学生のコミュニティ内ハッカソンで初心者が優勝できた話

Last updated at Posted at 2023-09-05

はじめに

こんにちは、Sekibuuunです。名前の由来は積分記号からです。
タイトルにもある通り、初心者の私がハッカソンで優勝できたので、

  • プロダクト紹介
  • 工夫したこと
  • 苦労したこと
  • 期間中、意識したこと
  • ハッカソンに参加する上で、大事だと思ったこと

について書いていきたいと思います。拙著ではございますが、読んで頂ければ幸いです。

プロダクト紹介

私たちのチームは、LINEとNotionのデータベース(以下、Notion DB)を使用して、大学の課題を管理するLINE bot を作成しました。

きっかけ

チームメンバーの1人(私含め3人チーム)が、大学の課題管理をNotion DBで行っていて、Notion DBに課題内容を追加する時に、

  • 課題の科目名や内容などを、入力欄ごとに選択して入力しなければならない
  • 提出期限の通知設定を手動で行わなければならない

という不便を感じており、「ユーザー数の多いLINEと、Notion DBを使用して大学の課題を管理できないか」と思ったからです。

使用言語、ツール

  • Google Apps Script(以下、GAS)
  • Googleスプレッドシート(以下、スプレッドシート)
  • LINE
  • LINE Messaging API
  • Notion
    • Notion DB
    • Notion API
      スクリーンショット 2023-09-04 164659.png
      表1.使用言語、ツール

主な機能

  • LINE botからNotion DBに課題を追加(1回きり)
    • 課題登録時、科目名・提出期限・内容・着手状態をLINE botに送信
  • LINE botからNotion DBに毎週ある課題(以下、週次課題)を追加
    • 課題登録時、科目名・提出期限・内容・着手状態・曜日をLINE botに送信
  • 週次課題を、自動でNotion DBに追加
  • 提出期限になったら、LINE botから通知

課題の判断

1回だけの課題なのか、毎週ある課題なのかは、最初にbotに送るメッセージで判断します。

      表2. 課題の判断

課題を登録する仕組み

LINE botに入力した内容をスプレッドシートに保存し、保存した内容をNotion DBに入力します。
スクリーンショット 2023-09-04 164340.png
表3.動作イメージ

毎週ある課題を自動で追加

最初に週次課題の登録で設定した曜日になったら、GASのトリガー機能を利用して、Notion DBに課題を自動で追加する、という機能です。
GASのトリガー機能とは、ユーザーが設定した曜日や時間になったら、決められた関数が自動で実行される、という仕組みです。
(参考画像がなくてすいません)

提出期限になったら通知

提出期限になると、LINE botが通知してくれます。
課題内容ごとに、1つずつ通知するようになってます。
こちらも、GASのトリガー機能で動くようになってます。
55D4B2C8-C94C-4491-A965-7D74717C6C24.jpg
表4.提出期限の通知

工夫したこと

当初はスプレッドシートの1枚のシートで、ユーザーが入力した内容を保存していましたが、そのシートを見返すととても汚かったので、ユーザーの入力した内容ごとにシートを分けました。
スクリーンショット 2023-09-04 172203.png
表5.スプレッドシートの中身

シートの説明

  • 登録
    • ユーザーID
    • 「課題を登録する」「週次課題を登録する」というメッセージ
  • once
    • 1回だけの課題の内容を保存
  • sunやmonなどの名前が曜日のシート
    • 毎週〇曜日に出される課題の内容を保存
  • error
    • 登録できなかった課題の内容を保存

苦労したこと

LINE botとの会話をどう成り立たせるか

開発開始時点では、スプレッドシートを使用せずにbotを作成しようとしており、ユーザーがbotに送信したメッセージを、どうbotに判断させようか悩みました。
「スプレッドシートにユーザーが入力したメッセージを、保存させれば良い」と思い、入力したメッセージをスプレッドシートに保存し、そのメッセージの内容でbotの返答内容を決める、というコードを書くと、うまくbotと会話できるようになりました。
「ユーザーが入力したメッセージをスプレッドシートに保存」という仕組みは、botが想定していないメッセージの判断にも、とても役立ちました。

チームメンバーの各々書いたコードを1つにする

私たちのチームではGitやGitHubを使用しませんでした。
GitHubではコンフリクトが起こったら自動で判断してくれますが、GASではコンフリクトを判断する機能はないので、1つ1つコードを確認し、コンフリクトがないかチェックしていました。相当骨が折れました。
また、関数の返り値が別の関数の引数として機能するように、コードを整理することにも苦労しました。

期間中、意識したこと

報連相

一番意識しました。チームのチャットで細かく連絡をし合い、「今、誰が、どのタスクをしているか」を共有できるように心がけました。また、困ったことや変更点があれば、すぐにチームで共有しました。
突然ですが、皆さんに質問です。
「ハッカソン中、なかなかミーティングの予定が決まらない...」 ということはないでしょうか?
私たちのチームではそれを防ぐために、毎回のミーティングの最後に、必ず次のミーティングの予定を決めました。
こうすることで、チームメンバーとの連絡が途絶えることがなくなり、メンバー全員のハッカソンのモチベーションが0にはならないと考えています。
このように、私たちのチームはハッカソンに参加したチームの中で、ミーティング回数やチャットのやり取りが一番多いと思っています。

タスクを均等にする

最初にタスクを決めて数日経過すると、チームメンバーそれぞれのタスクの量に、偏りができるようになってしまいました。
そこで私たちは、メンバーの出来る範囲でタスクを振り直す ということをしました。それぞれの取り組むタスクの量を均等にすることで、「僕(私)しかタスクに取り組んでおらず、他のメンバーがやってくれない」などのようなワンマンが減ると思います。

ハッカソンに参加する上で、大事だと思ったこと

報連相

先ほども述べましたが、報連相が上手くいかないと、開発が全然進まず、結局「何やってるんだっけ?」ということになりかねないと考えられます。
アイデア出しやコードを書くことも大事ですが、それ以上に大事だと思いました。

MVP開発

これは同じコミュニティの人が教えてくれました。以下の記事を読むと、だいたいのイメージが湧くと思います。

参考記事1:https://uxmilk.jp/65654
(引用:UX MILK、MVP(Minimum Viable Product)とは?実践するメリットと検証方法)
参考記事2:https://monstar-lab.com/dx/about/about-mvp/
(引用:Monstarlab Blog、MVP(Minimum Viable Product)とは? 意味や開発プロセスを解説)

私は、とりあえず最小構成で作って、それからどんどん機能を追加していく ということだと解釈しています。この開発手法に基づくと、機能は少ないですが 完成 するので、発表するときに「何もできませんでした」ということは無くなります。
以前に1回だけ出たハッカソンでは、MVP開発を心がけなかったので、完成せず発表することになり、悔しかったです。

タスク管理

先ほどと少し内容が被ってしまいますが、私たちのチームでは、タスク管理をNotionで行い、Notion上で チケット管理 のようなものをしていました。
この方法も、MVP開発を教えてくれた人から教わりました。
チケット管理については、以下の記事をご覧ください。

参考記事3:https://www.chatdealer.jp/me/basic/ticketing-system.php
(引用:楽ラクス!Chat DealerAI、チケット管理とは?メリット・デメリット、管理のポイントを解説)

チケット=タスクに優先度をつけ、優先度の高いものからタスクを終えることで、機能が増える感じがして、嬉しかったです。また報連相の所でも書きましたが、「今、誰が、どのタスクをしているか」が一目で分かるようになることも、大きかったです。

最後に

長くなってしまいましたが、ハッカソンで感じたことをいろいろ書かせていただきました。このLINE botは、サービスとして使えるようにするため、継続開発をしていく予定です。ハッカソンの楽しさを知れたので、これからもハッカソンに積極的に参加していこうと思います。
チームメンバー、助けてもらった同じコミュニティ内のメンバー、ハッカソン運営の皆さんに感謝しつつ、この記事を終わります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0