Origami Pay最初期に苦労したこと

亀井浩明氏:では始めたいと思います。改めまして、Origamiの亀井です。私がOrigamiに入ったのは4年ぐらい前の2015年8月1日で、今年の2月からはエンジニアグループのマネージャーをやっています。それ以前はバックエンドとWebフロントエンド中心で開発を行っていました。今回はOrigamiの苦労話ということで、とくにOrigami Payの話をしていきます。

Origamiという会社は、もしかしたらご存知かもしれませんが、Pay事業の前はECを行っていました。ECの開始が2013年4月で、Origami Payの開始が2015年10月です。私は8月入社だったのでOrigami Payのシステムはほとんど完成しており、あとはリリースを待つ段階でした。

私が入る前に何があったのか、Slackのログを追ってみましたが、実はサービス開始前はそこまで苦労はしていません。普通の開発と同じような試行錯誤はありましたが、発表するほどおもしろい内容ではなかったので、本日は主にリリース後の話をさせていただきます。

お話ししたいことはたくさんありますが、とりあえずかいつまんで、サービス開始直後の話とiBeacon問題について話したいと思います。

サービス開始直後に直面した問題

まずはサービス開始直後に出てきた問題についてです。2015年10月にサービスを開始したのですが、この時点では、そもそも日本はでスマートフォンで支払いを行うイメージ自体が存在していない状況でした。今ではスマートフォンで支払いをするのはPay PayさんやLINEさん、楽天さんなど、当たり前になっていますが。

当時は加盟店さんも少なかったので、修正や新しい機能を付けても、とくにサーバサイドのリリースをしても、まず決済が起きませんでした。放っておくと何十分も経ってしまいます。単純に決済がないだけならいいのですが、もしかしたら何か問題が起きているかもしれません。でも、決済が起きない限りそれがわからない状況でした。

これをどうにかしないといけない。では、どうするか。決済が起きないなら、自ら起こしていくしかありません。

具体的にどんなことを行ったかというと、サーバのリリースをするときに、当時は表参道にオフィスがあったので、オフィスから歩いて5分ぐらいのところにあるOrigami加盟店のカフェで検証をしていました。Slackで「リリース開始します……完了しました」とAさんに伝えて、AさんにOrigami Payを使って商品を購入してもらいます。その結果どうなったか、問題が無かったかどうか、Slackでやり取りしていました。

つまり、自分たちで決済を起こして「本番稼働は大丈夫かな?」と検証していました。当然テストはしていましたが、本番でやらなければ安心感が得られなかったので、そういったことをやっていました。

これは今でも実施しています。今は社内に「Origami Kiosk」という売店があるので、そこで実際に購入して本番確認をしています。それでもすごく大きな変更があった場合、POS経由で決済するような機能や大きな加盟店様が入るときには、社内の売店ではテストできないケースもあります。

そんなときは、Origami Pay加盟店まで走って実際に決済をしてみて問題がないことを確認するということを、私だけかもしれませんが今もやっています。

他に初期にあった問題としては、お店のオーナー様は契約をしているのでOrigamiが何なのかを知っていて「使えるよ」ということがわかるんですが、店員さんはオーナーさんとは別の人なので、そもそも存在を知らなかったり、あるいは操作に慣れていないので怖い、みたいなことがあるので「Origamiでお願いします」と言っても「今できないんですよ」みたいな話になったりしました。

あとはそもそもユーザ数が少なかったので、実際に使おうと思っても端末の電源が切れていて電源を起動するところから始まったり、ひどいときには充電が切れているのでつなぎ直して、そうするとけっこう混んでるお店だと後ろのほうまで並んでしまって「すみません。またあとで現金でお願いします」みたいなこともあったりしました。

ただ、あまり混んでいないときは、私は20分も30分も粘って決済をしていただいたりしていました。

「お支払いコード」入力方式の変遷

続いて、iBeaconの話をする前に、Origami Payの基本的なMPMの仕組みを話したいと思います。仕組みは簡単で、加盟店様の端末に金額を入力いただいて、お支払いコードを発行していただきます。購入されるお客様は、発行されたお支払いコードを自分のスマートフォンなどの端末に入力することで決済完了となります。

大事なことは、このお支払いコードをどうやってお客様が入力するかという点において、とくに制約はないということです。何らかの方法で入力をすれば良いと。

本当の初期は、直接手でコードを入力するかたちでした。これは今でも、カメラが壊れているケースなどに備えて最終手段として提供していますが、幸いなことにほとんど使われていません

ただ、「手で入力するってどうよ?」という話が比較的早い段階からあって、iBeaconというBLEを使った通信でお支払いコードを入力する方法に移行しました。ただし現在はQRコードを使っていて、iBeaconは完全に廃止しております。

iBeaconとはなにか?

みなさんiBeaconはご存知ですか? 簡単に説明します。iBeaconはBLE、「Bluetooth Low Energy」上のプロトコルです。iBeaconのデバイスはUUID・Major・Minorという3つの値を飛ばしています。アプリ側はそのiBeaconデバイスの距離を大・中・小の3段階で取っています。iBeaconはAppleの商標のものではありますが、BLEでしかないのでAndroidでも受信はできます。

iBeaconを使うと何が良いかと言うと、一応非接触っぽいことができます。その結果、「先進的だよね」という評価が得られました。悪い点は電波なので、どう飛ぶのかさっぱりわかりませんでした。そのために受信状況がかなり不安定でした。

この、目に見えない電波を使うというのがかなり面倒くさい話でして、発信状況もわからなければ、実際に受信しているのかどうかもわかりませんでした。さらに、決済がすごく失敗しやすかった。なぜかというと、iPadの世代や種類によって、BLEの発信源のチップの位置が微妙に異なるんですね。

店員さん側で「この辺りにかざしてください」みたいなアドバイスをしてくれたりして、向こうでハックを生み出してくれたのですが、すごく申し訳ないですし、お店側のiPadが変わるとルールが変わってしまうので、ますます申し訳ないという感じになります。

ユーザ側からしても、Android端末にとっては無理矢理使っているようなものなので、受信能力に幅がありました。先ほど大・中・小のレンジで取ると言いましたが、あれはAppleがiOSでやっているから、ある程度統一性を持った距離を取っていますが、Androidはそんなことは考えていないので、端末によってバラつきがありました。「この端末だとこの距離でも反応するのに、この端末だと近づけないと反応しない」みたいな。

なので、この問題に対処するために、端末を大量にレンタルをしてソフトウェア的に受信感度の調節を行いました。何十台と借りましたね。私はアプリ開発ではないので「大変だった」という話しか聞いていませんが、大変だったそうです。ですが、これでもうまく行きませんでした。

そのうち、電波を見る能力がチームメンバーの中で生まれたりして……。

(会場笑)

これは過去のSlackのログから取ってきたんですが、4月ぐらいに「DさんがiBeaconの電波が見えるって言ってましたよ」とか、Androidの電波の感度の調整をやっていた人が「iBeaconの放射方向が見えてきた」「目覚めたか」みたいな話をしたり、「iBeacon、見えないの?」みたいな煽りを入れたり。

当然そんなアホみたいなことはやってなれないので、ある日社長と雑談している時に、「正直に言ってほしいんだけど、今iBeaconとQR2つ使ってるけど、どっちがいいと思う?」と聞かれたので、私と周囲にいた人と「QRにしましょう」という話をして、iBeaconからQRへ移行しています。

QRコード決済の良いところ

実は2015年9月時点でQR版のプロトタイプはできあがっていました。おそらく10月のリリース前にはプロトタイプができてます。これは9月1日入社のメンバーがサクッと作ったようでして、ログを見たら9月10日には外部にプレゼンをやっていたようです。私はその場にはいませんでしたが、すごい勢いで作っていたようです。

ただし、プロトタイプでしかないのでデザインを整えたり加盟店様への案内を考えて、並行期間を経て徐々にQRに移行し、現在ではiBeaconはまったく使っていません。

(スライドを指して)こちらが歴代のアプリの画面です。向かって左側のものは最初のリリース時点のもので、当時はまだECがメインだったので下が支払いタブみたいな感じになっています。次がiBeaconの全盛時代で、お支払いアイコンも電波が出ている雰囲気になっています。iBeaconを完全に廃止していき、QRがメインになると、アイコンもなんとなくQRみたいな感じになって、現在これに加えてバーコードのCPM用のボタンも用意されております。

QRの利点は枯れている技術なのでカメラさえ使えれば読めることです。また、適切なエラー訂正レベルを選べば非常に早いですし、安定もしています。また、なぜ失敗したのか、なぜ成功したのか判断がしやすくて、「QRが汚れていたのでダメでした」みたいなエラーが表示されます。また、慣れると肉眼でデコードできるそうですが、私はできません。

当然他にも苦労はいっぱいありましたが、非常に楽しいサービスを作っているなぁと感じています。社会に影響を与える楽しいサービスをやりたいと思っているので、われわれのコーポレートバリューである「Bigger, Faster」「Be Proactive」「Be Positive」というこの3つのValueをモットーにがんばっております。

ありがとうございました。

(会場拍手)