Atrae Tech Blog

People Tech Companyの株式会社アトラエのテックブログです。

アトラエの技術・アーキテクチャ・文化を紹介します

アトラエにある4つの事業、Green、Yenta、Wevox、Inowのエンジニアが集まりAtrae Engieer Meetupを開催しました。リモートワークの影響もあり、普段なかなか一堂に会する機会のないメンバーもオフライン/オンラインで集まり、各事業の技術やチームの話などを発表しました。

そこで本記事では、「アトラエのエンジニア組織ってどんなところ?」「どういう技術使ってるの?」という方へ向けて、アトラエの技術・組織について紹介します。もっと詳しく知りたい!という方は記事最後にある採用ピッチを是非ご覧ください。

アトラエのエンジニアってこんな感じ

本Meetup開催前にWevoxのカスタムサーベイという機能を使って、アトラエ内のエンジニアメンバーに、好きなエディタや言語などに関するアンケートをとりました。その中からいくつか特徴的な結果をご紹介します。

エンジニア歴は3~5年が最も多い

アトラエのエンジニア組織は新卒メンバーも多い一方、ここ最近では中途メンバーも増えてきて、結果的に社内のエンジニア歴は多様にわたります。

アトラエでは新卒採用メンバーが入社前にインターンをしたり、業務未経験エンジニアの方もいることから、1年未満、1~3年のメンバーも一定数います。また、エンジニア経験が長いメンバーがメンターなどになって、インターンのメンバーに教えることも多くあります。とはいえ、経験に応じて役職が決まるわけではなく、あくまで会社・事業にどれだけ価値を生み出したか?が評価の軸になっているため、全員がフラットにコミュニケーションをとっているのが特徴です。

好きなエディタはVSCodeが最も多い

エディタはVSCodeが圧倒的に人気な一方、各言語・プラットフォームごとのエディタ(Rubymine, Xcode etc)を使っている人も多いようです。

好きな言語は、Ruby、TypeScriptが多い

アトラエのサービスの多くはバックエンドにRuby on Rails、フロントエンドにはTypeScriptを採用しています。そのためRubyやTypeScript人気が高いようです。また、データサイエンスチームが中心となって社内勉強会を行なっている影響もあってか、Pythonの人気も高く、非エンジニアメンバーも日々Pythonでコードを書いたりしています。

作業する環境は「どこでも」という方が最も多い

アトラエでは、全員が無駄なストレスなく働けるように、原則いつでもどこでも働くことができます。オフィスにいたいときはオフィス、自宅で集中したいときは自宅という文化が根付いていて、どこでも働ける方が多いという結果に影響しているようです。ただ最近では対面でのコミュニケーションも重視して、定期的に出社しているメンバーも増えています。

さて、ここからは各事業の技術スペックをご紹介します。

Green

https://www.green-japan.com/

「Green」は求人メディアのサービスで、アトラエのサービスの中でも最も歴史が古く、またアプリケーションも巨大です。そのため、新規機能開発と並行してリファクタ及びリアーキテクチャを推進しています。

現在、Ruby on Railsが担っているサーバーサイドをGoで書き直し、またフロントエンドもNext.js + Reactに移行をしています。

また、ユーザーへのメール配信配信基盤、分析基盤の構築も行っています。具体的には、SendGrid + fluentd + BigQueryでプッシュ通知・配信メールのA/Bテストがよりやりやすいよう基盤の刷新をしてきました。メールテンプレートも、コードベースのものから、ローコード化し、誰でも内容を編集できるようにしています。

一方、巨大アプリケーションならではの課題も多く残っています。これらを一つ一つ解決することもエンジニアチームのロードマップに含まれていて、順次対応しています。リファクタ・移行に際して、不要な機能あるいは優先度が低い機能に関してはビジネスサイドと相談の上機能を削除をしてスムーズに移行できるようチーム全体で工夫しています。こういったリファクタやリアーキテクチャは直接的なユーザー価値を生むわけではないため、一般的には事業的優先度は低いと見做されがちです。しかしGreenチームでは、今後の成長に際して重要なファクターであると認識し、チームの一定のリソースを割いてでも取り組むことにしています。

Yenta

https://page.yenta-app.com/jp

「Yenta」はビジネスパーソン向けのマッチングサービスで、iOSAndroidアプリ、またWebアプリケーションと多岐にわたるプラットフォームで展開されています。iOSはSwift、AndroidはKotlinで、サーバーサイドAPIRuby on Railsで書かれています。またWebはNext + ReactでSPAとして構築されています。

またサーバーサイドアーキテクチャはこのようになっています。

元々スマホアプリ向けにAPIが細分化されており、それを後発のWebアプリケーションにも適用しやすくなっています。

Yentaはビジネス向けマッチングアプリという特性上、一度に大量のリクエストが起きる可能性があるサービスです。そのため、クエリごとにパフォーマンス改善を図ったり、オートスケールするようにしたりと、様々な工夫をしています。

またYentaはマッチング&コミュニケーション機能をベースとしながらも、Q&A機能や特性診断など、マッチングとは異なる分野の機能も多くリリースしています。そのため画面の種類、数がいっきに増えることが多いのですが、スマホアプリ向けのデザインだけでなく、Web側のデザイン・実装も行う必要があります。チームとしては少ない人数ながら、ビジネスサイド/エンジニアが一丸となってコミュニケーションとりながら、スピーディに開発ができているのが特徴的です。

https://web.yenta-app.com/personality/top

小さなチームで質の高いデザインを生み出すために、UIデザイナーとPdM、さらにエンジニアもデザインにコミットしています。Figmaのデザインカンプをデザイナー <=> PdM, エンジニア間で何度もお互いにフィードバックし、最終的にはFigma上でデザイン及び細かい画面の挙動をpx単位で詰めています。一般的には、PdMやデザイナーが決めたものを上から下に伝えることもありますが、Yentaチームではチームで意思決定を図って、クオリティの高いものをアウトプットしています。

Wevox

https://wevox.io/

「Wevox」は従業員の方々のエンゲージメントを測るためのサーベイ及びその可視化を行うtoB SaaSアプリケーションです。エンゲージメントサーベイという主要機能を軸としながら、関連する様々な機能を高頻度でリリースしています。そこで、チームのアジリティを損なうことなく開発を続けるために、マイクロサービス化を進めているところです。

技術スタックは以下の通りです。

サービス開始当初はReact + jQueryだったフロントエンドも、その後Reactのみになり、TypeScriptの導入を行い、また現在ではNext.jsを導入したりとフロントエンドの開発効率を追求しています。サービス特性上、「サーベイの結果をどう見せたら、ユーザーの価値につながるか?」という観点での改善や機能追加が多いため、フロントエンドの改修頻度が高く、保守性を考慮して技術選定及びリアーキテクチャを行なっています。最近ではNxを使ったmonorepo構成に移行しており、チームがサービス単位で分かれても、疎結合にコミュニケーション・実装ができるよう工夫しています。

またバックエンドはBFF層にRuby on Railsを採用しており、また各サービスの処理をGoで記述しています。企業の全従業員の回答という大量のデータを処理するために、実行処理効率を重視してGoを採用しています。

Wevoxにはアプリケーション開発以外に、データサイエンス(DS)のチームもあります。技術スタックは以下の通りです。

アプリケーションのサーバーサイドがRuby, Goで書かれているのに対しDSチームではPythonを採用しています。一度に大量のデータを処理する速度や、ML/DL関連ライブラリが豊富なことなどからPythonを使っています。分析・モデリングにはJupyter Notebook、またハイパーパラメーターの管理にHydraを使っています。また計算・分析結果などをカスタマーサクセスのメンバーが参照する部分に関してはFlaskで書かれています。

事業・プロダクトが大きくなり、チームが分散化するなかで、日々のコミュニケーションやチームづくりにも注力しています。

具体的には、サービス・PJ単位のチームだけでなく、各技術(フロントエンド、サーバーサイド、インフラ ...etc)ごとの横断チームも存在しており、各技術におけるIssueについて話し合ったり、解決に向けてサブタスクとして取り組んでいます。その背景として、マイクロサービス化を進める中で、不必要な分断が起こっていたことがありました。例えば、同じ課題意識を持っているメンバーたちが、チームが分かれてしまうことでその解決に向けて動き出しにくかったり、ノウハウの共有が進めにくかったりしていました。そうした状況を改善するために横串チームをつくり、メインPJと並行してサブタスク的にアクションを促しています。また、月1,2回の頻度でプロダクトチーム全員での対話会を実施し、普段コミュニケーションを取らないメンバー数名で話し合う機会を設けています。

Inow

Inowはベテラン人材向けのジョブ型マッチングサービスで、2021年にローンチされたアトラエの中で最も新しいサービスです。(執筆現在ではβ版の提供のみ)

https://get.inow.jp/

技術スペックは下記の通りです。Inowはまだβ版ということもあり、事業として高速で価値を検証していくために、アトラエの既存技術を踏襲して技術選定をしています。

フロントエンドはReact、TypeScriptにMaterial UIを採用し、またバックエンドはGo一本でサーバーを立てています。またWevoxでも使っているArgo(上図右上のタコのロゴのサービス)は、Kubernetes向けにWorkflow(Argo Workflow)やCD(Argo CD)などのツールセットを提供するサービスです。

アトラエ全社のエンジニア文化・制度

最後に、全社的なエンジニアの文化・制度をいくつかご紹介します。

フラット/オープンコミュニケーション

アトラエはホラクラシー組織と呼ばれる組織形態を採っており、各メンバーに役職がありません。そのため上下関係もなく、基本全員がフラットな関係で事業運営を行なっています。エンジニアも同様に、シニアメンバーからジュニアメンバー、新卒/中途関係なく、プロダクト開発に取り組んでいます。例えば、「先輩エンジニアのコードレビューだから直さないと...」みたいなことは起きえないですし、むしろ若手メンバーからもレビューや提案がたくさん飛び交う組織です。

また、Slackの運用ルールとして「原則、DMは禁止」となっていることから、様々なコミュニケーションは会社全体にオープンにされています。また、社員であれば他事業部のチャンネルに入ったりするのも自由なので、他チームがどんなコード書いてるかなどを見ることも可能です。また、個人で分報など自由につぶやけるtimesチャンネルを作る方も多く、仕事以外のことも含めて自由にコミュニケーションをとっています。

「20%ルール」

Googleが採用して話題になっていた「20%ルール」に近いことをアトラエも取り入れています。ただ、「20%を別のことに充てないといけない」というわけではなく、あくまでメインPJ・業務意外に20%程度なら個人の判断でサブプロジェクトに従事しても良いというものです。例えば、メインはWevoxのエンジニアをしながら、全体の20%程度をエンジニア採用業務に充てているメンバーもいます。

アトラエには「アトラエスタンダード(通称、アトスタ)」というものがあり、その中の一つに「Atae is Me」という、アトラエを自分事として捉えて、当事者意識をもって企業活動を行おうというものがあります。このAtrae is Meに則って、自分がやるべき、あるいややりたい!と思ったものがあれば手を挙げてそこに20%程度コミットすることができます。

勉強会

定期的に勉強会や輪読会なども開催されています。これまでには、『エリック・エヴァンスのドメイン駆動設計』、『Clean Architecture』などの設計本、またセキュリティに関する書籍の輪読会などがありました。また、これらはエンジニア以外でもおこなわれていて、インプットに積極的なメンバーが多くいます。

最近ではデータサイエンスの勉強会が全社向けに行われ、半年ごとに数名が挙手制で参加し、機械学習やデータサイエンスについて学んでいます。

もっとアトラエのことを知りたい!という方は是非こちらのスライドをご覧ください。

speakerdeck.com

atrae.co.jp