### 【プロジェクトの目的】
エンドユーザーから注文を受ける際、手書きで注文をとっているゴルフ場が多かったため、ゴルフ場に特化したレストラン注文アプリを提供してデジタル化・業務の円滑化を図る。
### 【プロジェクトの概要】
ゴルフ場向けレストランの注文システムをアジャイル体制で開発。
チームメンバーはエンジニア5名+1名(PM)で構成。
私はユーザー様が使用する管理画面やAPIの開発に従事。
iPadアプリはアプリチームが開発を行っており、連携して開発している。
### 【使用技術】
- PHP8(PHPUnit、Xdebug)
- Laravel9(Laravel Sail)
- JavaScript(ES6)
- Vue3(CompositionAPI)
- Vite
- Tailwind CSS
- Linux
- Apache
- Docker
- MySQL8
- Git、GitLab
- AWS(EC2, RDS, S3)
- Postman
- Xcode
- Teams, Backlog, Notion
### 【プロジェクトにおける自身の役割】
開発において、フロント/バックエンドの実装を行い、設計、実装、コードレビュー、運用保守、問い合わせ対応を担当。
リリース工程においては動作確認内容の洗い出し後、メンバーへテストの指示、完了後はPMへの報告まで実施。
また、新しく入社したメンバーのフォローも担っている。
### 【業務の流れ】
- いただいた要望について、メンバー達と仕様設計を行う
- 管理画面やAPIの実装 (アプリの修正があればアプリチームに報告)
- PR(MR)を出してレビューをもらう
- テスト環境にデプロイして動作確認
- 問題なければ本番リリースして、お客様にお知らせする
- 問い合わせがあれば対応
### 【現状】
約50ヶ所のゴルフ場様に導入していただいており、並行して問い合わせ対応も実施。
細かい修正や、お客様から要望があれば追加機能を随時リリースしている。
### 【チームが抱えている課題】
- 技術的負債
- 問い合わせ対応工数の増加
### 【改善状況】
- 技術的負債
- 機能追加などの実装をするついでに、それに関係している処理をリファクタリング。
- 時間があれば積極的に修正。(レビュアーの負担を無くすために修正は小出しに出す)
- 実装前に複数人で設計レビュー会を行い、ブラックボックス化を防ぐ。
- 問い合わせ対応工数の増加
- 機能ごとの操作マニュアルを作成して、お客様の目に見えるところに配置。
- リリース通知の文言に機能について詳しく記述し、マニュアルにも誘導する。
### 【課題に対して自身が発揮した成果】
#### おしらせ機能 (Laravel,Vue.js)
約50ヶ所以上のゴルフ場を運用しており、それぞれ管理画面もっている。
1つのDBインスタンスで運用すると、データ量的にパフォーマンスに影響が出そうなため
前提としてDBインスタンス(`Amazon Aurora MySQL`)を複数用意して、均したもの振り分けて運用。
その中で、全ゴルフ場に<strong style="color: red;">お知らせを通知する機能</strong>を実装。
ですが、全ゴルフ場向けにお知らせを通知すると、
全てのDBインスタンスのテーブル(`notificationsテーブル`)にレコードが作成され、長期スパンでみると、
データが増えすぎてコスト面の懸念が発生する。
なのでマスターデータとして、既存の社内環境にもお知らせテーブル(`notificationsテーブル`)を作成し、
レコードを追加していくことにした。
そして本番環境のお知らせテーブルの接続先は社内環境にした。(具体的には`config/database.php`に社内環境の接続情報を記述し、`Notification`モデルの`$connection`にその接続先を指定した。)
そうすることで全ゴルフ場で表示されるお知らせは、社内環境のテーブルを見に行っているので、
今後はその社内環境のテーブルにだけ追加していけば良くなる。
エンジニア側の運用も楽になるし、中長期に渡り増えるデータ量も抑えられることに成功した。
#### マニュアル置き場の作成 (Laravel,Vue.js,AWS)
PDFでサービスについての使用方法マニュアルを作成しており、
問い合わせ削減のために、ユーザーから見えるところに配置するため、
<strong style="color: red;">マニュアルページの実装</strong>を担当。
PDFは200ページを超えるものもあるので、DBで管理せずに`AWS`の`S3`に逃がし、
`HTML`の`iframe`タグで`S3`にあるPDFを埋め込もうとしたが、外部から`S3`コンテンツにアクセスするには、
認証情報が必要らしく、表示できなかった。
当プロジェクトのパッケージ管理システムの`composer`に、`aws-sdk-php`ライブラリが導入されていたので、
`S3 PresignedURL`を採用することで、表示することに成功。(セキュリティを考慮してPDFの閲覧有効期限を1分に設定)
ユーザーが気軽にマニュアルを見ることができる環境を作り出すことで、
`月150件`の問い合わせを`月80件`まで削減することが出来た。