プロジェクトの背景と開発方針
稼働中の政治ポータルサイトの開発に技術支援を行いました。
行った技術支援は以下になります。
- プロフィール画像の置き場所統一
- スロークエリの解消
- 各種機能追加、不具合調査等
開発のポイント
プロフィール画像の置き場所統一
長年の経緯によりプロフィール画像の置き場所がいくつかの場所に分散してしまっていました。
例えばプロフィール画像の置き場所がA、Bの2パターンあったとすると、まずAに存在するかをS3に問い合わせ、なければBに、それもなければ「No Image」というようにページ描画処理で画像URLを特定するためには毎回S3に問い合わせなければならないという状況でした。これによりページ描画速度が数秒単位になってしまっていました。
この問題を解消するため、プロフィール画像の置き場所を統一する作業を行いました。
まずはプロフィール画像の置き場所を調査し、すべてのパターンを洗い出しました。その後S3ファイルをコピーするバッチを作成し画像ファイルを統一先の場所にまとめました。最後にページ描画処理からS3への問い合わせ処理を除去しました。
この施策によりプロフィール画像の置き場所が統一され、ページ描画速度も1秒未満に改善することができました。
deployerの導入
deployerはPHP用のデプロイツールです。
これまでデプロイ作業は各開発者のローカルマシンファイルにデプロイしたいファイルを用意して、それらをFTPでファイルアップロード(上書き)していました。これには以下の問題点がありました。
- 現在どのコミット(ソースコードのバージョン)がデプロイされているか分からない
deployerはgit pullするのでコミット情報が残る - 更新済みファイルと未更新ファイルが混在する瞬間がある
deployerはシンボリックリンクで切り替えを行うためatomicな更新ができる - 一部のファイルをコピーし忘れる人為ミスが怖い
deployerであればすべてのファイルが指定したコミットの状態に更新されるため、これらの人為ミスを防げる。
deployerを導入することでこれらの問題を解消することができました。
振り返り
スロークエリや外部通信の多用で性能が劣化するケース、ロジックの分散化などでソースコードのメンテナンス性が低下するケースなどは、本当によく起こることなのだとこれまでの認識を改めました。性能面、メンテナンス性などに気を配りながら実装することの大切さを改めて感じました。
プロジェクトデータ
- 開発期間
- -
- 開発人数
- 3人
使用技術
- 言語
- PHP
- Framework
- Laravel
- データベース
- MySQL
- 画像アップロード
- AWS S3
- ホスティング
- AWS EC2
- メール送信
- Sendmail