LayerX エンジニアブログ

LayerX の エンジニアブログです。

AMDXチームの技術スタック紹介 (概要編)

こんにちは、LayerXの主力事業の一つ、三井物産デジタル・アセットマネジメント(LayerXと三井物産等との合弁企業)のAMDXチーム所属の武市(tacke_jp)です。AMDXとはAsset Management DXの略で、資産運用会社を支えるオペレーションのDXを担当しています。今回は、私たちが開発しているDAM (Digital Asset Management)というプロダクトの技術スタックについて紹介したいと思います。各部分の概要と実際の使用感について触れていきます。

(なお、AMDXチームの取り組みや、DAMについての記事も公開しておりますので、是非ご覧ください。)

サーバーサイドの技術スタック

まずは、APIサーバーの実装についてです。こちらではGoを用いています。Goはその性能とデプロイの容易さから選ばれました。また、データベース操作のためのORMとしては、entを採用しています。entはデータベースのスキーマをDSLによって定義します。これにより、取得型、更新型のクエリビルダーを定義し、取得結果をマップするストラクトを自動生成してくれます。

さらに、単純なスキーママイグレーションについては、entの機能を用いて直接DDLを書かずに行っています。これはバックエンドのリリース時にCI/CDパイプライン上で実行するように設定しています。自動生成されたコードを用いることで、型安全性が保証され、開発時の利便性も向上しています。なお、entには参照先のテーブルのレコードを芋づる式に取得するWithクエリなども用意されており、複数のテーブルをまたがるビジネスロジックの実装もスムーズです。

次に、クライアントとのコミュニケーション手段としてGraphQLを採用しています。GraphQLのスキーマ定義をgqlgenによってサーバーサイドのコード生成に利用しています。gqlgenはスキーマの変更にも柔軟に対応し、一度実装したresolverの内容を適宜読み取ってメソッドの追加・変更を行ってくれます。1:NやM:Nなどの関係をもつobjectを取得する際は、fieldに対するresolverを用いています。dataloaderについて詳しくは、この記事を参照してください。

Webクライアントサイドの技術スタック

ウェブアプリケーション部分はReactで作成しており、UIにはChakraUIを用いています。Reactはそのコンポーネントベースの開発と強力なコミュニティサポートから選ばれました。また、ChakraUIはその使いやすさと多機能性から選ばれました。また、視覚的なアクセシビリティにも配慮されている点が大きな魅力となりました。AMDXチームには専任のデザイナーがいないため重宝しています。

さらにGraphQLのクライアント側では、型定義の生成にgraphql-codegenを用いています。また、実際のquery / mutationの実行にはapolloを活用しています。ここでも型の恩恵を最大限に受けられるように、typescript-operationsやtypescript-react-apolloといったpluginを活用し、各queryやmutationに対応したreact hookを生成しています。これにより、queryやmutationの引数やレスポンスについても型チェックが行われ、より安全なコードを書くことが可能になりました。

最後にインフラストラクチャですが、AWS上に構築しています。その管理にはIaC(Infrastructure as Code)の考え方を取り入れ、terraformを使って構築・管理を行っています。これにより、インフラの設定をコード化し、バージョン管理を可能にするとともに、設定ミスの減少や再現性の向上を図りました。

これらが私たちが開発しているDAMの技術スタックの概要です。今後も最新の技術動向を見つつ、より良いプロダクト開発に取り組んでまいります。次回は各ライブラリの採用経緯や利用した上での感想について深堀りしていきますので、お楽しみに!


AMDXチームでは一緒に不動産アセットマネジメント業務の圧倒的効率化に取り組むエンジニアの仲間を募集しています。業界的に前例がない取り組みで、私自身、試行錯誤しつつあたらしい価値を生み出す楽しさを日々実感しながら仕事をしています。是非、こちらの事業部概要や採用ポジションの詳細もご覧ください。