ハッカソン終わりました〜〜!

AWSに苦しめられたこの2ヶ月... 乗り越えました!

2021年06月13日

5Gエクスペリエンス・ハッカソン

KDDIが主催する「5Gエクスペリエンス」ハッカソンが終わりました!僕らのチームは「みんなで一人旅」ということで, リアルタイムな位置情報と画像の共有をするAndroidアプリを作りました! ぼくらのチームはなんと!入賞しました〜〜! 虎ノ門 KDDI DIGITAL GATEにて表彰式が行われました!( 7人全員は集まれず...) そして, 優秀賞を取ったということで, ABC2021Springの登壇と, Interop21Tokyoでの発表も決まりました!!自分の知らない世界がどんどん広がり, もう感無量です!
ぼくらのチームは7人構成で開発を進めていきました. その中で, ぼくはAWSを用いたユーザー管理を担当しました!これがぼくの地獄の2ヶ月の始まりでした...

AWSを用いたプラットフォーム開発

これまでWebアプリの開発などしてこなかったので, もう手探り状態で一つ一つ試していった!今回のAWSの構築は主に以下のように, Cognitoによるユーザー認証, DynamoDBによるデータベース, そしてそれらを操作するLambda関数とAPIとして他の開発メンバーに使ったもらうAPI Gatewayで構築してみました. AWSのネットワーク

なにが大変だったかというと... APIの知識が無さすぎたから, ほんの少しのことをやるにしてもエラーの内容などがわからず, 1つ1つ調べて理解しなければならず, ものすごい時間がかかってしまった...

AWS開発のメモ

基本的なAWSの知識は, AWS Hands-on for Beginnersから勉強したので, それを書き殴っていきます.
・DynamoDBはテーブル名を初期化しておく. そして, 実際にDBを操作するLambda関数を作る. そのときのポイントは2つ!1つ目は, IAMロールという許可権限を加えること. 2つ目はSDKというものを利用するということ.
・1つ目のIAMロールの設定が結構どの段階でもネックになる!DynamoDBとLambda関数をつなげるのは「AmazonDynamoDBFullAcces」である. 2つ目のSDKは, pythonで書く場合でもnode.jsで書く場合でも必須モジュール!今回は, python boto3にずっとお世話になりました!
API Gateway(左) Lambda(中) DynamoDB(右) ほいで, 一番しんどかったのは, lambda関数とAPI Gatewayを使ったWeb APIの作成!これ!ほんとこれ!

WebAPIを使うために把握すべき7つの要素がある. ざっくり言うと以下の7つである.
1. Base URI : https://qiita.com/api/v2/items の場合だと, https://qiita.com/api/v2 まで
2. Resource : どんなデータを操作するか https://qiita.com/api/v2/items の場合だと, このURL全部がResource
3. Method : GET, POST, PUT, DELETEなどHTTP原則に基づく (pythonでrequests.get('URL')とか4種類あるよ!) こんな感じ!
4. Query : データ取得時に使われるパラメータ Query String(クエリ文字列). 「?」の後に続く文字列
5. Authentication
6. Header : 対象のAPIに対して追加する情報(どんな形式でデータをやりとりするかなど, jsonとか)
7. Body : WebAPIに渡すためのメインとなるデータの指定するための要素 (引数の集合みたいな...)

これをあんまりわかってなかったから, 「ユーザーの情報追加はPOSTでbodyのjsonを使って!」って開発メンバーに言われて... 泣いてました...(泣) 実際にチーム開発で必要になったAPIの使用例

そこでチームメンバーにアドバイスをもらったデバックツールがPostman. bodyを設定してPOSTのAPIテストなどさまざまなことができる. 使い方はここ! API Gatewayに返却するために, Lambda関数のreturn文の書き方には制約があり, 「python 統合レスポンス」のように書かないとエラーっす!
ちなみにエラー内容は, Lambdaの「モニタリング -> CloudWatch」からError内容を確認できるぞ!

アプリケーションの動作

発表用に, 作成したアプリケーションの動作紹介をチームメンバーで作成したので, 以下に紹介. デモ用なのでCognitoの認証機能が省かれてしまって悲しい...
あと, 開発メンバーがぼく以外, 関東の人たちばかりだったので, 地図上に名古屋にいる自分が見えていない...
動作の紹介 実際にAndroid端末からログインすると, 自分が管理したDynamoDBにその情報がどんどん追加されいくのを見ると, 「ああ、ちゃんとできてるわ〜」と感動した. こうやって実際のアプリケーションでは何千, 何万人のユーザーのデータを管理している人たちって本当にすごいなと感じた.

ハッカソンを通して

アプリケーション開発の経験を積めたのは本当に大きい. これまでの研究活動で, ある程度のAIの知識と実装力を身につけることができた. けど, それを実際のサービスとして形にするためには, AI以外の設計が何よりも大切なんだと痛感した.

あと, 社会人の方々と一緒に開発できたのもよかった. 開発が爆速で進むので, 自分の進捗の遅さにものすごい焦った... もちろん経験値が足りないのはわかっていたけど, 社会人の, 現場で働く人のレベルの高さを肌で感じ, もっともっと成長しないといかんな〜っと感じた!次はWebアプリケーション開発だ!今回よりもさらにいいモノを作るぞ!!

参考資料
cf) 5Gエクスペリエンス アイディアソン・ハッカソン
cf) ABC(Android Bazaar and Conference) 2021 Spring
cf) Interop 2021 Tokyo

apkのダウンロード