重視したのは「商品データの取得」「ネットスーパーとの連動」Stailerの“開発不要”を実現した2つの技術
「開発不要でネットスーパーアプリを立ち上げられる」。これは、10Xが提供するサービス「Stailer」のコピーです。
「開発不要」とは、既存のネットスーパーを持っているスーパー事業者にとっては、新たに開発せずにアプリ版を開始できるということ。これを実現するために行ったのが「商品データの取り込み」「アプリ上の操作を既存ネットスーパー側にも反映」の2つでした。
そこで今回は、10XのCTOである石川洋資、開発を担当した沢田洋平と久田一輝にインタビュー。「開発不要」を成立させるための開発をくわしく聞きました。
プロフィール
石川 洋資 | @_ishkawa
Co-Founder, 取締役CTO
大学にて経営工学を専攻。在学中にスタートアップの創業メンバーとなり、iOSアプリの開発に取り組む。大学卒業後は面白法人カヤック、LINE株式会社、株式会社メルカリで新規アプリの開発に携わる。その後、メルカリで同僚だった矢本と株式会社10Xを創業し、CTOとしてプロダクト開発全般を担当する。
沢田 洋平 | @swdyh
Software Engineer
フリーランスとして産業技術総合研究所の音声認識関連の研究開発プロジェクトに参加。トレタのサービス立ち上げ時期に入社。サーバサイドの開発を担当し、1万店の飲食店が使うサービスに成長。また個人として、複数のページを自動で継ぎ足していくブラウザ拡張AutoPagerizeなども開発。
久田 一輝 | @hisaichi5518
Software Engineer
面白法人カヤックでぼくらの甲子園シリーズのリードエンジニアを務める。その後、GMOペパボでハンドメイドマーケットminneのWeb API開発に関わった後にチーフテクニカルリードとしてモバイルアプリケーションの技術基盤の整備や技術選定を担う。
必要な情報をひたすら取りにいき、データベースを再現
ーいきなり本題なのですが、Stailerを「開発不要でネットスーパーを立ち上げられる」とするため、どのような開発が行われてきたのでしょうか?
沢田:前提として、Stailerは「商品データの取り込み」をするためにクローラー、「アプリ上の操作を既存ネットスーパー側にも反映」のためにサイトコントローラーという、2つのシステムを採用しています。まずは、クローラーで「商品データの取り込み」を担当した僕からお話しします。
ーはい!
沢田:クローラーは、いわゆるWebページにあるデータをとってくるシステムです。Google検索でもクローラーが使われていて、プログラムからWebページにアクセスし、必要な情報を抜き出してデータベースに登録しています。
Stailerでは、既存のネットスーパーとアプリにある商品データが一致していることが大事。なので、既存のネットスーパーにある商品データなどの必要な情報をひたすら取りにいき、データベースを再現しています。
ー具体的に、どんなデータを取得しているんですか?
沢田:商品の名前や値段、カテゴリー、売り切れているかどうか、安いかどうかなどのデータを取得しています。
これまでは商品によってデータ取得の頻度を変えていました。例えば、生鮮食品の一部は1時間1回、そうじゃないものは1日1回で取得するようにしていたり。でも、今はスーパー事業者さん側からデータをもらえるようになったので、当初よりだいぶ頻度を落として取得しています。
ー商品の内容によって、柔軟に対応しているんですね。
沢田:そうです。既存のネットスーパーは、商品が売り切れてステータスが変わることもあれば、新商品が一気に増えることもある。そんなとき、アプリ側との情報がズレると、ユーザーの信頼も下がってしまいます。そうならないように気をつけているんです。
ただ、やはり扱うデータが多いので…そのあたりは大変ですね。今はイトーヨーカドーさんに導入いただいていますが、ネットスーパーをやっているのは116店舗。取り扱う商品も生鮮食品から雑貨、衣類と幅広く、1店舗あたり1万〜3万点あります。そうすると、アクセスを多くし、同時に裏側での処理も多くしなければならない。なかでも一番苦労したのは、ネットスーパーがリニューアルし、システムがガラッと入れ替わったこと。この対応は、けっこう大変でした。
アプリ上のユーザーの操作に基づいて、Web上のネットスーパーを操作
ー続いては、「アプリ上の操作を既存ネットスーパー側にも反映」のための「サイトコントローラーについて。サイトコントローラーって、業界業語ですかね?
久田:一応、昔からある名前みたいですね。Stailerにおけるサイトコントローラーは、既存のネットスーパーをアプリで操作できるようにするためのものです。Stailerでは、サーバーサイトコントローラーとクライアントサイトコントローラーの2つがあり、ユーザーの操作に基づいてネットスーパーを操作しています。
石川:ちょっと補足すると、サーバーサイトコントローラーは完全にプログラムだけで完結する操作、クライアントサイトコントローラーはWebView上でユーザーの操作と連動しながら動く違いもあったりします。
久田:ですね。Stailerではこの2つを使い、ユーザーがアプリで商品をカートに追加したり配達日時を設定したりすると、既存のネットスーパー側にも反映されるようにしているんです。
ーStailerは、前身である献立アプリ「タベリー」にあった「オンライン注文機能」をもとに誕生したサービスでもあります。ということは、サイトコントローラーはタベリー時代から実装していた?
久田:はい、そうですね。Stailerと違うのは、タベリーでは、すべてクライアントサイトコントローラーだけで実装していたことです。クライアントサイトコントローラーは、アプリのWebViewを利用して実行するのでプラットフォームやWebViewのバージョンによって実行環境が違い、デバッグがしにくいというデメリットがありました。なので、Stailerに関しては、半分くらいをサーバーサイトコントローラーで動かしていますね。
ー実装してみて、どうでした?
久田:既存のネットスーパーのどこに欲しいデータがあるのかわからないので、探したりするのは少し苦労しましたね。要素の名前も短縮されていたりして「何なんだこれは?」みたいなところから調査していました。Google Chromeでデベロッパーコンソールを開き、HTMLの構造を見たりHTTPのリクエストやレスポンスを見ながら「このリクエストにはこういうレスポンスを返しているのか」と確認したり…。
ー実装するまでは、Chrome上での戦いなんですね。でも、調べてもわからないところはあると思います。くわしいHTML上の仕様の確認は、先方と一緒に進めているとか?
久田:Stailerを導入いただいているイトーヨーカドーさんの場合、先方と随時相談できる関係性はできているので、わからないことはその都度質問して協力しながら進めています。
「今後はより本質的なAPI連携でセキュアなシステムを目指したい」
ーStailerは、今後も今の仕組みで続けていく予定なんでしょうか?
石川:Stailerでは、パートナーであるスーパー事業者が開発不要でクイックにアプリ版ネットスーパーを出せることにフォーカスしています。そのため、今の手段を選んだんです。今後も続けていくかと言うと…そうじゃないですね。これは、チーム内の共通認識でもあります。
ーでは、将来的にはクローラーやサイトコントローラーから脱却する?
石川:今、ようやくStailerで立ち上げたネットスーパーから売上が積み上がる状態になりました。パートナーも、より技術や開発に投資できる段階になりつつあるので、本質的なAPI連携でクローラーやサイトコントローラーを不要にし、よりセキュアなシステムに置き換えられればと考えています。
沢田:そうですね。そのためにも直近では、先方から商品データを取り込み、安定性や検索スピードを上げるところにより注力していくつもりです。
久田:ですね。とは言ってもすぐにサイトコントローラーをなくすことは出来ないのでサイトコントローラーの改善もしていくつもりです。 ネットスーパー側に仕様変更があった場合はサイトコントローラーにも変更を加えるので、変更を検知する仕組みが必要です。今はE2Eテストを書いて定期的に実行する形でそれを実現していますが、この検知する方法をより安定してかつ高速に動かす方法に置き換えることで、安定性や開発速度をあげたいなと思っています。
---
この記事に関連する求人情報
ソフトウェアエンジニア
関連記事
10Xの公開情報では、10Xで働くことに興味をもっていただいた方向けに、10Xのミッション・バリューや、各職種ごとの業務内容や魅力、10Xの目指す姿を紹介している記事をまとめています。
ぜひ、ご覧ください。
オープンオフィスのお知らせ
「10Xに興味がある」「10Xメンバーと話してみたい」「オフィスの雰囲気を感じてみたい」という方向けに隔週でオープンオフィスを開催しています。
10X Open Office申し込みフォーム