1
/
5

ものレボのバックエンド系の実装について

今回は、もしこれから開発者としてものレボにJoinする人がいれば気になるであろう、ものレボの提供しているサービスのバックエンド系の実装や実際の開発作業ついて解説していきたいと思います。

下記に上げるバックエンドの構成は、複数あるマイクロサービスのうちの一つの例であり、全てのサービスが同様というわけではありませんが、その中でもわかりやすく見栄えがいいものを選んで記載させてもらおうと思います。

開発で使用しているサービス

  • Slack: コミュニケーションやデプロイ通知など
  • Github: ソースコード管理とタスク管理
  • AWS:Lambda: 実行系
    API Gateway: Lambdaへの繋ぎ
    Cognito: ユーザ認証
    RDS: MySQLを利用
    ElastiCache: Redisでのインメモリデータストア
    S3: ストレージ
  • CircleCI: テスト・デプロイ
  • Sentry: エラー監視

実装に使用しているフレームワークやツールなど

  • Poetry: パッケージ管理ツール
  • FastAPI: 今(個人的に)一押しのフレームワーク
  • flake8, autoflake, isort, black, mypy: Linter & Formatter (新しいプロジェクト&コードでは、タイプアノテーションまで義務化してます!)
  • SQLAlchemy: ORM
  • Alembic: SQLAlchemyと連携したDBスキーマのマイグレーション管理ツール
  • npm: パッケージ管理&タスクランナー
  • Serverless Framework: デプロイメントツール
  • Docker: ローカル開発環境構築

細かく上げていけばもっとあるのですが、とりあえず大きな部分で何を使ってるか分かる程度に列挙してみましたが、上記のように箇条書されても分かりにくいと思うので、実際のサービス構成を図に書き出します。



開発環境について

上記のように様々なサービスやツールを利用して「バックエンド」と一言で済ませてしまうものを構築していますが、実際に開発者がローカルで開発をする際の開発環境についても触れたいと思います。

ものレボの開発環境は、Docker以外基本的には依存せずにOS問わず開発できるようになっています。
開発者は煩わしい環境構築に時間をかけず、アプリケーションで使用している主要なライブラリ(パッケージ、フレームワーク)の使用方法を学べば、すぐにロジックの実装に入ることができるはずです。

作業としては、テスト駆動開発の流れに近く、割り当てられたタスク(Issue)に対してどうAPIが振る舞うべきか(関数単位ではなく、APIとしてのE2Eをテスト対象にしています)というテストを書き、そのテストが通るようにLinter & Formatterを通しながら実装を行い、PRを作成し、怖いおじさんがレビューするという流れになります。

テストやLinter & Formatterは、Docker上で動かせるようになっているかつ、CircleCI上でも行いPRでのチェックも行っているため、壊れているものがデプロイされにくい仕組みづくりをしています。

もちろん、自身の開発環境に直接(もしくはpyenvなどを使い)開発環境を構築し、好きなエディタ(僕はNeovimとVisual Studio Codeを併用しています)を使って開発してもらうこともできるようになっているため、あなたが何を信仰していても、信仰の自由が保証されています。
もし、信仰を妨げるものがあったとすれば、それは意図したものではないので他の信仰の自由を壊さず仲良く働けるように、よりDX(Developer Experienceの方)を高めていければ良いなと思っています。

最後に

今回は、ものレボのバックエンド環境について記載しましたが、次の機会には、フロントエンド側についても同じように執筆できればと思っています。

資料

ものレボバックエンド構成 draw.io(ダウンロード後拡張子を変更して下さい)ダウンロード

ものレボ株式会社's job postings
9 Likes
9 Likes

Weekly ranking

Show other rankings
If this story triggered your interest, go ahead and visit them to learn more