見出し画像

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年が経ちました。
大規模なサービスを安定して提供し続けるために、いろいろと試行錯誤を行って今のような環境ができあがりました。今後も日々開発環境の改善に取り組んでいきます。

このような開発内容に興味を持たれた方はぜひ弊社採用にご応募ください。

株式会社Amaziaでは新しいメンバーを積極的に採用しています!詳しくは採用ページをご覧ください!