学生のためのハックイベントに参加した話・前編「事前準備」 - JPHACKS 2024
はじめに
皆さんはじめまして、日本のどこかにいる学生のMikutoです。
本記事では、先日参加させていただいたイノベータを目指す学生のためのハックイベント「JPHACKS 2024」で得た経験をまとめています。
目に見える形で残る結果こそ得られませんでしたが、まだまだ詰めの甘い私の経験談が、ハックイベント・ハッカソンに興味がある、またはとんでもない化け物集団が参加しまくって自分にはまだ早い恐ろしいイベント、と思っている同じ学生の皆さんが参考になれば幸いです。
また、この話は前後編で分かれており、今回は事前準備でしたことと振り返りをしています。
後半では「HackDay当日の話」をしていますのでこちらも是非見てくださいね。
作った物
「新たな世界に会いに行こう!」というコンセプトのもと「Music Walk」というスマホアプリを、未完成ですが作りました。
通勤通学をはじめとする移動中、よく音楽を聴いてる人を多く見ると思います。そんな人を見るとこんな考えが浮かんでくるんじゃないでしょうか?
何聴いてるんだろう、と。
本アプリでは上記の問題に対し、私たちはGPSやBluetoothを使用し、地図上に置かれた音楽タグや、同じアプリを使用している人との近距離通信で他の人が聞いている、または、おすすめしている曲を取得することができるという解決方法を取り、新しい音楽との出会いの機会を提供しています。
ソースコードはこちら
画像準備中...
JPHACKS2024でやったこと
ここでは実際に行った開発・実装の流れや、やってよかったことと当日起きたトラブルについて、事前準備と当日二日間それぞれの3つに分けて記述していきます。
今回は前半という事で、「事前準備」でやったことを取り上げていきます。
事前準備
そもそもどんな日程?
JPHACKSでは、始めてのハッカソン参加者向けのLearning Day(参加経験があってもとてもいい内容で参考になります)や実際に開発をする2日間のHack Day、そして、開発したものを評価し選出されたチームへ出場権が与えられるAward Day等の日程があります。この中で重要なのは実際に開発するのは2日しかないことです。事前開発・準部はして大丈夫とのことですが、各審査の対象はあくまでHack Day期間内での開発が対象になるようで、基本的にプロダクトの重要な部分はHack Dayで作成した方が確実なようです。
事前準備でやったこと
大まかな流れとしては、「アイディア出し/要件定義→技術選定→開発環境整備→フロント/バックそれぞれの学習/開発」という流れで準備を行っていました。それぞれの詳細は以下の通りです。
-
アイディア出し/要件定義
大人数かつもともと繋がっていたメンバーであったため、とにかくアイディアを書きだし、その中から候補を絞り込むといった形を取りました。その後、決定したアイディアから、ユーザに対してどのようなメリットがあるのか・どのような悩みを解決するものなのか考え、サービスの詳細を決定していきました。その後、詳細から必要な機能を洗い出し、作るべき順番や必要なものを明確にしました。Learning Dayで、アイディア周りの考え方を習得でき、さっそく実践することができるようで、非常に活発なアイディア出しとなりました。(なお、HackDayまで残り6日のこと) -
技術選定
技術選定をする上で、フロントエンドとバックエンドで振り分ける人員を考えた上で、次のような考えと主に使用する技術を使用するようにしました- フロントエンド
考え: スマホアプリとして実装し、BluetoothやGPSを使うことやAndroid/iPhone両者で動作する必要がある
選んだ技術: Flutter - バックエンド
考え: ハッカソン参加が初めてな人が多く、言語も多く取得していないため、全員が共通で学んでいたPythonを主体としたい。また、スムーズかつ安全に導入できる認証システムが必要
選んだ技術: FastAPI, SQLAlchemy, Firebase, etc...
このような考えを取ることで、各メンバーが全く新しい技術を取得するか、今使っている技術への理解をさらに深めるというどちらかを選べる状況を作ることができました。普段使いなれている技術を深めるか、新しい技術に挑戦し短期間で習得するかの選択ができるのも、ハッカソンの魅力だと考えています。
- フロントエンド
-
開発環境整備
サービスの概要・要件定義・技術選定を行った後、いよいよ開発に入ります...が、この開発を大人数で円滑に進めるためには、開発環境の整備が欠かせません。まるで開発環境の整備をいつもきっちり行っているかのような言い方ですが、実際私も初めてこの段階としっかり向き合いました。(とはいえ、他のメンバーが率先してくれた)
テスト用のコンテナは基本的にdocker compose up -d
で簡単に立ち上げることができ、変更を即座に反映できること、様々なテンプレートを組み合わせ作成されたファイル構造etc...とにかく「これやれんと実務なんかむりやろ」となりそうな環境が手元に来ました。すごく感想文になりましたが、開発環境の整備はやっときましょう。誰の端末でも同じ環境で進めることができたりと、後々楽になります。 -
フロント/バックそれぞれの学習と開発
開発環境が整ったのでいよいよ開発です。人数も多いため、約半々でフロント/バックと割り振りし、各々がタスクを開始しました。
私はバックエンドを主に担当し、ひたすらにAPIのエンドポイントとデータベース操作を実装するタスクを行いました。手元にはものすごく整ったフォルダ・ファイル、見慣れないライブラリ...自身の知らないルールや関数が多いため、とにかくそれらを調べ試し直しをひたすらに繰り返しました。普段はZennやQiitaの記事を中心に読み込み理解を深めていましたが、メンバーからの助言で公式リファレンス又はソースコードを主に読み、そこでも理解しきれなかったものを他サイトで補うという流れを取りました。なんで今まで公式リファレンスを読まなかったのだろうと後悔するほど、スムーズに理解を深めることができます。基本的に日本語非対応で、英語のみのサイトは多いですが、そんな場合は有志が作成した日本語訳リファレンスやGoogle翻訳を使用し、多少文章が崩壊するものの、使い方を知る分にはあまり支障なく進めることができます。
また、実際にコードを書きGithubでPullRequestを送った後のレビューも、チームでコーディングする際の認識の不一致を防ぐ上で非常に役に立ちました。先ほど述べたように、手元には整ったフォルダやファイルの構造があり、どこにどのような役割があるかすべて理解した訳ではない状態で開発を始め見よう見まねで進めため、適切なコードの分割が行えていないことがほとんどでした。そのため、理解しているメンバーからレビューで指摘をもらうことで、モジュールの再利用のしやすさや可読性を上げる方法を身に着けることができました。個人かつ小規模でよく開発を行っていたため、このような問題と解決方法、次回へのつなぎ方を身をもって経験できるのはハッカソンならではだったと思います。
事前準備を行って考えたこと
ここでは、私が事前準備を通して思ったこと・考えたことをまとめています。主に自分への教訓の側面が強いため、こんな考えもあるんだな程度で見ていただければ幸いです。
事前準備で感じたやっておけばよかったこと
もし仮に、今回と同じような日程で事前にやっておけばよかったこと、いわば事前準備の事前準備で行うべきでろうという私の考えをまとめます。技術選定については作るサービスによって変化するため、対策は難しいと考えた上で以下のような点があると考えました。
- git/githubの使い方の確認(チーム)
今回の場合はハッカソン初心者が多いこともありましたが、やはり共同開発の基礎ともいえるgit/githubについてどれほど理解しているかは事前にヒアリングし、対策を講じた方がアイディアから開発へスムーズに移行できます。また、使える人であっても、一人一人がそれぞれの機能に対する考え方が違う可能性があるため、事前にルールを決めれる部分は明確に提示することで、余計な混乱を避けることができます。 - ソースコードを読む慣習(個人)
この考えは実際に試した訳ではなく、現時点ではこうすることで解決できるというものですが、公開されているソースコードを追うことによって、ファイル構成の理解や、他人に見てもらう又は他人のを見る機会が多い場合に役立つのではないかと考えています。
事前準備でやってみてよかったこと
実際に事前準備中に行ったことで良かったと考える部分は以下のような点です。
- 教えたことを別の人に教えてもらったら先に教えた人に教えてもらう
作業効率は少々落ちますが、理解したての人が分からない人の助けに入ることにより、教える側として立つことでより理解が深まると考えています。この時に、最初に教えた人もサポートとして声が聞こえる範囲にいればもし間違った理解をしていた場合、すぐに教えることができるのでより良いです。
前半まとめ
ここまで、事前準備の段階にスポットライトを当て実際にしたこと、その中でも良かった点悪かった点についてまとめてきました。前半部分を読み終えて皆様どう思われていますでしょうか。「あぁ、こんなもんか」って思う方や「うわやっぱ準備からついていける気がしない」と思う方もいるかもしれません。私自身は、改めてこの文章を読むと「すごい作業量だなー」と認識しています。この事前準備やチームでの開発をしてみると自分には足りないことや、自分の持ち味を発揮できる場所を見つけることができます。まだ、後半の「HackDay当日の話」が残っていますが、この記事だけでも「ハッカソンをやってみよう」「なんか開発モチベーション上がってきた」と思っていただければ幸いです。
Discussion