noteの技術スタック(2023年の振り返り)
2014年からサービス開始したnoteは、2023年には会員登録者数700万人を突破し、月間投稿数117万件にも達しました。
開発はウェブだけではなく、モバイル、ML、データ基盤など多岐に渡ります。この記事では、サービス開発を内製しているnoteの主な技術スタックについて、解説していきたいと思います。(紹介している技術スタックはあくまで全体の一部になります)
※ この記事はnote株式会社のアドベントカレンダー7日目の記事です。
※ 2023年12月7日 公開
全体図
サーバーサイド
言語 / フレームワーク
Ruby
Ruby on Rails
Go
NestJS
データベース
MySQL
PostgreSQL
Redis
DynamoDB
Snowflake
Elasticsearch
インフラ
AWS
Docker(EKS)
Terraform
CDN
Fastly
CloudFront
モニタリング
Datadog
Sentry
Prometheus
noteは2014年のサービス開始からRuby / Railsでの開発を続けてきました。一部のサブシステムではGoも使用していますが、ほとんどがRubyによる開発です。
近年では、モノリス化してしまっている巨大コード群を分割するために、PackWerkとRailsエンジンによるモジュラモノリス化を進めています。
検索システムにおいては、CloudSearchからElasticsearchへの移行をしました。データ量が増えてきたこともあり、インデクシングにも課金されるCloudSearchは高コストになるためです。
今年リリースしたAIアシスタント機能では、NestJSが利用されています。Rubyで作成したAPIではストリーム処理が難しい部分があるため、逐次で文字列を返せるようにNestJSを採用しました。
▼さらにサーバーサイド関連の記事が読みたい方はこちら
フロントエンド
言語 / フレームワーク
JavaScript
TypeScript
Vue.js / Nuxt.js
React / Next.js
Svelte
その他
Sentry
ProseMirror
noteのフロントエンドは主にNuxt.jsで実装されていますが、多くの機能が密結合し、スケールしにくい状態になっています。それによって、障害を引き起こす原因になってしまうこともあります。
これらの問題を解決するために、機能ごとに適切な粒度で分割をしていくフロントエンドのリアーキテクチャプロジェクトがスタートしました。リアーキテクチャでしていく際に、採用したのがReact / Next.jsです。
また、Nuxt.jsとNext.jsをつなぐ共通コンポーネントとして利用しているのがSvelteです。バンドルサイズがかなり小さく、TypeScriptが書きやすいという利点があります。
過去に行っていたNuxt.jsへの移行経緯を知りたい方は、上記の記事をご覧ください。
▼さらにフロントエンド関連の記事が読みたい方はこちら
インフラ
AWS
GCP
Docker / Kubernetes
Terraform
今年、noteはEKS環境に完全移行しました。移行と同時に、監視やログ、デプロイワークフローなどのインフラの全体的な改善も行っています。
運用体制が刷新されたことで安定性が増したことに加え、独自ドメイン周りなど特殊な処理の実装も切り分けがしやすくなりました。
▼さらにインフラ関連の記事が読みたい方はこちら
データ基盤
Snowflake
Embulk
Digdag
Redash
Looker
noteのデータ基盤には、記事の閲覧やユーザーの行動などさまざまなデータをログとして保存しています。データの加工や保存、取得などをより快適に行いやすくするため、2022年にSnowflakeを導入しました。
導入した結果、クエリーの速度は爆速になり、データ分析のサイクルを早くすることができ、利用者のストレスがかなり軽減されました。
過去のデータも膨大にあるため、移行はまだ途中ではありますが、トレジャーデータのOSSであるEmbulkやDigdagの導入やReverse ETLの実装など、改善を続けています。また、Lookerを導入したことで、エンジニア以外の方でもデータを閲覧しやすくしています。
▼さらにデータ基盤関連の記事が読みたい方はこちら
ML
Python
Amazon SageMaker
Azure OpenAI Service
MLの技術スタックは、できるだけ薄くすることを念頭に置き、アーキテクチャが重くならない技術選定を行っています。可能な限りシンプルな構成で開発をし、noteのバリューである「すばやく試そう」を実践できる状態を保っています。
また、今年はAIに特化した子会社であるnote AI creative株式会社を設立しました。
3700万件を超える膨大なコンテンツを活用し、noteの利便性向上とさらなる成長を目指します。
▼さらにML関連の記事が読みたい方はこちら
モバイル
MagicPod
iOS
Swift
Android
Kotlin
iOS、Androidの両方でリプレイスを進めており、昨年にはObjective-CとJavaを完全に撤廃して、SwiftとKotlinを使用する開発環境に移行しています。
▼さらにモバイル関連の記事が読みたい方はこちら
Podcastで聴く
技術スタックについてPodcastでも公開しているので、こちらもぜひお聴きください。
▼さらにnoteの技術記事が読みたい方はこちら