見出し画像

ハッカソンで使えるバックエンド技術

はじめまして!Arumonのなんでも屋こと吉竹です。

この記事は Arumon Advent Calendar 2021 の12/7の記事になります。
迂闊にも他のAdvent Calendarにも2つ参加してしまい火を吹いてます。

Arumonメンバーは、自分たちのスキルアップや腕試し、一部の人は趣味も兼ねて(?)、度々ハッカソンに参加しています。もちろん私も何度か参加してきました。

ハッカソンでは、2日間などの短い期間で動くアプリケーションを作ることになるため役割分担をするのが一般的です。私自身はPythonが好きなこともありバックエンド側の開発を担当することが多いです。

作るモノがWebアプリ、スマホアプリやそれ以外であっても、バックエンドにAPIを構築してHTTP(S)で通信することで、動きの多いアプリケーションを作ることが可能になります。特にAWSやAzure, GCPといったクラウド技術が一般的になってからは、バックエンドも簡単かつ迅速に作ることができるようになりました。

というわけで、この記事では今までのハッカソンの開発で使ってきたバックエンドの技術を紹介しようと思います。

※バックエンドという言葉の解釈は色々あると思いますが、この記事ではスマホやWebアプリから呼び出すサーバ処理のことをイメージしてください。

AWS API Gateway + Lambda + DynamoDB

画像1

ハッカソンのテッパン構成です。もはや説明不要かもしれません。
AWSの以下サービスを組み合わせることで、簡単にバックエンドのAPIを構築できます。

API Gateway
APIの管理・集約を行えるマネージド型のサービス。クライアントのアプリから呼び出すURLはこのサービスで生成したものを使えます。

Lambda
ソースコードを登録するだけで処理を実行できるサーバレスサービス。API Gatewayと統合して、APIへのアクセスをトリガーに処理を起動できます。

DynamoDB
マネージド型のKey-Valueデータベース。AWSのコンソールからポチポチするとテーブルが作れます。LambdaからDynamoDBを呼び出せば、データの登録や参照ができるようになります。

これを使って、プレゼンが苦手な人を手助けするスマホアプリを作ったりしました。が、長くなるため詳細はどこかで話す機会があれば...

余談ですが、簡単に作れる構成でありながら、世界中の企業が本番環境でも採用しています。なので、ハッカソンと銘打ってますが実業務でもバリバリ使われる技術だったりします。

実際に私が経験したAWSプロジェクトでも上記3つを本番で採用しています。ハッカソンでの経験が無ければどうなっていたことか...

GCP Cloud Functions + ​Firebase Cloud Firestore

画像2

これも有名な構成です。構築のラクさで言ったら先に紹介したLambdaより上だと思います。
「あの店の辛さとこの店の辛さは基準が違う!」という課題を解消するようなスマホアプリのバックエンドとして使いました。が、こちらも詳細は割愛します...

Cloud Functions
ソースコードを登録するだけでAPIを構築できるサーバレスサービス。よくAWSのLambdaと比較されますが、Cloud Functionsは構築時にURLもまとめて発行される点が異なります。簡単なAPIの構築ならこちらの方がラクかもしれませんが、汎用性・実用性はLambdaの方が高い印象です。

Cloud Firestore
Firebaseが提供するマネージド型のDocument指向データベース。こちらもコンソールからポチポチすればデータが作れます。また、FirebaseはGCPとも簡単に連携できるため、Cloud Functionsからのデータ読み書きも容易です。

Firebaseはスマホアプリで使うイメージを持つ方もいるかもしれませんが、このようにバックエンドでも利用できます。

ちなみに、FirebaseにもCloud Functions for Firebaseというサービスがありますが、こちらは対応言語がJavaScriptとTypeScriptのため、Pythonが使えるGCPのCloud Functionsを使ったという経緯があったりします。

実際のハッカソンで何を使えば良いのか

好きなもの使いましょう!
ハッカソンはそんなもんです。自分が興味のある技術を使って楽しみましょう。ここでは登場していないAzure Functions使おうがKubernetes構築しようが(動きさえすれば)メンバーに怒られません。

とはいえ、特にこだわりが無い人もいるかと思いますので、個人的な経験から取っ付きやすそうなものを紹介してみました。

まずは動くものを作ってみたい方の参考になれば幸いです。

いいなと思ったら応援しよう!