エキサイトのハッカソン型インターン「Booost」で特別賞もらえた話

# この記事はなに
この記事は私がエキサイト株式会社さんのハッカソン型インターン「booost」に参加したので、そこで得た学び的なのを日記みたいな感じで書いたものです。

# Booostとは
「Booost」とは、エキサイト株式会社が行う5日間のハッカソン型のインターンです。
詳しい情報は、エキサイトさんの情報を見てください。
[Wantedlyの募集情報](https://www.wantedly.com/projects/682788)
[エンジニア＝理系じゃない！　〜ハッカソン型インターン”Booost”の裏側聞いちゃいました〜](https://www.wantedly.com/companies/excite/post_articles/340819)

今回は、大学生、院生20人が参加していました。私は大学2年で、24卒は3人、他の参加者は大学3年で23卒がほとんどって感じだったと思います。1チーム3,4人って感じで4チームいました。

私は、エキサイト株式会社のインターンはハックツハッカソンから知りました。
ハックツハッカソンは[株式会社ハックツ](https://hackz.team/)が行うハッカソンです。
6月にあったステゴカップに参加して、自分のよわよわさを痛感して、つよつよを目指そうと、この「Booost」に応募しました。

# どんなものを作ったの？
開発のテーマが「大学生活をエキサイトさせるサービス」でした。

チーム分けは、運営側で決められたので、初対面の人とチームを組むことになったのですが、私たちのチームは女子3人というチームでそんなに緊張しませんでした。

いろいろアイデアを出した結果、私たちのチームは、学生が主催するイベントを通して、様々な出会いや発見があるサービス「Lian」を開発しました。
経緯としては、新型コロナウイルスにより、学生同士の交流が減ったことで、学生がやりたいことができないという状況となっています。そんな中で、学生がやりたいことを投稿し、積極的にイベントを主催・参加できるようなWebアプリが欲しいと言うことで、このアイデアに決めました。
エンジニアがイベントの募集で使う『connpass』の学生イベント特化版と考えてもらえたら大丈夫です。
具体的な説明は、[Topa'z](https://topaz.dev/projects/c710951218de2704c8c4)に載っています。

# ハッカソン1日目
ハッカソン当日までに私たちのチームは3人揃うって話す時間がなかったので、1日目にアイデア出し、アイデアの決定、機能概要、画面イメージの作成、API仕様書の作成などを行いました。

また、運営側で作ってくださったLaravelのテンプレート的なものがあるので、それをcloneして環境構築を行いました。あとは、データベースの設計などですかね。

あとは、役割分担を少し決めました。
私はLaravelを勉強したことがあったので、コントローラやモデルらへんを担当。
1人は、ビューを担当。
もう1人は、コントローラやモデル、あと少しビューを担当って感じになりました。

あ、メンバーのスキル的に1人がRuby on Rails、1人がJavaやC++、SwiftでWeb初心者、私がLaravelって感じで、フロントエンドのフレームワークやライブラリを使える人がいなかったので、システム構成としては、Laravelのテンプレートエンジンを使って見た目を書いたので、フロントもバックもありません。

あとAPI仕様書と書いてますが、機能概要とURL、データベースから取り出すカラムをまとめたものなので、おそらくAPIとは言わないです。

なので、1日目の進捗は、私がマイグレーションでテーブルを設計、API仕様書を作成したことと、1人が画面イメージをAdobeXDで作成、1人がデータベースを設計くらいですかね。

ちなみに睡眠時間は03:30くらいに寝て2日目の09:30くらいに起きるって感じでした。

初日に6時間寝れたのは、よかったです。まあ5日間あるので、睡眠時間0時間なんてことになったら事案です。
私の初めてのハッカソンが2日間開催で余裕で徹夜だったので、ハッカソン＝徹夜みたいなのが私の中であって、気合いだけはあるような感じでした。まあ言うなれば馬鹿ですね。

# ハッカソン2日目
ハッカソン2日目は、実際にコードを書いていきました。

私は、Laravelを勉強したことがあったので、マイグレーションファイルでテーブルの作成をしてました。
他2人は、ビューの見た目部分の作成やコントローラをやってました。まあ2人はLaravelをやったことがない2人だったので、進捗はそこまでって感じでした。各々のスキルにあった仕事を割り振るというのは難しいですね。

また、午後に中間発表があり、exciteさんの偉い方々にサービスの概要や画面イメージを発表しました。
exciteさんの偉い方々から、こんな機能あるといいよねとか、もっと大学生限定で使ってもらえる機能があるといいみたいなフィードバックをもらえたので、よりターゲットである大学生に使ってもらえるサービスにするということが大切だとわかりました。
今回のハッカソンでは時間的に最低限の機能しかつけられませんでしたが、これ以降の開発では、そこらへんを考えて機能やサービスを考えていきたいなと思いました。

そして、夜にメンターの方々と、このサービスにおける大切な機能、必要な機能を改めて考え、優先順位づけを行いました。
ハッカソンはあと3日という短い期間で、どこまでの完成度を目指すかという話で、例えば同じ大学や性別、年齢限定のイベントが投稿できるようにするなど、あったらいいなとは思いますが、これらの機能は最低限の機能ができてこそできる機能であるため、イベントの詳細表示機能、一覧表示機能、応募機能など本当に最低限必要な機能を優先順位づけしました。

この話し合いがなかったら、おそらくあと3日をいろんな機能に手を出して、結局一連の機能が完成しないということになっていたと思うので、この時に機能の優先順位づけやタスク管理を教えてくださったメンターの方々にはとても感謝しています。

で、そこから私は主にコントローラやモデルのタスクが多かったのですが、このままのペースでいくと、5日目の最終発表でまともにデモができないとなんとなく思ったので、3日目にやるタスクが2つあったので、それを夜に全部やりました。頑張った私。えらいよ私。

そんなこんなで就寝時間は06:30で、10時前に起きるという睡眠時間3時間半という感じになっちゃいました。

進捗としては、私がイベント詳細表示機能、応募機能のコントローラ、モデルを作ったって感じです。ちょっと機能の優先順位づけなどの話し合いに時間を費やしたので、そんなにチームとしての進捗はあんまりないですね。
ここは少し後悔してます。1日目でちゃんと機能の優先順位づけやタスク管理などを行っていれば2日目にもっと開発が進んだのかなと思っています。

# ハッカソン3日目
ハッカソン3日目は、午前に今日からのタスクを考えてどんどんコードを書いていくみたいな感じです。

私はタスクをどんどん消化していきました。なんか調子が良かったです。まあそんなにレベルの高いサービスではなかったので、普通にできました。もし困ったことがあってもメンターさんに相談したら解決できたので、そんなにつまることもなかったです。メンターさんありがとうございます。(n回目)

で、私は基本1人でもくもくコードを書いて、2人はLaravel初心者とWeb初心者なので、メンターさんに結構つきっきりで教えてもらって開発していたようです。
1人のビュー担当の人は、メンターさんにつきっきりでHTMLやCSSを教えてもらい、一覧画面と詳細画面の見た目を作ってくれていました。
もう1人は、メンターさんとつきっきりで、認証機能を実装してもらっていました。

そんな感じで、夜までの進捗は、私がイベント一覧機能、カテゴリ一覧機能、マイページ機能を実装と、API仕様書の修正をしました。
ビューの方は、一覧画面と詳細画面のHTMLが実装してくれました。(他の人のタスクをあんまりみれていなかったので記憶が薄いです)
もう1人は、認証機能を実装してくれました！ここで認証機能が実装できたのは、すごくありがたかったです。

まあそこから私は夜めちゃめちゃ進捗を出しました。やったこととしては、コントローラとモデルで、申し込み一覧機能、投稿したイベント一覧機能、過去に参加したイベント一覧機能、イベント作成機能、イベント削除機能を実装、シーダーファイルの作成をしました。私頑張った。

そんな感じで3日目は終わりました。

就寝時間は04：00で、10時前に起きたので、睡眠時間は6時間くらいですね。まあまあいい感じかなって感じです。

# ハッカソン4日目
ハッカソン4日目も前日と同じようにどんどんコードを書いていった感じです。

夕方までの進捗は、私がイベント作成、投稿機能のビューを実装、シーダーファイルを追加などをしました。
ビューをやってくれている人は、カテゴリ一覧画面、マイページ画面、申し込んだイベント一覧画面、ユーザーによってボタンを表示仕分ける機能を実装してくれました。最初はHTMLすらわからなかったのに、すごく成長しててすごいなと思いました。
もう1人は、ヘッダーの作成、CSS初期設定、応募完了画面、ログインなしのトップ画面を実装してくれました。

で、夕方に一連の動作をやってみたのですが、ルーティングの不備が主にあり、21時くらいまで修正、他のメンバーも修正箇所を修正しました。

そして、0時ごろにはCSSの装飾なしで、一連の動作を行うことができました！神！やったね！

そこから1時くらいまで、みんなでロゴを決めてました。デザイン沼やばいですね。

まあイベントキャンセル機能、イベント削除機能のコントローラとモデル側の実装、申し込み一覧画面、投稿したイベント一覧画面、過去に参加したイベント一覧画面のビューは優先順位が低く、切り捨てたみたいな感じだったのですが、まだ夜と4日目があるので、夜、私はイベントキャンセル機能、イベント削除機能のコントローラ、モデル、ビューの実装を行いました。やったね。

ということで、4日目にみんなめちゃめちゃ進捗を出して、5日目はほとんど修正とCSSによるデザインのみとなりました。すごい。

就寝時間は04：00に寝て、10時前に起きました。睡眠時間6時間なので、非常にいい感じでした。
やっぱりタスク管理と優先順位付けのおかげですね。

夜はDiscordに入らずに1人もくもくしてたんですが、3時くらいにDiscordのぞいたら、他のチーム全員いてびっくりしたので、私も1人でDiscord入りました。なんでかはちょっと聞かないでください。

# ハッカソン5日目
いよいよ最終日です。私たちのチームは4日目にだいたいの機能ができたので、あとは修正とデザインって感じです。

まあ午前は、私は申し込み一覧画面、投稿したイベント一覧画面、過去に参加したイベント一覧画面のビューをやってましたけど。

まあみんなで分担してデザインをしていきました。

そして、ぎりぎりではあるのですが、発表前にすべてのデザイン、一連の機能の実装が終わりました。頑張った。

いよいよ最終発表です。私たちのチームはトップバッターでめちゃめちゃ緊張したのですが、うまく説明やデモができて時間的にもいい感じで良い発表ができたと思っています。欲を言えば、データベースのことも言いたかったし、本番環境でデモをしたかったのはありますが、それでも良い発表だったと言えると思います。

あとは他のチームの発表を見守るだけで、他のチームは新しい技術にチャレンジしていたりしていて、特にDチームは触ったことのないKotlinにチャレンジして、そのうえめちゃめちゃ完成度が高く、すごいなと思いました。
Topa'zに載っているのでぜひ見てみてください。
[Aチーム(私たちのチーム)](https://topaz.dev/projects/c710951218de2704c8c4)
[Bチーム](https://topaz.dev/projects/36e518685e977d45c040)
[Cチーム](https://topaz.dev/projects/6f3c0c45445d3b4d2087)
[Dチーム](https://topaz.dev/projects/c6e3c8c72186a99bf49b)

# 結果
### 優勝はDチームでした！！！
技術的にも新しい技術にチャレンジしていて、アイデアも良く、完成度も高かったので納得でした。いや普通にサービスとして私が使いたいと思いました。

で、ここで終わりだとおもったのですが...

### 私たちのチームが特別賞をもらいました！！！

驚きですね。いやまじで。完成度は高かったと思いますが、技術的に難しい技術を使っていないので、普通に驚きました。何も賞をもらえなくても満足しているハッカソンだったのですが、はじめてハッカソンで賞をもらえたので、本当に嬉しかったです！

それもこれもメンターの方々の助けがあったからだったので、本当に感謝しております。(n回目)
また、2人のメンバーもLaravelやWebのことがわからない中でも、メンターさんに助けられながらタスクをこなしてくれたことは本当にありがたかったです。

その後、懇親会でメンターの方々の就活や仕事、会社のことなどを聞くことができてとても楽しかったです。また、私はこれをやりたいこれをやりたいって領域がないので、そのことも相談すると、メンターの方や齋藤匠さんというexciteさんの偉い方にアドバイスをいただけてありがたかったです！

# 学び
私が今回の「Booost」で得た学びは、チーム開発の面が大きかったです。

初対面のメンバーで、サービスの決定や各々のスキルを把握して技術を考えていくことの大変さがよくわかりました。

また、機能の優先順位づけとタスク管理は、すごく重要だとわかりました。特にハッカソンという短い期間の開発だと、いろいろな機能をつけたい中で、どの機能が本当に必要なのかを考えることはすごく大事だと身に染みました。miroとメンターさんありがとうございます。

もっとこうしておけば良かったなと後悔することとしては、開発の方向性という手順？的なことを最初に決めておけば良かったなと思っています。
最初にHTMLやルーティングなどで一連の流れができてからの装飾だということを最初に共有するべきでした。やはりメンバーそれぞれのどこに力を入れたいかという所がバラバラだったので、もっとコミュニケーションをとることを意識していきたいです。

あとは、1日目に機能の優先順位づけとタスク管理をしておけばよかったなくらいです。

技術的な学びとしては、データベースの設計について学びが大きかったです。いかにサービスを落とさないで、続けていける設計をするかという話を聞けて、とてもためになりました。

で、技術的な後悔としては、あまり新しい技術にチャレンジできなかったのは少し後悔しています。
まあハッカソンで新しい技術に挑戦すると、だいだい失敗するってハックツハッカソン時に実感しているのですが、Laravel1つで開発したので、私的には復習みたいな感じで、ためになった部分もありましたが、欲を言うと、フロントエンドとバックエンドを分けた開発をしたことがなかったので、そこをやってみたかったなとは思っています。
メンバーのスキル的に厳しかったので、しょうがないんですけどね。

# 終わりに
今回のexciteのハッカソン型インターン「Booost」で、私は多くの学びがあったので、この経験を糧に、技術面でもタスク管理などの面でもチーム開発で役立つエンジニアを目指していきたいなと思いました。
そのために、私はまだこれをやりたいって領域がないので、個人開発でいろいろなことを勉強して、インターンで実際のチーム開発を経験したいなと思います。