# プロジェクト概要
通話機能、資料共有機能や会議の議事録機能など、ビジネスシーンで活躍する機能を実装し、商談・ミーティングをオンライン化させることで移動時間&コストを削減し、コミュニケーションをより円滑にさせるシステム。 (既存アプリをlaravel/PHPへフルリニューアルする案件)
# チーム情報
PM:1名
インフラ:1名
サーバーサイドエンジニア:3名
フロントエンドエンジニア:2名
サーバーサイドエンジニアを担当した。
# リアルタイム通信機能 (新機能追加)
【概要】
・ログインユーザーのオンライン・オフラインや位置情報などの保持・更新機能。(gatherアプリのようなイメージです)
・ユーザー間のチャット送受信機能
【課題・問題点】
ローカル・デプロイ環境で使用できるsocketサーバーを構築する必要がある。
【打ち手・使用した技術】
ローカルにnode / express / typescript / docker / nginx にてwebsocketサーバーを構築。nginxにてリバースプロキシでHTTPS通信を行うようにした。socket.ioがよく使用されることが多いようだが、より応答性が高いWebSocketのwsライブラリを使用した。インフラチームと協力してCD環境をCircleCIにて用意し、AWSのEC2インスタンス上にwebsocketサーバー環境を構築した。
socket接続のリクエストが来た際に接続情報とuserIdを共に保存しておき、特定のユーザーにsocket通信でメッセージを送信する機能や、自身を除く接続者全てに送信する機能、ステータス更新機能などを実装。wsでは標準でロングポーリング機能がないため、定期的にping/pongで疎通確認も行った。
# Office (word, ptp, excel等)ドキュメントのPDF・JPG変換APIの実装
【概要】
移設元に生PHP (フレームワーク不使用)にてOfficeドキュメントのPDF・JPG変換が実装してあり、それをlaravelへ移設する。画像はフロント側でプレビュー用に用いる。
【課題・問題点】
・既存コードはPHPのみで実装されており、ソースコードから仕様を読み解いてlaravelへ落とし込む必要がある。既存システム同様の振る舞いを行えるように実装しなければならない。
・laravelのライブラリでOfficeドキュメントを画像やPDFへ変換するものは提供されていないため、サードパーティのライブラリを使用する必要がある。
【打ち手・使用した技術】
Officeドキュメントを画像に変換する必要があるためlibreofficeをシェルスクリプトで実行してPDF変換後、ImageMagicでjpg変換しS3へ保存するAPIを実装した。
処理の流れとしては「Officeアップロード -> libreofficeでPDF変換 -> ImageMagicでJPG変換 -> S3保存」。
シェルの標準出力・エラー出力をログファイルへ残すようにすることで、運用中に発生したエラー調査にも対応できるようにした。
# 資料のURLからスクリーンショット画像を生成し保存する機能
【概要】
移設元に生PHP (フレームワーク不使用)にてにて同様の実装してあり、それをlaravelへ移設する。
【課題・問題点】
・ソースコードから仕様を読み解いてlaravelへ落とし込む必要がある。
・laravelのライブラリでは実現不可能なため、外部ライブラリを使用する必要がある。
【打ち手・使用した技術】
Headless Chromeを導入し、シェルスクリプトを介してコマンドを実行・画像生成・S3へ保存・URLをテーブルへ保存する機能を実装。
# その他
- お知らせ通知機能を実装 (フロント)。チャットルーム新規作成時に招待された人に通知する。Nuxt.jsにて実装。
- PTPファイルダウンロード機能の実装 (サーバー・フロント)。S3に保存してるPTPファイルをダウンロードできる機能。Vue.js (2系) にて実装