iamfax.comで使われているバックエンドの技術や内容の解説を行っていきます。
Djangoを選んだ経緯
2011年から2018年までmaishoku.com
というフードデリバリーの会社も運営していました。そのときからDjangoを使用しており、もう15年くらいの付き合いになります。Djangoにはなんの不満もなく、バックエンドとしてはRuby on RailsやLaravelなど他のフレームワークを使おうとは全く考えませんでした。
最近ではバックエンドにNext.jsを使うという選択肢もありますが、Djangoの強力なORMの存在、マイグレーションの容易さ、Admin apiを考えるとあえて採用しようとは思いません。通信もGraphqlで行いますのでNext.jsを無理やり採用する必要はないと感じています。
Django内の非同期タスク処理としてはCelery(ブローカーはrabbitmq) をつかっており、データベースはPostgreSQL (RDBMS) を採用しています。以前、スタートアップはFirestoreを使うなという記事を書きましたが、iamfax.comの規模のサイトでもRDBMSが最適だったと考えています。
バックエンドとフロントエンド同士のサーバ通信にはGraphQLを使用してますが、ライブラリはStrawberryを採用しています。Strawberry-Django (Django向けにカスタマイズされたもの) を使うこともできましたが、密結合になるのを避けたかったため、標準のStrawberryを選びました。このあたりの考察も今後書いていこうかと思います。