はじめに
ハッカソンでWebサービスを開発するときの技術スタック比較第3弾、バックエンド編です!
最近ハッカソンにたくさん出て、いろんな人の技術スタックを見てきたので、ハッカソンで成績を残しやすい という観点から、Webサービスの技術スタックについてまとめていこうと思います!
注意:自分の中で技術スタックはある程度固まっていて、採用しないスタックについても書いています。それらについては、採用しなかった理由 として参考にしていただけると。
BaaS
これに関しては前記事「ハッカソンでWebサービスを開発するときの技術スタック比較②インフラ・デプロイ編」に記載がありますが、基本FirebaseかSupabase使っとけ、という感じです。使い分けの観点は「RDB使うかどうか」で良いと思います。
バックエンド
ここは本当に選定の幅が広い!あと僕がそんなに詳しくない!選択肢をたくさん書いていきます。
Go
強いチームが使いがちだけど、Go使ったからって勝ちに繋がるわけじゃない。 というのも、デプロイの問題があるからです。
Lambdaみたいにサーバーレスでデプロイすると料金的にも安定的にもすごく良いのだけど、GoだとVPS(virtual private server)を用意しなきゃいけない。(EC2みたいなこと)DBも含めると開発期間が長ければ長いほど料金がかかる。
十分資金があって開発期間も短い、終わった後継続開発しない、とかなら、EC2とかで良いのかもしれません。(Oracle Cloudって選択肢もあるけど無料のマシンは絶望的に弱い)
選定理由として、GORMによるORM構築、並列実行、ビルドファイルの小ささ、高速さなどがあります。
フレームワークとしてGin、Echoとかがあります。(正直この辺はあんまりハッカソンで目立たない)
FastAPI
これはよくみる。 最近はGoの次に見る(BaaSにバックエンドを依存しない強めチームはすぐにGoに手を出すので偏りが生じる)
Pythonで書けるのが嬉しかったり、開発が早かったり。小規模なAPIを建てるのにはすごい早くて、ハッカソン向きとも言えるでしょう。APIドキュメントが自動生成されるのもすごい良い。
また、最近だとLangChain、LangGraphを使いたいモチベがあったりするので、Pythonで両方かける、っていうのは良い点かもです(LangChainは最近javascript版も公式から出ています)
NestJS
TypeScriptで開発できるバックエンド っていうのは、Web開発においては一定の良さを持つと思ってます。Angular likeで、堅牢ってのが一番最初にあると思う。 Node.jsよりもなんかやってる感あるよね。
将来的な大規模開発にすごい向いてるってのもあったり、vercelデプロイが楽だったり。速度が欲しいハッカソンではvercelデプロイが強いってのはやっぱりあります(vercelが本当に、ありがとう。)
Ruby on Rails
廃れてしまった。
ActiveRecordが本当に優秀だったり、テスト生成(RSpec)やルートファイルの分割だったりがあるので、いいフレームワークなんだけど、良くも悪くも大規模開発向きなんですよね。ハッカソンではあんまり見ない。
まとめ
バックエンドの技術選定は本当に多種多様だし、僕もいろんな理由で使い分けています。
どんな特性があり、どのような開発に向いていて、どのような周辺技術があるか、どれくらい開発期間があるのか、を考えて、最適な技術選定をしましょう。