サービス拡大に備え、インフラ基盤を新たに構築する
OurPhotoのインフラはMicrosoft AzureからAWSに引っ越しすることにした。AzureではWebサーバーやDBサーバーを単一インスタンスで運用していたが、AWSではコンテナ技術を利用して複数のWebサーバーの並行稼動や、DBはAuroraを導入し、オートスケールを可能にするなど、システム全体の可用性を向上させた。もともと他の自社サービスではAWSを使っており、社内エンジニアが慣れており、ナレッジを存分に活かせるという利点もあった。
デプロイフローの自動化では、AWSのコードシリーズを使って実現した。GitHubに新しいコードをマージしたら自動で動く仕組みを実践。これによって基本的には誰でもリリース作業ができるようになる。
AWS Lambdaなどのサーバーレスアーキテクチャーを採用して画像のリサイズ処理を行い、画像のアップロードなどの処理スピードを向上した。これは登録フォトグラファーによる納品作業スピードが上がり、かなりの好評を得た。セキュリティ面では、AWS Security Hub、Amazon CloudWatchなどを利用して、ログの収集や、セキュリティの穴や危険な設定の検知を実施し、定期的なチェックと改善ができる状態にした。
保守性や品質を上げるための改善を実施
1000行を超える巨大なコントローラーのスリム化を実施。堂上氏は「今回の改善で一番時間を使った部分です」と振り返った。コードは必要な処理が上から順にバーっと書いてある状態だったので、データ処理のロジック、業務ロジック、画面操作のロジックなどを適切に分け、責務の分割を実施。これで可読性が大幅に向上。またコードのリファクタリングの中で、バグが相当数見つかり、併せて修正作業も実施した。
スリム化の対象はユーザー側に絞った。堂上氏はその理由を「プロダクトをもっと成長させていく時に、ユーザー側で機能の追加、機能の改修などをたくさんやっていきたい。だからユーザー側のコントローラーをスリムにするように優先順位をつけました」と、事業のフェーズに合わせて作業を進めることが大切と述べた。
属人化の解消では、今までのCTOに手順や運営について明文化してもらう。CTOの時間は、すべてこれに充てた。ただ、しっかりしたドキュメントは時間がかかるので、ヒアリングなどを重ねて適宜判断していった。
当時OurPhotoにはテストコードがまったくなかったので、Unitテストを導入。CI/CDツールである「CircleCI」を導入して、GitHubにプルリクエストを上げたら同時にテストを実行、テストが通らないと次に進めないフローも確立した。ユーザーがサービスを利用する上での重要な操作において、バグを起こさないという観点で、優先順位をつけながらテストを用意した。
その他、技術的負債の確認に「Code Climate」、バグの検知に「Bugsnag」、パフォーマンスの監視に「Datadog」などのツールを活用した。