この手に雲をつかむ話。

創作物を一斉に一定期間匿名で公開し、期間終了後に作者名を公開するというイベントがあります。このイベント用のいわゆるアップローダに類するサービスを開発しました。

必要とする機能

  • 作者は
    • 制作物をアップロードできる
    • 説明文とあとがきを記載できる
  • イベント主催者は
    • 制作物のファイル実体・作者名を公開・非公開にできる
    • 各作者が投稿した説明文・あとがきを(別途作ったイベントページへ)転記できる

方針

イベント用なのでトラフィックのスパイクに耐えうる設計が必要で、トレーニングも兼ねてクラウドネイティブな手法を取ることとしました。

構成

  • Web UI
    • ReactでSPAとして実装
    • Firebase Hostingで配信
  • データベース
    • Firestoreを使用
    • イベント情報・投稿内容(ファイル除く)を格納
  • 投稿ファイル格納・配信
  • 補助用バックエンドAPI
    • Cloud Run上にSinatraで実装したバックエンドAPIを配備
    • アップロードの中継、配信用signed URLの生成及びバケットの権限操作を行う

感想

従来の手法(IaaS上のLinux VMRailsで構築したアプリケーションを走らせるやり方)と記述量はさほど変わらないという印象。バックエンドとしてFirestoreを使おうが、Postgresを読み書きするRails実装のバックエンドを置こうが、大部分の処理はブラウザ上のReact実装というのであれば、その差は微々たるものなのかもしれず。ただし許容トラフィック量を考えれば圧倒的に有利なはず。従来手法で同等の性能を出そうとするとかなりの追加作業と運用コストがかかるのではないかと。
リリースとロールバックが簡単なのは便利。小規模個人プロジェクトでは持て余すものの、A/Bテストやらcanary releaseなんかがコンソールから簡単に出来るのも便利そう。


どうぞご利用ください。*1

*1:イベントが開催されたら