この記事は DeNA 24 新卒 Advent Calendar 2023 6日目の記事です
すでに色々なジャンルの記事が上がっていますし、これからも上がっていくので是非お見逃しなく!
はじめに
こんにちは、かさはら(@kshrdsg)です。
みなさん、ハッカソンは好きですか?私は大好きです。
たまにハッカソン後の交流会などで「どんな技術を使っているか」、「どのように選んでいるか」という話題が出てくるので、この機会に自分がハッカソンでよく使う技術についてまとめてみようかなと思います。
選定基準
まず、普段私がハッカソンで使う技術を選ぶ軸は以下の3つです。
1. 素早くアイデアを実装できること
私はハッカソンという場を、とりあえず思いついたものを作って楽しむものとして使っているため、第1にスピードを置きがちです。
慣れているとか、実現したいことを手早く実装できるライブラリがあるとか、記事が豊富とかそういうあたりですね。
2. 実装以外のことをあまり考えなくて済むこと
1にも関わってきますが、とにかくアイデアの実装に時間を割きたいので、最短距離を走りきれる技術が好きです。
デプロイが簡単だったり、コマンド一発で環境ができたり、チーム開発でもコンフリクトが起きにくかったりすると嬉しいですね。
3. チームメンバーの最大公約数であること
チームで開発するとき、誰か一人しか慣れてない技術を使うと、学習しながら作ってスピードが出なかったり、そもそもコンテキストを共有できずに開発上での齟齬が起きたりといったことが発生するので、できるだけチームメンバー全員がある程度使える技術を選んでいます。
プラットフォーム系
Firebase
言わずと知れたすごいやつです。
SDKも充実しているので大体の言語やフレームワークで使えて汎用性が高いのが嬉しいですね。
ホスティングもDBも認証もこれで済むのでこれで充足するならとりあえずこれ使っておくか〜っていう感じです。
Azure
Microsoftのパブリッククラウドサービスです。
herokuやrenderといったサービスが落ちる可能性を考えて、プランBとして用意しています。
基本的にコンテナベースで開発をしているので、Azure App Serviceを使ってデプロイしています。
ちなみにAzureは学生だとクレジットがもらえるのでありがたく使わせてもらってました🙏
Deta Space
最近知った「プライベート」クラウドサービスです。
ホスティングもAPIなどのデプロイもできますし、DB(Deta Base)やオブジェクトストレージ(Deta Drive)まで揃ってます。
管理者を複数置いてよしなにやるみたいなことが(調べた限りでは)できないのでチーム開発のときは少し大変ですね。
言語/ライブラリ系
HTML/CSS/JS
なんだかんだハッカソンレベルの開発だと一番手早く作れると思ってます。
ReactやVueなどよりも学習コストが低いので、初心者を交えたチームだと結構安定すると思ってます。
Nuxt.js
単純にVueが好きという理由で使ってます。
ページの作り方が結構HTML/CSS/JSと近いなと個人的に思っているので、学習コストもReactよりは低いかなと思い、事前準備の期間が取れるとき、かつHTMLとかは一通りかけるよっていうメンバーが揃っていたときは使うことが多いです。
基本TSは使わずにJSでやっちゃうのでTSとの相性とかは気にせず使ってます。
FastAPI
python用のWebフレームワークです。
自動でswagger UIまで作ってくれるので、FE,BEで役割分担するときに便利だなと思ってます。
Pythonなので研究とか授業で触ったことある人が多いっていうのもポイント高いですね。
MongoDB
NoSQLのDBです。
ハッカソンでDBを使うときはテーブル設計してみたいなことはあんまりせず、随時プロパティを追加したりしたいのでそこらへん柔軟にできるやつを選びがち…
スキーマをバンバン変えたくはないですが、変わったときにすぐ対応できるのは嬉しいなという感じです。
あとMongo Expressが良すぎる…
データをごにょごにょしたいときにGUIベースでいじれるので、クエリとかを覚えてなくても気軽にできるっていうのがとても嬉しいです。
Unity
ゲーム系で一番使うやつです。
単純に人口が多いので、ゲーム制作系だとチームの最大公約数になりがちっていうのも大きいです。
情報も多いので、なにか困ったときに大体対応できるのが嬉しいですね。
ただ、シーンの分け方とかしっかりしないとコンフリクトまつりになりがちなのでそこだけ気をつけたいなといつも思っています。
ツール系
devcontainer
ハッカソンでは少なからずいつもの開発環境とは異なった技術スタックで開発することになります。
ハッカソンはただでさえ時間が短く、開発環境起因のエラーとか不具合に時間取られたくないのでdevcontainerを使って開発をすることが多いです。
チームで開発するときにも、コンテナを使えば全員同じ環境でスタートできるので、なにかエラーが出たときにも手元で再現して一緒に修正できるっていうのが旨味だなと思っています。
ngrok
非常用のデプロイ環境を用意するために一応用意しています。
なんかしらんけどローカルでしか動かないときとか、デプロイ環境のスペックが足りないときとかに使っています。
特に機械学習モデルで推論させたりとかっていうときにスペック足りなくなったりするので重宝しています
おわり
以上が私がよくハッカソンで使っている技術でした!
これ以外にも、作るものに合わせてスポットで採用する技術はありますが、ほとんど上記のスタックで参加していることが多いな〜と思います。
常に色々なサービスや技術が出てきており、ハッカソンでも初めて聞く技術を使っている人達もいるので、そこら辺もキャッチアップしてどんどん自分のデッキをアップデートしていきたいなと思います。