aumoの「サービス/技術スタック」紹介 – aumoをより知ってもらうために –

グリーの新卒エンジニア研修の一環で、7月はグリーグループ各社の技術スタックを学ぶという月間でした。そこでaumoも技術スタックの紹介を行ったので、その時に話した内容を抜粋してお届けします。

グリーグループの中でaumoの位置付け

グリー株式会社では「ゲーム事業(画像の上段左端)」「ライブエンターテイメント事業(画像の上段中央)」「メディア事業(画像の上段右端)」の3つの柱をメイン事業としています。その中の「メディア事業」に位置付けられているのがaumoです。メディア事業の中では最後発になっています。

2021年7月21日に実施した研修はメディア事業の会で、aumoの他にグリーライフスタイル(主にLIMIAについて)、Glossomの3社で行いました。

aumoのユーザー規模

2017年3月よりWEBメディアとしてサービス提供を開始し、2018年1月にはアプリの提供もスタートしました。現在はコロナ禍にも関わらずユーザー数を伸ばし続け、月間サービス利用者数1200万人&スマートフォンアプリ(以下、App)ダウンロード数500万超の国内有数のメディア規模まで成長しています。

サービスの特徴

現在提供しているサービスは大きく3つあります。Web系サービスが「Web記事」「Web施設」の2つ。Appが1つです。各サービスの特徴についてはこの後、技術スタックと一緒に紹介していきます。

各サービスの技術スタック

Web記事

Web記事(https://aumo.jp/)はaumoで最初に作ったサービスで、Ruby on Railsのモノリシックで構築しています。そのために記事、CMS、サポートツールをなどを含んだ構成になっています。

インフラは共通でAWSを基本とし、ALB × Auto Scaling × ECS の構成で冗長化し、可用性を高めています。データ類に関してはRDSを基本にし、応答速度向上などの目的でNoSQLを使用しています。

記事検索などの検索機能についてはElasticSearchを採用しています。サービス開始当初は導入コストが低いため、AWSのCloudSearchを利用していたのですが、カスタマイズ性に欠けるためにaumoサービス全体で検索エンジをElasticSearchに切り替えています。

サービスの特徴としては、ライターがCMSを通して執筆した「記事ページ」があります。ページによってレイアウトを変える、AMP対応をするなど、コンテンツに合わせた作りになるようにしています。

Web施設

Web施設はバックエンドとフロントエンドを分ける構成にし、マイクロサービス化を進めるようにしています。バックエンドはRuby on Railsを用いてGraphQLをAPIとして採用しています。以前、GREE Tech Conference2020でGraphQLを採用した経緯を話したことがあるので、興味があればこちらからどうそ。

フロントエンドはNuxt.jsを用いて、Atomic Designでコンポーネント設計を行っています。Atomic Designにおけるコンポーネント設計は以前ブログで書いたので、興味があればこちらからどうぞ。

その他についてはWeb記事と基本的には同様の構成にしています。

サービスの特徴としては、Appから投稿した写真(口コミ)やWeb記事から入稿した記事を元にコンテンツをリッチにし、SEOの向上を狙っています。サービスとしては大きく2つ存在し、「エリア× 施設」「ジャンル × エリア × 施設」があります。

1つ目がAppの写真投稿機能を使ってユーザーが投稿した写真を元に、ランキング形式でエリア毎の施設を紹介する「エリア× 施設」のページです。

2つ目が「ホテル」「グルメ」「レジャー・観光」「チラシ・ショッピング」の4ジャンルでサービスを展開している、「ジャンル × エリア × 施設」のページです。こちらもAppからユーザーが投稿した写真、Web記事から入稿した記事を活用し、コンテンツをリッチにしています。

App

AppはAPIサーバーをRuby on Railsで用意し、クライアント側はiOS、Androidそれぞれネイティブ言語を採用しています。

Appではユーザー毎にトップタブの記事、PUSH通知を最適化しており、そこの機能については機械学習を用いておりAmazon SageMakerを採用しています。

サービスの特徴としては2つあり、1つ目がリコメンドシステムによってユーザー毎に生成されたトップタブの記事リスト、PUSH通知です。記事については連携している数百社のメディアから毎時取り込んでいます。

2つ目が写真投稿、DMをメインとしたSNS機能です。既に話には出していますが、Web系サービスのコンテンツの一部としてもユーザーが投稿した写真を活用しています。

Appはこちらからダウンロードできます。ちなみにWebからAppへ遷移させる機能はFirebase Dynamic Linksを使っています。なので既にaumoのAppをダウンロードしている方は、先ほどのリンクを踏むとAppが開くようになっています。

技術スタックの選定基準

技術スタックの採用については内部要因と外部要因の2側面を考慮しています。

内部要因について

aumoでは開発チーム内で事業別組織のような体系を取っています。事業毎にメインのエンジニアが1人つき、そのエンジニアがそこの事業サービス、機能に関わる技術スタックの選定を一任しています。

そのような体制を採用していることから、メインとしてついたエンジニアのスキルセット、技術好奇心によって技術スタックが決まるような場合もあります。

もちろんのことですが、対象事業のサービス特性、優先事項によって採用する技術スタックの選定は大きく作用されます。例えば、サービスを世の中にいち早く出すといったことが最優先事項であれば、既存エンジニアが慣れている技術を採用し、まずはリリースを目指します。その次のステップとして、リファクタリングを兼ねつつ、異なる技術で置き換えていくといった場合があります。

外部要因について

採用する技術が働いているエンジニアにとって「価値向上に繋がるもの」であるかを重視しています。ここについてはエンジニアとし生きていく上で、「需要が途切れないような人材になるためにはどうすべきか」を常に意識しているわたし個人的にも重視している点です。なので技術トレンド、他社採用実績など、エンジニア市場でどれだけ需要があるかをみています。

エン・ジャパンさんの資料を元に最近使われている技術のトレンドをみると、フロントエンドのフレームワークは「Vue.js、React.js」、サーバーサイドのフレームワークは「Ruby on Rails」がWeb開発だと多く採用されている傾向があります。その辺りは今後、新規プロダクトを開発する上で採用する技術スタックの検討候補に上がってくる可能性は高いかと思います。

また、エンジニア採用難易度についても考慮にいれています。開発スピードを上げるためスポットでエンジニアを増やしたい際に、その技術をできるエンジニアが市場にいて、スピード感を持って採用できるか、というのは事業上で重要になる場面があるので、その点で考慮にいれています。

採用エージェントさんが出している情報や、直接話を聞く中での市況感を参考にしています。

おわりに

aumoでは現在、新規プロダクトの開発、既存プロダクトの機能追加を絶賛やっております。そこでエンジニア組織の強化を行うために採用に力をいれています。

技術スタック選定から実装まで一気通貫して関わることができる環境があります。話を聞いてみたい、一緒に働いてみたいと思った場合、以下から気軽にコンタクトしていただけるとうれしいです。