## プロジェクト概要
アジアを中心とした複数国で展開するBtoCモバイルアプリ開発のプロジェクトに要件定義フェーズから参画しています。
開発プロジェクトは2019年の6月から開始し2020年の4月にリリースを実施しました。
現在は開発チームのリーダーとして運用・保守、機能拡張の指揮をする傍ら、関連プロジェクトの技術サポートを実施しています。
### チーム情報
グループ会社社員: 7名
- PO: 1名
- SM: 1名
- 開発メンバー: 5名 // 私含む
協力会社社員:8名
- N社: 5名
- S社: 3名
2019年のPJ開始当初はグループ会社社員3名(PO, SM, 私)と大手SIerのN社様5名のチームで活動していました。
2019年時点ではN社様のAgileチームに参画し、AWSの環境構築を中心とした作業を担当していました。
2020年以降は運用・保守作業と機能拡張を並行して進めるためグループ会社社員とS社社員を増員してグループ会社社員&S社社員のチームとN社社員のチームに分割しています。
増員メンバーは若手中心のため、私が開発リーダーとなって開発の指揮や若手メンバーの教育を実施しています。
## 担当業務
機能要件・非機能要件の整理やScrumベースのプロジェクトマネジメントルールの適応といったプロジェクト推進のための活動や、AWSを利用したサーバーレスなバックエンドの設計・構築、AWS Lambdaを動作環境としたプログラムのコーディングなど幅広い分野を担当しています。
設計フェーズではDB AdministratorとしてDB設計を主に担当していました。現在は開発チームのリーダーとして運用・保守、機能拡張の指揮をする傍ら、関連プロジェクトの技術サポートを実施しています。
リリース後の保守・運用も担当しておりAWSで構築したサーバーレスシステムの運用経験が2年ほどあります。
### 開発時
- 要件定義・基本設計
グループ会社で企画された内容について、初期段階の機能要件・非機能要件をまとめシステムの基本設計を作成しました。
プロジェクトの進め方( Agile / Scrum )の方針決めやベンダー選定といった業務にも携わり、プロジェクトの推進に貢献しています。
- 詳細設計・開発
設計フェーズではDB AdministratorとしてDB設計を主に担当していました。
グローバルに展開するBtoCアプリということもありユーザー数の増加に合わせてデータ量の増加がシステムのボトルネックとなる可能性が高かったため、管理するデータによってRDBとNoSQLを併用する構成を採用しています。
ただ、グループ会社内ではNoSQLのノウハウが少なかったことや、NoSQLの特性から運用時のデータ確認等にRDBよりも手間がかかることが想定されていたため、大部分をRDBで管理するように設計しています。
DB設計以外ではAWSを利用したサーバーレスなバックエンド処理の実装を担当しています。
開発時はサーバーレス特有の現象(例. Node.jsのイベントループにキューが残っているとタイムアウトする、Pythonのライブラリ使用時にlibcへの動的リンクが利用できない等)に苦労することも多くありましたが、
ローカルでのxUnitの利用やCI/CDとは別にAWS Toolkitを利用した簡易的なデプロイ手法を整理するなどテストピラミッドを意識した環境毎のテストの使いわけによってサーバーレスアプリの開発効率を向上させました。
また、認証周りの実装も担当しておりSAP CDCを利用した認証基盤とAWS Cognitoの連携もスクラッチで開発しています。
AWS CognitoのFederated IdentitiesはOIDCをサポートしていますが、特定IdP以外では通常のOIDCのフローを利用できないためスクラッチでの対応が必要になります。
認証処理ということで開発の難易度は高めでしたが、SAP CDC, AWS, OIDCの公式ドキュメントから標準のプラクティスを読み解くことや、各サービスのサポートエンジニアとコミュニケーションを積極的に取ることによって問題なく実装をすることができました。
- システムテスト/ユーザーテスト
プロジェクトではScrumベースでのプロジェクトマネジメントを実施していましたが、通常のスプリントとは別にシステムテスト・ユーザーテストのフェーズを設けていました。
システムテストでは関連業務システムのオペレーションを含めたシステムテスト設計を担当し、関連システムの担当者とコミュニケーションを密に取りながらシステムテストを円滑に進捗させました。
ユーザーテストでは、導入する海外拠点のメンバーをユーザーと見立ててテストを実施しました。実際に海外拠点に赴き、テストケース作成からテスト実施までを直接支援しました。
### 運用・保守、機能拡張
- 運用・保守
運用・保守領域では主に拠点運用担当者からの問い合わせ対応と運用監視の効率化を担当しています。
BtoCのアプリということでログデータも大量に出力されますが、AWS CloudWatch Insightを利用することによりエラー発生時も迅速に原因調査を実施することができています。
運用監視自体は別メンバーに担当いただいていますが、運用監視の省力化のためにAWS SNS + AWS Lambdaを利用したエラー発生時のログ自動検索&チケット管理サイトへの起票自動化といった改善を担当しています。
監査に類するアラート対応については、属人的な判断が難しいと考えられるためAWS Security Hubを導入することによって世間的なベンチマークを利用しながら脆弱性のチェックを実施しています。
- 機能拡張
プロジェクトではリリース後も積極的に機能拡張を続けています。
機能拡張では開発以外にもプロジェクトマネジメントや企画、企画支援といった業務を担当しています。
複数の海外拠点に導入していることもありステークホルダーも多いため、機能拡張のリクエストも様々な視点から多くのものが寄せられます。
リクエストに対して開発リソースは限られているため、全員が納得する機能拡張の優先順位付け方法を考えることに苦心しました。
現在は[ゲーム開発プロジェクトマネジメント講座/橋本 善久](http://www.jp.square-enix.com/tech/openconference/library/2011/dldata/PM/PM.pdf)の開発戦略マトリクスを参考に、独自の優先順位付けルールを策定し運用しています。
企画に関しては、拠点/事業部メンバーからのディマンド・プル型の企画に対して実現可能なアイディアを提案したり、技術者目線でテクノロジー・プッシュ型の企画を出したりといった活動を実施しています。
拠点メンバーとはお互いに外国語となる英語でコミュニケーションをとっているため苦労も多いですが、事前に資料を準備することや担当者同士で積極的にコミュニケーションをとることで円滑に業務を進めることができています。