🎄

アルダグラムが使っている技術スタック(2021年 → 2023年)

2023/12/24に公開

こんにちは!アルダグラムでテックリードをしている @sukechannnn です!

この記事は 株式会社アルダグラム Advent Calendar 2023 24日目です。

昨日は森下さんの PostgreSQLの愛好家がMySQL 5.7の大規模なテーブルにカラムを追加しようとした話 でした!森下さんのデータベースの知識にはいつも助けられています…!


この記事では、以前に公開した アルダグラムの技術スタックについて から、この2年くらいでの進歩を振り返ってみたいと思います。

ではいってみましょう!

技術スタック

2021年末の時点と、現在(2023年末)とを比較してみましょう。

2021年末

2021

現在(2023年末)

2023

サーバーサイド

創業当初からの Ruby on Rails に加え、Kotlin + Spring Boot が増えています。これは、今年11月にリリースした新サービス KANNAレポート で利用しているためです。

今年は、モノリシックな構成から、マイクロサービスな構成にしていく決断をしました。切り出されたサーバーはまだ1つですが、今後新サービスを分散環境で開発していくための基盤ができつつあるのを感じています。セオリー通りデータベースごと分けたので、デプロイが独立してできるのがとても良いですね。

Kotlin を選んだのは JVM の豊富なライブラリ資産があること、Null安全であることが大きかったです。Java とちょっと迷ったのですが、実行時ぬるぽをなるべく減らしたかったのと、Ruby とちょっと書き味が近い感じがしたので Kotlin にしました。

KANNAレポートでも GraphQL を全面的に用いていて、DGS を用いてスキーマベースで開発しています。実は、最初は GraphQL-Ruby に近いコードベースで開発ができる GraphQL Kotlin を検討していたのですが、

  • Webフロントやアプリとスキーマベースで会話した方が生産性が高そう
  • DGS のスキーマ定義は @connection ディレクティブを使うことでコネクションの面倒なスキーマ定義を省略できる
  • DGS の方がドキュメントが充実しており、安定してそうだった

などの理由から路線変更しました。実際にやってみた感想としては、@connection ディレクティブによってシステム都合の記述が削がれ、開発者が見たい定義情報だけが書かれた状態になるため、非常に快適に開発できています!

既存の Ruby on Rails の方も引き続き活発に開発しています。昨年まではあまり技術的な負債を感じることなく開発できていましたが、利用ユーザーの急激な増加に伴うパフォーマンスの課題や、過去の事業ピボットの香りがする技術的負債などがちょっとずつ重石になってきています。

そこで、今年からボトルネックの計測をSREが行って、優先度の高い部分をアプリケーション開発チームが改善するというアクションを行ってきました。開発チーム全体で課題認識を揃えながら進められているため、とても良い感じで来年も継続して取り組んでいきます!

フロントエンド

フロントエンドには、引き続き Next.js / TypeScript を利用しています。

こちらは現状 モジュラーモノリス構成にしています。ディレクトリをサービス毎に分けるだけでも、開発時に見るべき範囲が限定されてよきです。

一方で、ビルド時間の増加やパフォーマンス面での問題がないわけではないので、今後は適切な境界でアプリを分けて行きたいなと思っています。

他にも、この2年で色々とアップデートされました!(書ききれないので一例です)

  • モジュラーモノリス構成にして大きめな機能を切り分けた
  • 多言語対応してグローバル展開開始 ( 🇯🇵 🇺🇸 🇪🇸 🇹🇭 🇻🇳 )
  • Storybook を導入して全ページ&全言語でVRTを実施
  • Storybook の Play function でインテグレーションテスト(進行中)
  • Formik → React Hook Form 移行(進行中)

来年は React Hook Form への移行や GraphQL クエリの改善を中心に、パフォーマンスの改善を進めていく予定です。

アプリ

React Native を使って iOS / Android の両方を開発していたところからのネイティブ化を進めています。Native Modules を使って Swift / Kotlin で書かれたネイティブコードを実行しています。

現在では新機能を開発する時はほぼネイティブで実装しています。以前より開発する機能の技術的な難易度が上がってきてますが、各プラットフォームが提供する機能をフル活用できており、とても良いUXで実装できています。

昨年のタイミングでネイティブ化する決断をしたマネージャーに感謝 🙏

幸い非常に優秀なアプリエンジニアの方々に入って頂けたので、すごいスピードでアプリの開発/改善が進んでいます。

既存画面のネイティブ化も少しづつ進めていますが より加速していきたい ので、興味のある方はぜひお声がけください!

インフラ

引き続きメインで AWS、一部で GCP (Firebase) を利用しています。

今年からSREチームが誕生して、様々な最適化や監視によるボトルネックの発見/改善を進めています。

SRE チームの取り組みについては、以下の記事をぜひご覧ください!

https://zenn.dev/aldagram_tech/articles/acc99d361d1006

大きな変更点としては、元々 IaC には CloudFormation を使っていたのですが、新しくインフラを立ち上げる時は Terraform を使うようになりました。Terraform Cloud で tfstate 管理をしていますが非常に便利でよきです。

来年は CloudFormation から Terraform へ移行できたらいいなと思ってます(計画中…)。

その他

デザインツールが XD → Figma に移行しました!以前よりもデザイナーとエンジニアの間でコミュニケーションが活発になってとても良いです。僕は FigJam が大好きで以前から使っていたので、みんなに気軽に共有できるようになった嬉しさがありました。

また、E2Eでは MagicPod をWebアプリ/ネイティブアプリ両方で活用しています!Web側は6~7割くらいは MagicPod で担保できており、デプロイ頻度の向上に大きく寄与してくれました。

来年はアプリのテスト拡充に力を入れていく予定です!

まとめ

アルダグラムで使っている技術スタックのここ2年くらいの進歩を振り返ってみました。

改めて振り返ってみると、この2年でけっこう進化したなぁと思うと同時に、あまりドラスティックな変更はしていませんでした。

過去に開発してきたものがしっかりと積み重なっている証拠だと思うので、今後も技術ありきの判断ではなく、将来を見据えたトレードオフ判断をしていければと思います!

アルダグラム Tech Blog

Discussion