# アプリ概要
社員食堂や弁当の予約・実績管理をWeb上で実現する自社開発のBtoBアプリ。
自身のスマホやPCからWebアプリを利用して各個人の予約が可能になっており、予約後に食堂でICカード付きの社員証をICカードリーダーにスキャンすることで喫食の記録ができる。
喫食管理専用のアプリはSwiftで実装しAppleストアで公開。
----------------------------------------------------------------------------------------------------------
# チーム構成(★が自分が担当した役割)
- プロジェクトマネージャー兼フルスタックエンジニア:1名★
- フルスタックエンジニア:1名
- 営業:1名
- 顧客サポート:2名
----------------------------------------------------------------------------------------------------------
# 業務内容:開発フェーズ① 要件定義・詳細設計
## 内容
- 役員が企画した機能についてヒアリングを行い、実装要件をリストアップ。
- 要件を元にインフラ設計、データベース設計を実施。
----------------------------------------------------------------------------------------------------------
# 業務内容:開発フェーズ② インフラ構築
## 内容
- AWSの各種サービスを利用してインフラを構築。
- AWSでカバー仕切れない機能については外部サービスを採用。
## 利用技術
- フロントエンド:CloudFront+S3(Angular)
- バックエンド:APIGateway+Lambda(.NET Core, Python, Node.js)+RDS(PostgreSQL)
- 認証基盤:Cognito
- その他:NAT Gateway, GCP(Google Calendar API, Text-to-Speech API)
## 課題と対処
- 画像圧縮処理、FAX送信処理はAWSでは機能提供が無かった。
- 外部のREST APIサービスであるTinyPNG, faximoSilverを採用した。
- メニュー名を読み上げる機能実装が必要だった為、AWS以外のサービスも比較検討を実施。
- テキスト読み上げAPIが日本語の抑揚を最も流暢に再現しており、かつ料金的に許容範囲内だったGCP(Text-to-Speech API)を採用した。
- 祝日情報を取得するAPIがAWSにはない。
- GCPのGoogle Calendar APIを利用した。
----------------------------------------------------------------------------------------------------------
# 業務内容:開発フェーズ③ コーディング・テスト
## 内容
- アジャイル開発
- フロントエンド(Angular)のコーディング
- バックエンド(.NET Core, Python, Node.js, PostgreSQL)のコーディング
- iOSアプリ(Swift)のコーディング
- ネイティブアプリ実装は当初予定には無かったが、空き時間に動作検証を実施し社内提案をすることで導入することが決定した。
## 課題と対処
- 一括で複数名分の予約処理を行う処理において、APIGatewayのタイムアウト制限(30秒)内では処理が完了しないことが発覚した。
- SQLやAPIのパフォーマンス改善のみでは対処が困難だった為、インフラを見直し長時間の処理はLambda+StepFunctions+ECS Taskの構成で実行するよう変更することで対処した。
- ネイティブアプリは今後の展開も考慮してクロスプラットフォームにデプロイできるXamarinを検討していたが、Visual Studio for Macのバグによりデプロイができないトラブルに遭遇。
- Xamarin実装を断念しiOS専用の言語であるSwiftでの実装に切り替えた。iOSエンジニアが社内にはいなかったこともあり、実装はWkWebViewにAngularアプリをレンダリングする形で実装し、極力Swift側の実装を減らすことで保守コストを下げるよう心掛けた。
----------------------------------------------------------------------------------------------------------
# 業務内容:販促フェーズ リリース後の販売促進
## 内容
- 福利厚生EXPO2019へ参加し、ブースに訪れた方々へのサービスのPR活動を実施。
- 導入後の企業へのテクニカルサポートを担当し、アプリの操作説明や技術仕様の説明、追加要望のヒアリングをした。
## 課題と対処
- 初期の頃は問い合わせ~導入までのフローが全く可視化されておらず、いつ、誰が、どのようなタスクを処理しているのか分からなくなっており、プロジェクトメンバー同士の情報共有ができていなかった。
- プロジェクト管理、導入管理の為のアプリをメンバー全員で検討。最終的にAsanaを導入し、各顧客毎の導入の進捗状況、開発の進捗状況を管理できるようにした。
## 成果
- 工場や研究所を持つ中小企業様から多数の問い合わせをいただき、受注いただけた。
- 開発当初は想定していなかった寮を運営する企業からの問い合わせも多くあり、新たな需要を確認できた。
----------------------------------------------------------------------------------------------------------
# 業務内容:保守フェーズ 保守・機能追加
## 内容
- 稼働中のアプリの保守
- 利用中の顧客、導入検討をしている顧客からの要望をまとめ、優先度を付けて機能追加を実施。
## 課題と対処
- 予約入力画面をカレンダー形式で入力したいという有償での要望があった。
- 要望を直接担当者からヒアリングし、ワイヤーフレームを作成した上でWebミーティングで打ち合わせを重ね実装をした。
- AWSの各種サービスの稼働状況が別々のページに分かれていて見辛く、監視に時間がかかっていた。
- Cloud WatchのダッシュボードにLambda, RDS, Cognito, NAT Gateway
- セキュリティ要件を導入前の時点で確認されるケースが多くなり、見直しが必要になった。
- AWS WAF, Security Hub, GuardDutyを有効化し、年1回OWASP ZAPによる脆弱性診断の実施の義務化。2021年秋にはISMSを取得した。
- AWSへのデプロイ作業はシェルスクリプトの実行で行っていたが、作業の手間がかかっていた。
- AWS CodeBuildを導入によりCI/CDを構築し、GitHubへのpushをトリガーにテスト、ビルド、デプロイを自動化した。
- 各開発者のローカルのnodeのバージョンにバラつきがあり、バージョン違いによるコンパイルエラーで開発の時間を消費してしまうケースがあった。
- Docker, docker-composeを導入。デバッグ時はDockerコンテナからデバッグ用のサーバを実行するように運用を変更した。