連載「Technology Company Internals」では、テックカンパニーの内側で働くエンジニアに、技術に精通したエキスパートが対面で話を聞き、テックカンパニーとは何か?を探るだけでなく、テックカンパニーを目指す企業の指針となることを目指します。
今回は、ベースフード株式会社さんに、世界最大級の「完全栄養食(*)のサブスク」を支えるシステム開発の裏話を詳しく伺ってきました!
(*)1食で、栄養素等表示基準値に基づき、他の食事で過剰摂取が懸念される、脂質・飽和脂肪酸・炭水化物・ナトリウムを除いて、すべての栄養素で1日分の基準値の1/3以上を含む。
世界最大級の「完全栄養食サブスク」とは
―では、まず自己紹介をお願いします。
煙草森:はい、煙草森(たばこもり)直也と申します。新卒でDeNAに入って、アクセス数の多いゲームアプリのバックエンドエンジニアをしていました。その後にアプリのエンジニアとして、当時はUnityでクライアントを書いていて、2020年の1月にベースフード株式会社に入社しました。今はVPoEとして、社内のシステム全般を管理しています。メインの役割としてはサブスクリプションを中心としたECシステムの運用開発をしています。
―「世界最大級のシステム」というのは、規模としてどんな感じなのでしょうか。
煙草森:完全栄養食に参入している企業がそれほど多くないというのはあるんですけど、とはいえ、2017年2月の販売開始から、累計現在販売数は8,000万袋を突破、サブスクリプションでの定期購入者数は15万人を突破しています。(2022年12月時点)
サブスクリプションサービスというのは見放題サービスなどでよく使われていますが、ベースフードの場合は主食を届けている、というのが特徴です。いろいろな栄養を補うサプリメントなどがたくさんある中で、主食単体で栄養がたっぷり入っていて、バランスに欠損がないようなものを提供しています。「大人の給食」という言い方をしているのですが、栄養バランスが取れていて、自分の好みに合わせた商品が毎月家に届くんです。ブレッドは40日間日持ちするので、月初めに届いてその月の間は十分に賞味期限があるんですよ。
―そのサブスクリプションの仕組みをシステムで支えているのですね。
煙草森:サブスクリプションとECと、顧客対応関連の全部がシステムに含まれています。
いわゆるダイレクト トゥ コンシュマー(D2C: 製造者が消費者と直接取引する)というビジネスモデルで、食品の開発から生産、倉庫管理、受注、販売、配送まで全部自社の管理で行っています。
―機能が非_常に多岐に渡るシステムですが、なんでも一人で開発と運用をなさっているとか…にわかに信じがたいのですが、どのようにして実現してらっしゃるのでしょうか?
端的に言うと、非常に多くの外部サービスを組み合わせて実現しています。
業務のメインはECサイトの保守運用と、新規開発になります。受注したものを配送のシステムに連携する、販売後のお客様のフィードバックを社内の開発に取り入れるためにデータ分析のパイプラインに乗せる、などのタスクがありますが、これらをいろいろな外部のSaaSを使って実装しています。
多彩なSaaSの組み合わせでバックエンドを実現
―具体的にはどのようなサービスを使っている_のでしょうか。
煙草森:まず、メールに関してはMailchimpを使っています。メールサーバーを自分たちで組み上げるよりもメール関連の分析やマーケティング文脈の個別対応が容易です。
決済周りでは、さまざまな支払い方法を扱うため、銀行振込とコンビニ払いに対応しているkomojuという決済代行サービスと、Stripe、Amazon Payを使っています。
ロジスティクスのシステムはLogilessといって、受注情報を登録すると、システム内で受注伝票が作成され、倉庫作業者が伝票を出力してピッキングして発送、在庫管理までをスムーズに行うことができるというものです。
商品のレビューにはu-komiというシステムを使っています。これは購入のタイミングでトリガーするようになっていて、購入から数日経って商品を召し上がられたあとに「商品はいかがでしたか」といったメールをお送りしてフィードバックをウェブサイト上に乗せられる仕組みがあるものです。
ベースフードの商品は長く愛用していただいている方もいらっしゃるので、コミュニティも運用しています。CommmuneというSaaSで購入者コミュニティサービスを作って、新商品や新機能についてご意見を伺うなどのコミュニケーションをとっています。ベースフードでは「ラボ(BASE FOOD Labo)」と呼んでいます。
またデータ分析用のツールは、アナリストやマーケターでも操作ができるように、Embulkのラッパーを提供しているtroccoという分析系のツールを使っています。これを使ってAWSのRedshiftに入力して、RedashやMetabaseなどのBI系ツールから参照しています。
あとはE2Eテストですね。リリース時のチェックにもコストがかかりますので、リグレッションテストの意味合いも込めてエンドツーエンドでAutifyを使っています。これもSaaSです。
―komoju、u-komi、Commmune、trocco、Autifyなど、日本発のサービスをたくさん活用していらっしゃるんですね。
はい、そうしたサービスの事業者に、パートナー的な立ち位置からご協力いただくことで、少人数での開発・運用を実現しています。そうすることで、当社が競争優位性を作る部分、お客様にサービスを使い続けてもらうための決定的な差になる部分の価値を最大化できるようにするという考え方です。
「世界最大級」を1人で支えるためのシステム構成
―なるほど。これだけたくさんのサービスを活用し_ていらっしゃる中で、これらをインテグレーションするためのシステム構成についてお聞かせ願えますでしょうか。
煙草森:中心となるECサイトは、自社ですべてセルフホスティングして運用しています。そのシステムがこちらです。
真ん中のユーザーから下に伸びているshop.basefood.co.jp が、アクセスするとECサイトに行く部分です。アプリケーション ロードバランサー(ALB)を経て、AWS Fargateでサービスを展開しています。
AWS Fargateの中にPHP-FPMがあって、中でLaravelが動いているという感じですね。データベースは Amazon Auroraを使っています。SaaSへのアクセスはコール上限を回避するためにジョブ化してAmazon SQSで管理していて、ここにためたキューをFargateの中に存在するWorker用のタスクが拾って消化していきます。フロントエンドはNuxt.jsのシングルページアプリケーションで動いています。
また、左上に「一部APIアクセスをキャッシュ」と書いてありますが、アクセスが多く、頻繁に変わることのない商品情報等はキャッシュできるようにしています。ドメインに関しては先にCDNを置いていて、商品情報や配送可能な日時など特定のリクエストだけAPI経由なんですけれども、そのAPIはリクエストごとキャッシュして負荷を小さくしているという形です。右側は画像などのアセット関係です。
データ分析基盤も一味違う
―なるほど、よくわかりま_した。外部サービスへのリクエスト専用に、Amazon SQSを活用していらっしゃるというのが興味深いです。
あと、データ分析についての構成も別途あるのですが、その中心となるのは先程も申し上げたようにAWSのRedshiftです。Redshiftが中心にあって、右端にあるのがさっきお話ししたSaaSたちですね。
SaaSとのインターフェースの部分はtroccoに移行しつつありますが、今はAWSバッチでHTTPリクエストをそれぞれのSaaSに投げて、その結果をS3のバケットに置いています。
―データ分析用に、APIで各SaaSからデータを取得して、そのレスポンスをS3に格納しているイメージですか?
そのとおりです。JSONデータとかを直接S3に置いています。これらのローデータから、個人情報をフィルタリングするなどの加工を行って、それらをRedshiftに入れるというのがこの右側のパイプラインになっています。
真ん中にある黒いのはDMSで、その下にあるメインDBのAmazon AuroraからRedshiftにオンラインで同期されています。左側はこれらのデータを分析するBI系ツールで、左側がMetabase、右側がRedashです。あとはこれらのBIツールに対してリクエストを発行するボットを作っています。Redashの画面をキャプチャしてSlackに投稿するものなどです。
―これを全部おひとりで…?
煙草森:開発初期から、そして今でも数人の業務委託のエンジニアにお手伝いいただいていますが、正社員としてEC周りのシステム開発をしているエンジニアは私だけですね。
―ECシステム開発からインフラ、データ分析基盤の作成まで、ってことですよね。すごいです。
煙草森:そうですね、ビジネスの成長に合わせて課題を解決していくうちにここまでのシステムになりました。とはいえ外部サービスの力を借りることができたのでなんとかやれてきた、という側面は大きいと思います。
今でこそ自前でECサイトを抱えていますが、ビジネスの初期ではAmazonや楽天を使って商品を販売していた時期もありますし、Shopifyを使用していた時期もありました。ただ、お客様が増えて、より良いサービスやユーザー体験、コミュニケーションを追求していった結果、自前で提供するサービスが徐々に増えて、最終的に今の形になったという流れです。
―なるほど、ビジネス側から明確な課題が与えられていたからこそ、たった一人ででもすごいスピードで現在のようなシステムを組み上げられたということですね。
Amazon SQSフル活用で、サービス間の安定性や整合性を保つ
―多くのサービスを組み合わせると課題も出てくるのではな_いかと思いますが、システム全体の安定性や整合性をどのように保っていらっしゃいますか。
煙草森:基本的に、Amazon SQS で再実行を可能にしているところが大きいと思っています。SaaSを使っていると、運用のコストが減る、新規開発しなくていいといったメリットがある一方、いつ止まるかわからない、止まったときには復旧を待つしかないということがあるので、エラー番号500が返ってきても簡単に再実行できるようにしているんです。
例えばLogilessでは日々受注情報を登録しているわけですが、500エラーが帰ってきて受注が登録できないということがたまにあります。それを放置しておくと決済はされたけれど受注が入っていないので配送されないという、大きな問題になってしまいます。なので、そういう状況を検知できる仕組みを作って、確認して受注IDを入れれば簡単に受注データが再生成されるような管理画面を用意するなどして対応しています。データの管理も結構大変です。
また、さまざまなSaaSを利用しているとAPIの仕様などもそれぞれ異なっています。認証や順次データを取得するためのページング処理など、分析用のデータベースに同期をするための仕組みも工夫して実現しています。
―これだけのシステムを組み合わせて作っておられると、気になるのはお値段です。コスト面などはいかがでしょうか。
煙草森:すべてを自社開発するよりは絶対安いと思いますね。開発のコストもそうですし、運用のコストも間違いなく低いです。システムから連携しているSaaSの話をしましたけれど、たとえばロジスティクスのシステムであれば社内のサプライチェーン関連部署の人たちが使ったり、あるいは倉庫の人たちが使ったり、コミュニティのシステムであればマーケティングチームなどプロモーションをしているチームの人たちが使ったりするので、彼らが使えるようにするために、しっかりと使い方を理解してもらうことが必要です。SaaSに任せておけば利用者に対するサポートもしっかりしているので、かなりリーズナブルかなと思っています。
世界最大級の「完全栄養食サブスク」をともに創るエンジニア募集!
―では、今後の展開や見通しなども含めつつ、読者の方々に伝えたい_メッセージを。
煙草森:ベースフードは最初にお話しした規模感から、今後もっともっと大きくなることを想定して、エンジニアを募集しています。現在の定期購買者15万人から、30万人、50万人といった規模に成長することを目標に動いていて、その規模のシステムにふさわしいユーザー体験、もっと使いやすくてもっと買い物がしやすくて、使って楽しいみたいな、サブスクの理想的な体験をさらに追求していきたいと思っているんです。10やれば10響く、お客様が喜んでくれたらちゃんと数字が上がるということが実感として持てる、意味のある仕事が当社にはたくさんあります。
技術的な面では、開発効率や改修の容易さ、パフォーマンスも含めて、トレンドやモダンな技術を取り入れています。直近だと今はNuxt.jsを使っていますが、これをVercelを利用したNext.jsに移行すると、高速にレンダリングできるうえに、運用工数も抑えられる可能性もあるよね、といった議論を社内でしていました。ECサイトなんてレガシーなものが多いと思われるかもしれないですが、むしろモダンもちゃんとやって、いいものを作ろうとしています。テック的な方々も当然ウェルカムですし、ビジネスのバランスを考えながら動いていただけるような方々、当社のビジネスを「なんか面白い」と思ってくれる人が合うのではと、私自身がわりとそういうタイプだったので思っています。力を発揮していただけることが多い環境だと思いますので、ぜひぜひウェルカムです。
―ベースフードの未来を一緒に作っていく感じですね。煙草森さん、今日は貴重なお話をありがとうございました。
ありがとうございました。
ブロックチェーン開発の基礎知識 ユースケース、仕組み、注意点 https://bit.ly/3Gf0RHj
ひとりで開発してるってのがすごいなあ。これだけのサービスを組み合わせるのだとそれぞれについてのそれなりに知見が必要だろうし。