今回は、弊社のエンジニアである田中がブログを書いてくれたのでご紹介します!
エバーセンスのエンジニアチームの技術スタックについて知りたい、という方はぜひご一読ください!
こんにちは。エバーセンスでエンジニアをしている田中です。
以前サービス開発の裏側〜エバーセンスのエンジニアの働き方〜という記事を書いたのですが、だいぶ古くなってしまいました。
またプロダクトが増えてきたり、三井物産とジョイントベンチャーをつくったり、コジカジという子会社をつくったり…と外部環境が変わっていく中で、扱う技術が多様化、結果外部の方からみるといったいどういった技術スタックを扱っているのかわかりにくい状態になってしまっていました。
そこで、本記事ではエバーセンスでは扱っている技術スタックをかんたんに紹介したいと思います。
詳細が気になったり、悩み・ツラミを聞いてみたいなどありましたら、カジュア面談も募集中なので、是非遊びにいてくださいね。(オンラインですが)。
技術スタックを説明する前に〜エンジニアチームについて〜
現在エバーセンスのエンジニアは、エバーセンスを含めnorth star社とコジカジ社に在籍しています。(とはいえリアルなオフィスは同じ場所で、出社した際は情報交換や雑談など行える間柄です。)。バーチャルでいうとエンジニアチームが3チームあるような状態です。
エバーセンス社が一番歴史があり、扱っている技術も古いものから新しいものまで色々。
north starとコジカジは、エバーセンスのエンジニアの試行錯誤の結果を取り入れながら、技術選定をしており、比較的新しい技術やアーキテクチャを使っています。
時々「flutter」使ってるんですね、と興味を持っていただけることがあるのですが、flutterでいえばnorth star社やコジカジ社でメインで使っており、エバーセンス社では一部しか扱っていません。(※1)。
メンバーとしては、いわゆるサービス指向のメンバーが多いです。サービスやプロダクトのグロースを意識しながら開発しています。出身は多様ですが、過去toB向けのシステム開発に携わったメンバーが多いのは1つ特徴かもしれません。
非エンジニアの方からは、エンジニアなのに話しやすい、と評価(?)してもらっっています。
(※1)とはいえ、会社間での交流もあるので触れる機会がまったくない、というわけではありません。
エバーセンスを支える技術スタックの全体像
それでは技術スタックの説明ですが、「フロントエンドにはxxxを使っています」のような紹介だと味気ないので、どうしてその技術を採用しているのか?問題はないのか?など、色々と補足していきます。
フロントエンド
弊社のメインプロダクトであるninaruやninaru babyはiOS/Android のネイティブアプリです。メインというだけあって、エバーセンスのエンジニアはSwiftかKotlinを書いている時間が一番長いと思います。
iOSはSwift、AndroidはKotlinで開発しています。歴史の長いものは、Java/Kotlin併用になっているものも。(Objective-Cのプロダクトは、Swiftリプレイスで撲滅しました。)
iOSとAndroidは基本的には同一仕様を目指して開発していますが、2つの言語で実装するので、仕様差異がでたり、そもそもの仕様把握が大変だったりというツラミがあります。とはいえ、広告周りのSDK充実度の関係でflutterのようなワンソースで置き換えるのは現状難しいね、という話をしていたり。
また、ninaruやninaru babyで読める記事をサーバーサイドで作ります。Webフロントエンドは「HTML/CSS/JavaScript」、UI部分のフレームワークはVue.jsを使っています。
サーバーサイド
サーバーサイドは、主にRuby、最近はGoを使っています。コンテンツ作成(CMS)は、WordPressと内製ツール(Ruby on Rails製)があるので、たまにPHPを触ったりもします(本当にたまに)。広告周りでjsを触ることもあります。まとめると、保守はRubyを、新規開発はGoを使う機会が多いと思います。
WordPressやRuby/Ruby on Railsのバージョンが古いものもあり、運用中のサービスのミドルウェアアップデートが得意な人がいればご一緒したいです。(弊社では、動いて当たり前だけど、大変な仕事をきちんと評価するエンジニア文化があります!)
インフラ
インフラはほぼ100%AWSです。専任のインフラエンジニアはおらず、サーバーサイドのメンバーがインフラも触ります。少人数でやっていくので、知見が溜まりやすいよう、AWSにリソースを集中させています。
AWSロックインでOKと考えているので、リソース管理はCloudFormation(最近はCDKも多い)、プロビジョニングはansibleです。エンジニアの人数をプロダクトに比例して増やしていくような組織スタイルではないので、いかに運用に人を割かずに済ませるか、みたいなところに知恵を絞っています。
過去は特にひねりもなくEC2+RDS+CloudFrontといった構成を使っていましたが、最近はECSだったりlambdaを使って新規サービスをつくっています。うまーくファイルキャッシュなど使って、アクセスの割に相当スモールなEC2インスタンスを使っているのが特徴でしょうか。知恵を使って節約してる感じです。(お金をかけるところにはちゃんとかけます)。
Q&A
Q. 複数の技術を扱いますか?
Yesです。Swiftを書いているエンジニアが、別のプロジェクトでAndorid開発するといったことは日常です。得意・不得意はありつつ、サービス開発を1人で行えるようなスキルセットを持ってもらいたいと考えているので、色々な技術に触ってもらっています。
複数のことを同時並行して生産性を落とさないよう、1エンジニアが担当するプロジェクトは基本1つずつとなっているのでご安心を。
Q. ライブラリのバージョンやアーキテクチャってどうなってますか?
いくつもあるので、ぜひお話を聞きにきてください(笑)。
Q. エンジニアとしてチャレンジできないことはありますか?
大抵のことは提案あればチャレンジ可能ですが、「機械学習」や「大規模トラフィックを扱う」、「めちゃくちゃアニメーションを作り込む」などは、まだお仕事の用意がありません。
技術的チャレンジをするために、ビジネス的なことを考えないと行けないので、他の会社様より実現が難しいかもしれません。
最後に
今回大まかな技術スタック(2022.02 ver)を説明しました。弊社では技術スタックを一緒に磨いてくれる、ネイティブアプリ / サーバーサイドのエンジニアを募集しています。
今回紹介できなかった細かいライブラリやアーキテクチャなど含め、気軽に話を聞きに来てください!
では。