KAKEHASHI Tech Blog

カケハシのEngineer Teamによるブログです。

アカウント管理機能の技術スタックを紹介します💁‍♀️

こんにちは、プラットフォームチームの石黒です。あっという間に今年が終わりますね🎄
この記事は、カケハシアドベントカレンダー2021の6日目の記事です。
本日はアカウント管理機能というサービスで使用している技術スタックを紹介します!

アカウント管理機能について

カケハシで提供している4つのプロダクト(Musubi、Musubi Insight、Pocket Musubi、Musubi AI在庫管理)は共通の認証基盤を利用しており、全プロダクト横断のお客様向けアカウント管理機能の開発・運用を我々プラットフォームチームが行っています。
プラットフォームチームにつきまして、プロダクトマネージャーの金田が書いたブログがありますので、是非そちらも御覧ください✨

システム構成

フロントエンド

アカウント管理は少人数で開発を始めたこともあり、フロントエンドは特に開発スピードを重視した技術選定がされています。
言語はReact+Typescriptを採用し、AWS AmplifyでCI/CDを自動化しています。
また、UIについては比較的シンプルな構成であることとエンジニア自らより良いUIを設計したいという思いから、Material-UIを利用してコンポーネントを定義しています。
テストに関しては最近E2Eテストツールのmablを導入し、CIに組み込んで少しずつテストの自動化を進めているところです。

image

バックエンド

バックエンドはNode.js+Typescriptで、全てサーバーレスで構成しています。
APIはLambda+API Gateway、DBはこれらと親和性の高いDynamoDBを利用しています。また一部の非同期タスクはStepFunctionsを用いたワークフローで実現しており、AWS CDKでリソースの定義を行っています。
ユーザーの認証はフロントエンドと同じくAmazon Cognitoを利用しています。

image

良かったこと

フロントエンド⇔バックエンドのコンテキストスイッチが小さい

チームメンバーが少ないため、全員がフロントエンド、バックエンドそれぞれの開発を行う必要があるのですが、いずれもTypescriptを採用しているので、コンテキストスイッチが最小限になる点はメリットを感じました。
特にTypescriptによる型チェックはスピーディーに開発していく上でバグを最小限に留めることができ、とても気に入っています。

インフラ管理が楽

CDKによるAWSリソースの定義はまだまだ日本語の情報も少なくとっつきにくいイメージがあるかもしれませんが、実際に書いてみるとLambdaのコードと同じくTypescriptで記述できますし、型定義から利用できるメソッドや必要なプロパティが分かるためCloudFormationのテンプレートによる定義と比べ直感的で学習コストは高くないと感じました。
また、スポットでAPIGatewayとLambdaを使用したいケースでは自分で全てのリソース定義を行わず、AWS Solutions Constructsを使いシンプルな記述でサービス統合を定義することができたりします。

開発フェーズで非エンジニアメンバーとコミュニケーションが取りやすい

Amplify Consoleの機能でプルリクエストのWEBプレビューができるため、UIの実装を行いプルリクエストを作成することで自動で一時的な確認環境がデプロイされます。
これを利用し、変更を反映する前にGithub上でプロダクトマネージャーにレビューしてもらっています。キャプチャでのやりとりでは工数がかさむ上齟齬が生じることもあったので、とても便利です。

困ったこと

社内知見が少なかった

技術選定を行った当時は、フロントエンドにAngular、バックエンドにPythonという採用例しかない中、アカウント管理では初めてそれ以外の技術を採用しました。そのため社内の知見が少なく、些細な躓きが想定以上に工数に響くことも度々ありました。
この問題は、他プロダクトでの採用例が少しずつ増えていったことや、経験者の採用、またメンバーの習熟度が上がったことにより、現在ではほとんど解消されています。

Amplifyをもっと活用できるのでは?

困ったこととは少し違いますが、既にバックエンドリソースが存在する状態でフロントエンドの開発を始めたため、Amplifyとの統合を活かせていない点がもったいない部分です。こちらはAmplifyのアップデートで少しずつ既存リソースを活用できるようになってきているので、今後のアップデートを期待しています。

開発環境の譲り合いになる

AWSのベストプラクティスでは、開発者はそれぞれAWSアカウントを持ち、自由にテストとデプロイができるのが望ましいとされています。
しかしながら私達のチームでは開発環境が限られており、Jestを用いたテストコードを書くことでデプロイ頻度を下げる試みはしているものの動作確認のため声を掛け合っているのが現状です💦
これらの問題は、ベストプラクティスの通りにアカウントを設計していくか、もしくはAWS SAM CLIによるCDKのサポートがパブリックプレビューになったのでこちらを利用していくか、今後解決していきたいと思っている課題のひとつです。

まとめ

アカウント管理で採用している技術スタックを紹介いたしました。
チームとしても、新しい技術はどんどん取り入れていこう✊という共通認識があり、積極的に情報のキャッチアップを行っています。
サーバーレスでの開発は難しいことも多いですが、日々自分が知らない技術に触れることができとても楽しいです!
カケハシでは各プロダクトのユースケースに適した技術選定をそれぞれ行っているため、いろいろなアーキテクチャの知見が得られることも魅力のひとつです。
ご興味がありましたら是非お話しを聞きに来てください✨

最後に

カケハシでアドベントカレンダーやっています。他の記事もぜひ確認してみてください。