Entrance Bookから振り返るスタディストの技術スタック
こんにちは!この記事は、スタディスト Tech Blog Advent Calendar 2023の 16日目の記事です。昨日に引き続きプロダクト技術責任者の corrupt952 です。
今日は少し趣向を変えて、スタディストで利用されている技術を簡単に紹介します。私たちが日々どのような技術と共に過ごしているかを紹介することで、週末の一時を楽しんでいただければ幸いです。
Entrance Bookとは
Entrance Bookについては、以前弊社の zuncha318 が書いた詳しい記事があるので、そちらを参照してください。
今回は、この公開されているEntrance Bookに記載されている技術スタックを見ながら簡単な解説や補足をしていきます。
Teachme Bizで使われている技術
開発環境
本番はEKS Fargate(Kubernetes)で動作させているのですが、開発環境ではDockerを使って開発しています。
開発環境もk8sに変更するような話も出たりしていましたが、ベースイメージの共通化で十分という判断でDockerが利用されています。
また、全てではないものの一部のツールのインストール・管理にはaquaを利用しています。
asdfと似たようなツールではあるんですが、Renovateとの親和性やCI/CDで採用しています。
クラウドプロバイダ
- Amazon Web Services — EKS/Fargate Aurora(MySQL/PostgreSQL), Redshift, Timestream, S3/CloudFront, Elastic Transcoder, Elemental Media Convert, OpenSearch Service etc.
- Google Cloud — Firebase, BigQuery, Cloud Tasks, etc.
Teachme Bizを構成する多くのコンポーネントは、Amazon Web Services(以降AWS)上で動作しています。
とはいえ、AWSで全ての機能を実現できないためGoogle Cloudも併用して利用しています。
またTeachme Bizは、複数のシステムが協調して動作しているため、各システムの性質に応じてデータストアを使い分けているため、複数のデータストアが書かれています。
インフラ構成管理
クラウドリソースの管理にはTerraformとlambrollを組み合わせて使っています。
基本的にはAWS, Google CloudともにTerraformでリソースを管理しているのですが、 Lambda Functionのみlambrollで管理しています。
TerraformでLambda Functionを管理するにはひと癖あったという経緯があり、昔はServerless Frameworkが利用されていました。
モバイルアプリ
SwiftやKotlinといったモダンな言語を部分的採用しているものの、Android/iOSともに10年近くの歴史があるアプリなため昔からの箇所はObjective-CやJavaがまだ残っています。
フロントエンド
- Language … JavaScript(TypeScript)
- Framework … Vue.js
- Tools … Webpack/Storybook/Vite
フロントエンドには、UIリニューアルというタイミングでVue.jsを採用し、アップデートを続けながら使い続けています。
バックエンド
- Language … Ruby/Clojure/Node.js
- Framework … Ruby on Rails/Nest.js
Teachme Bizのバックエンドは、複数システムで構成されています。
メインのシステムではRuby on Railsが使われており、部分的にClojure/Node.jsで書かれたシステムが動作しています。
CI/CD
- GitHub Actions
- CircleCI
- Argo CD
- Xcode Cloud
- fastlane
- Firebase App Distribution
CIには、GitHub ActionsとCircleCIを組み合わせて利用しています。
元々CircleCIで書いていたWorkflowの多くはCircleCIで、新規はGitHub Actionsで書かれていることが多いです。
CDには、Kubernetesを使っていることもありArgo CDを利用してデプロイしています。
モニタリング
- New Relic
- Datadog
- Google Cloud — Error Reporting
- Sentry
- Crashlytics
- Amazon Web Services — CloudWatch
- Google Analytics
- GoogleAnalytics for Firebase
Webやモバイルなどプラットフォームごとに利用ツールを切り替えることもあり、この数になっています。
最近は、「New RelicをやめDatadogに集約する」といった動きもあり、いくつかのツールに集約されていくことになりそうです。
分析基盤
- Redash
- Kibana / OpenSearch Dashboards
- Looker Studio
プロダクトデータの分析か、モニタリングデータの分析かといった文脈で利用されるツールが変わります。
モニタリングには、KibanaやOpenSearch Dashboardsが利用され、RedashやGoogle Data Studioはプロダクトデータの分析で利用されます。
他の部署では別のツールも組み合わせて利用している場合がありますが、開発部では基本的にこういった構成です。
ハンクラで使われている技術
開発環境
- Docker
ハンクラではKubernetesではなくAmazon ECSを採用していますが、Teachme Bizと同様に開発環境にはDockerを利用しています。
クラウドプロバイダ
- Amazon Web Services — ECS/Fargate, Aurora(MySQL), S3/CloudFront, SES, OpenSearch Service etc.
- Google Cloud — Firebase, Cloud Tasks, etc.
Teachme Bizと同様にAWSとGoogle Cloudを組み合わせて利用しています。
大きな特徴としては、開発環境でも書いたようにECSを採用していることかもしれません。
ハンクラでKubernetesを採用していないのは、
- 開発当時にKubernetesクラスタがなかった
- ハンクラでは ECSが必要十分だった
という理由になります。
モバイルアプリ
- Language … JavaScript(TypeScript)/Swift/Kotlin
- Tools … Capacitor
ハンクラのモバイルアプリは、一からネイティブアプリを作らずCapacitorを使ってAndroid/iOSアプリを作って提供しています。
Webエンジニアのみで最小限のアプリを作るために採用し、目標は達成できていました。
フロントエンド
- Language … JavaScript(TypeScript)
- Framework … Vue.js
ハンクラは、スタディストでも後発のサービスのため、Teachme Bizの構成を参考にしており、 同じようにVue.jsが採用されています。
新しいツールをTeachme Bizに導入してからハンクラに導入するケースや、その逆もある状態なのでいいところをお互い取り込んでいる状態になっています。
バックエンド
- Language … Ruby
- Framework … Ruby on Rails
ハンクラは、オーソドックスなRuby on Railsなアプリケーションです。
そのため、Teachme Bizとは異なりRubyのみが利用されています。
今後のハンクラでも同様にClojureやNode.jsが採用されることは基本的にはない可能性が高く、Rubyが書かれることが多いはずです。
CI/CD
- CircleCI
- GitHub Actions
- Amazon Web Services — CodePipeline/CodeBuild/CodeDeploy
- fastlane
- Firebase App Distribution
- ecspresso
CIは、Teachme Bizとはそこまで大きく変わらない構成になっていますが、CDに ecspresso が採用されていることが大きく異なる点です。
Teachme Bizでは、Argo CDを使ってGitOpsなCDを実現していますが、ハンクラではCode兄弟とecspressoを組み合わせてCIOpsなCDを実現しています。
モニタリング
- New Relic
- Datadog
- Google Cloud — Error Reporting
- Amazon Web Services — CloudWatch
- Crashlytics
- GoogleAnalytics for Firebase
Teachme Bizを参考にモニタリングツール・サービスを導入しているので、似たような構成になっています。
分析基盤
- Redash
- Kibana / OpenSearch Dashboards
ハンクラでもTeachme Biz同様のツールを利用しています。
これはTeachme Bizに合わせて学習コストを低減する目的があります。
おわりに
今回の記事を通じて、スタディストの利用している技術を簡単に紹介しました。本来であれば選定理由などについて細かく説明したいところですが、それはまた今度にさせていだたきたいと思います。
これを読んでスタディストに興味が出たら、是非Entrance Bookを読んでみてください。
それでは良い週末を。