Amaziaを支える技術2024サーバーサイド編
こんにちは。CTOの江口です。
今回はAmaziaのサーバサイド(バックエンド)に使用している技術要素をご紹介します。
WEBのフロントエンドについては別の記事にまとめる予定ですのでお楽しみに。
AWSなどのインフラに関する内容は別の記事でまとめていますので興味のある方はこちらをご覧ください。
開発言語
Ruby 3.2.2
フレームワーク
Rails 7.1.2
データベース
MySQL(RDS)
DynamoDB
Redshift
全文検索エンジン
OpenSearch
テスト
RSpec
API仕様書
OpenAPI(Swagger)
RSwag
実行環境
ECS、Elastic Beanstalk
CI/CD
CircleCI
AWS CodePipeline
弊社ではバックエンドのサービス開発にRuby on Railsを使用しています。
主な役割はiOS/Androidアプリで使用するAPIの開発とコンテンツの配信管理をする管理画面の開発です。
データベースにはマスタ系の情報を保持するためのMySQLとユーザーの情報を保持するためのDynamoDBを併用しています。NoSQLデータベースであるDynamoDBを利用することでピークタイムにおけるユーザーからの大量書き込みを安定して処理出来る構成になっています。
DynamoDBは集計処理には不向きですが、Step Functionsを利用してRedshiftにデータを取り込む仕組みを構築することで様々なレポートの作成にも対応出来るようになりました。
実行環境には長年Elastic Beanstalkを利用してきましたが、新しいサービスではECS Fargateを積極的に採用しています。
ECSとCodePipelineを組み合わせて利用することでリリース作業が格段に楽になりました。
将来的には既存のサービスもECSへ切り替えていきたいと思っています。
CircleCIでは主にRSpecによる自動テストとRubocopによるコード解析を行っています。
PRを出すたびにコードの検証が行われるため、新しい機能の追加や既存の機能の変更を安心して行えるようになっています。
リリースの前にも、もちろん全テストケースを実行してデグレが発生していないことを確認しています。
RubyやRailsのメジャーバージョンアップは毎回億劫な作業ですが、すべてのAPIにテストコードがあるおかげで影響箇所をすぐに特定することが出来るのでバグを生むことなく移行作業を行えるのも強みです。
最後にAPIのドキュメントについて。
アプリの開発メンバーとのAPI仕様の共有のため、OpenAPIのドキュメント(Swaggerファイル)を作成しています。iOS/AndroidアプリではSwaggerファイルを元にAPIClientのコードを自動生成することでアプリ - サーバーサイドの認識のズレが起きづらい構成になっています。
開発用のサーバーにはSwagger UIを組み込んでいるので、UI上でAPIを確認することも出来て便利です。
マンガBANGのサービスをリリースして9年が経ちました。
大規模なサービスを安定して提供し続けるために、いろいろと試行錯誤を行って今のような環境ができあがりました。今後も日々開発環境の改善に取り組んでいきます。
このような開発内容に興味を持たれた方はぜひ弊社採用にご応募ください。