Crieitの「1週間でWebサービスを作るイベント」に参加した。
作ったサービスはこちら。
[参加したきっかけ]
前回同様、きっかけとかはCrieitに書いた。
簡単に書いておくとこんな感じ。
- 前回参加時に実装したかったアプリのリベンジ参加
- ブラウザ上のJavaScript単体のアプリではなく、Web APIと組み合わせたかった
もう少し詳細に書いておく。
2020年2月末からコロナ禍の影響でチームメンバーの大半が在宅勤務になっていた。そうした状況下で、チームとしての新たな責任が降ってきたこともあり、もっと良いチームにしていきたいと考えていたところ、『カイゼン・ジャーニー』でも紹介されている「ファイブフィンガー」というプラクティスを思い出した。
ただし、自分のいるチームでは、在宅勤務中に自室をWebカメラで写さない派のメンバーもいるため*1、デイリースクラムで「せーの!」でファイブフィンガーを実施することが難しいという問題があった。
そこで、オンライン上でファイブフィンガーを実施できるアプリがあればいいのでは?と考えて実装したのが今回リリースした「5F」である。
[開発中のあれこれ]
もともと、2020年4月中旬くらいからオンライン・ファイブフィンガーアプリの開発に着手していた。とりあえずローカルマシン上でQuarkusを利用したWebSocketサーバーを実装しつつ、4月中はブラウザ側の実装を進めていた。ゴールデンウィーク前に一通り実装ができたので、ゴールデンウィーク中はQuarkusで実装したサーバーサイドの実装をAWS Lambdaに載せるべく、さらに実装を進めていた。
この時点での実装状態はこんな感じ。
もともと作ってたモック時代の画面 pic.twitter.com/Cs7FFR6fSC
— KIDANI Akito (@kdnakt) 2020年5月25日
そうした中で、web1weekイベントの第2回が開催されることを遅ればせながら5月13日に知った。
イベント期間は5月18日から5月24日までである。最終日にCrieitに記事を投稿することを考えると、前日の5月23日にはすべての実装を終えてアプリを公開できていることが望ましい。というわけで、フロントはほぼ実装できているものの、アプリ公開までの期間は約10日となった。
「1週間で」というイベントの趣旨に反する開発期間となってしまった点は申し訳なく思っている。ただ、バックエンドは結局web1weekの期間中に、言語選定からやりなおして全て開発しなおしとなってしまったので、実質「1週間でWebサービス(のバックエンド)を作るイベント」ではあった。
バックエンド作り直しの経緯を書いておく。
ゴールデンウィーク中はひたすらローカルのエディタ上でのみQuarkus(すなわちJava)を利用したAWS Lambda用のコードを書いていたのだが、AWS Lambda上での動作確認をまったく進めてこなかった。これが敗因である。5月18日(月)のweb1week開始時に、ようやくAWS Lambda上にデプロイするも、全く動作しなかった。
問題を解決する見込みが立たなかったため*2、下記の記事を参考にTypeScriptを採用することを決定した。
5月20日(水)深夜、すでに日付は21日だったが、ようやくTypeScriptで実装した最初のWeb APIが動作した。そこからなんとかWebSocketの実装を進めるも動かず。いくつかQuarkusで実装していたときとは条件が変わったこともあり、フロントエンドのコードにも修正が入った。
5月22日(金)夜、ようやくAPI Gateway+AWS LambdaでWebSocketを動かすことに成功*3。
5月23日(土)深夜、OGP用の画像の作成や、名前表示機能の実装、今回のweb1weekイベントのテーマ「Like」に合わせたハートモードの実装を急ピッチで進める。
前回苦戦したOGPには今回は特に苦しまなかったが、本番環境の構築時にCORSの設定をミスってアプリが動作しないなどの問題にぶち当たった。
最終的に出来上がったものはこんな感じ。
動作イメージです。 pic.twitter.com/N8PaPtMa29
— KIDANI Akito (@kdnakt) 2020年5月24日
今回開発したアプリの元のイメージとなったオンライン・プランニングポーカーアプリと比べると、画面全体のレイアウトとか、部屋を作ってから投票モードを切り替えられる部分とか、改善したい部分はいくつかある。時間的制約を理由にアプリ公開を優先した結果、諦めた技術的チャレンジもたくさんあるので、今後もバージョンアップしていければ、と思う*4。
[使用した技術など]
今回利用した技術要素を列挙しておく。
▼ローカル版
- React + TypeScript
- Quarkus (WebSocket extension)
▼AWS版
- React + TypeScript
- Serverless Framework
- API Gateway (REST API + WebSocket API)
- AWS Lambda + TypeScript
[まとめ]
- #web1week イベントに参加してオンライン・ファイブフィンガーアプリ「5F」をリリースした
- 前回のイベントでリリースしたかったやつのリベンジができて嬉しい
- Web APIを利用したWebサービスを公開する経験を積めた
- Webサービス開発楽しい!次も何か作るぞ!