## 概要
- 主に映像を管理するコンテンツ管理パッケージシステム(既存)の保守
- パッケージの顧客要望に合わせた改修など
- 主な顧客として、テレビ局、広告代理店 など
## 担当
- 基本的に開発/テスト/運用/保守
- 導入顧客によってはPM
- PoCプロジェクトのPMを担当し、顧客のやってみたいことを認識齟齬の無いようにすり合わせ、迅速に提供するよう努めた
- フィードバックを得ながらどのような機能があれば使いやすくなるか提案と要望の引き出しを繰り返し、機能の拡充に努めた
## 使用技術
### 言語
- バックエンド: PHP(フレームワークなし)
- フロントエンド: jQuery
- テスト自動化ツール: go, agouti, chromedriver
### DB
- mongoDB
### Web
- Apache / nginx
### 他
- ソース管理: gitlab
- CICDツール: gitlab CI/CD
## 課題
- 既存のパッケージがあまり大規模使用を考えていない作りであったため、パフォーマンスの改善をする必要があった
- 標準版パッケージから派生して各顧客への改修を行っていたため、バグ等の情報共有を密にする必要があった
## 取り組み
### パフォーマンスの改善について
- 既存パッケージで遅いmongoDBのクエリが大量にあったため、クエリの書き方を理解し、高速な処理が行われるよう改修を行った
- 遅いものだと1000件あたり1分以上かかっていたものを5秒程度に収まるように改修を行い、場合によってはメモリ使用量オーバーのエラーになっていたものを解消した
- 既存パッケージでフロントに頼るような処理でボトルネックとなっている箇所があったため、なるべくサーバ側での処理に書き換えて処理を高速化した
- 大量人数で使用した場合メモリのオーバーフローが起きている箇所があったため、メモリ効率を考えた実装に書き換えた
- 不要なループ処理の削除を行った
- データの取得量を必要最小限にして処理を行うように修正した
### 情報共有について
- Backlog、BacklogAPIを使用して、派生したプロジェクトで標準パッケージレベルのバグが有った場合に各顧客プロジェクトのメンバーが参照してバグ改修が行えるように情報の整理/共有を行った
- 自主的な取り組みとして、MicrosoftTeamsとBacklogの連携機能が公式では無かったため、Backlogに更新があったタイミングでTeamsのチャンネルへ通知する仕組みを作った
- 使用技術:AWS Lambda, Amazon DynamoDB, ServerlessFramework, Go(Gin)
- Go(Gin + ServerlessFramework)で以下の処理を実装
- TeamsのWebhookURLとBacklogのプロジェクトIDの紐付けをDynamoDBへ登録する仕組みの実装
- BacklogからWebhookで通知された内容を解析し、TeamsへWebhookで通知する仕組みの実装
- Teams導入以前はSlackを使用していたため、Backlogにお知らせに追加されたユーザに対してSlackのDMを送信する仕組みを作り、連絡漏れが無いようにした
- 使用技術:GoogleAppScript
## 工夫した点
- 基本的にボーイスカウトルールを採用し、後の保守・追加改修が行いやすいようなコードの書き方を行った
- 既存の処理で複雑でわかりにくいコードをなるべく簡潔で読みやすいコードに変更した
- 呼び出しのない箇所は削除し、コード量を減らした
- コードだけではわかりにくい箇所はBacklogやGitLabのWiki等に仕様を書き起こし、他の人が躓かないように情報整理をした
- UIテストの自動化を行うためにgo言語(Agouti)を使用し、テストの自動化ツールを作成した
- 各権限のユーザでログインし、各画面に自動で遷移させ、スクリーンショットを撮り、権限制御が正しく動いているかのテストを行った
- Websocketで画面同士を同期する機能のある画面で各種操作を自動で行い、同期が問題なく動くかのテストを行った
- リリースの作業負担やミスを減らすためにビルド作業をgitlab CI/CDを使用して自動化した
- gitの使用方法が明確に定まっていない中、gitflowの運用を共有し、各プロジェクトで共通のルールづくりを行った