ランドリー室をキャッシュレス対応できないか検討してみた Stripeアプリ開発(超プロトタイプ)

知的生産

運営している賃貸物件「ハイドレンジア箱根」には共用のランドリー室があります。入居者向けに使えるように大家さんである著者の妻(建築家)がフルリノベーションの際に作ったものです。全自動洗濯機が2台、ガス式の乾燥機が2台という構成で運用しています。

タダで使ってもらうには電気代もかかるわけで、いっそコインランドリーにしようということでコインボックスを設置して集金しています。

しかし、今どき100円玉をじゃらじゃらもっていくというのもスマートじゃないですよね。これをDIYでキャッシュレス決済システムにできないものか。ちょっとした技術検討をしてみました。

現状のランドリー室の仕組み

全自動洗濯機は一般的な家庭用洗濯機です。これを設置してコンセントにつなぐと誰でも使えてしまいます。入居者から支払いを受けた上で使っていただきたかったので、コインボックスを設置しました。

コインボックスは100V電源をオフ・オン+タイマー制御をするものなので、コインを入れないと電源が入らない、という接続になっています。

現状: 洗濯機と電源の間にコインボックスが設置されている。コインを入れると電源が入るしくみ

これをコインではなく、キャッシュレスで切り替えしたいのです。

システム開発に使える技術

最近は、カード決済を代行してくれるサービスが色々登場しています。特に、API(Application Programming Interface)を提供することにより、ユーザ(この場合、決済代行の依頼したい事業者)が自分のサービスに手軽にカード決済機能を統合できるようになっています。こういうのをPaaS (Platform as a Service)とでも呼ぶのでしょうか。

多くの場合、自分のWebサイトとPaaS業者のAPIを組み合わせてECサイトを作るなどのユースケースに使用できます。そうすると、サイトのユーザ(この場合、一般消費者)は、自サイト上の商品をクレジットカードなどで支払うことができるわけです。

PaaS型のサービスを使えば、大家さんである事業者が、カード決済のしくみを自分のサービス(この場合、コインランドリー)の支払に利用できるはずです。

PaaSとしてのStripe(支払代行サービス)のしくみ(例)

カード代行サービスと言っても、APIではなく支払画面等のアプリケーションも含めて提供する業者もあります。こういう形式をSaaS(サーズ、Software as a Service)と呼んだりするのでしょう。著者テック大家さんとしては、コインランドリーの支払アプリ(Webアプリ)を作りたいので、APIを提供してくれるPaaSタイプのサービスを選びたいのです。

APIはプログラマーが使うものです。PaaS業者は、彼らのサービスをより多くのプログラマー(開発者)に使ってもらいたいわけです。そのため、開発のためのドキュメントや開発コードサンプルなどを充実させて公開しているのが一般的です。

たとえば、以下のようなサービスがあります。

Stripe

1つ目はStripeです。世界中のカード決済に対応しています。

APIやSDKなど開発者向けの情報も充実しています。とにかく開発者向けの情報が手厚いイメージです。ドキュメントページで表示されるテストコードやAPIの戻り値などが本物に近い形で表示されるのでかなり便利。

また、テストモードを使うと、疑似カード番号を使って、自分で開発したWebアプリの決済を実際に動作させることができます。結果は、ダッシュボード上で決済一覧として手軽に確認できます。

Square

2つめはSquareです。こちらは、決済端末がいくつか用意されていて、スマホやタブレットと組み合わせたものもあります。対面でのキャッシュレス決済を手軽に導入できます。

開発者向けの情報も充実しています。

Stripeを使って検証

ここでは、さくっと手軽に動作確認の意味を込めまして、Stripeを使っていきます。

仕様としては、以下のようなユースケースで考えます。

まず、コインランドリーの使用者がQRコードなどを使って、大家さんが用意するWebサイト(Webアプリ)にアクセスします。

Webアプリが表示されると、ブラウザ上にはコインランドリーの支払のための決済画面(Stripeのダイアログボックス)が提示されます。

ここでカード番号を入力して200円の支払いが行えます(ここは、洗濯機を使う時間に応じた支払になる)。

決済をすると、サーバー経由でランドリーが動作します。

200円の支払で洗濯機が30分動作して停止します。

ちなみに、ランドリーが動作する部分はIoTのスマートプラグ(Switchbot)を使ってみました。Switchbotに関しては別記事で取り上げるつもりです。お楽しみに!

以上のようなユースケースを実現するためのWebアプリは、ReactというJavaScript/TypeScriptのフレームワークを使って開発します。

Stripeでアプリを開発するためにはWebアプリのバックエンドも必要になります。ここでは、Firebase FunctionsやRealtime DatabaseというこれまたPaaS型のサービスを使うことにしました。なぜなら、料金が従量制でちょっと試すだけなら支払いが0円になるからです。サーバーを借りるコストが0で実現できるというわけですね。

決済が実行された結果は、Stripeの管理画面(ダッシュボード)上の支払一覧で確認できるというわけです。

このシステムは、最終的にはコインボックスの支払額に応じて15分とか30分といった一定時間のみ通電されて、時間が来たら電源が切れるというしくみにします。通電のオフ/オンを擬似的に検証する意味でSwtichbotのスマートプラグを使ってみました。

SwitchbotはAPIが公開されており、インターネット経由でリモートからオフ・オンが可能です。これを使ってプログラミングします。つまり、Stripeの決済が終わったらクラウド(Google Cloud Tasksを使用)でタイマーを開始すると同時にスマートプラグをオンにするプログラムです。このコードは、タイマーが終了するときにSwitchbot API経由でスマートプラグをオフにします。

タイマー動作中は新たな支払ができないようにWebアプリで「使用中」の状態を提示します。そのために、Realtime Database上でコインタイマーの状態管理をするわけです。

ちなみに、Firebase のRealtime Databaseを使った理由は、ArduinoのFrameworkがサポートしているからです。最終的にはSwtichbotで実現した部分はArduinoのWiFiモジュールとGPIOなどを使って現状のコインボックスにつなぐことを考えています。

ソースコードはGithubで公開しています(以下のリンク参照↓)

プロトタイプの動作

プロトタイプはFirebaseにホスティングしていますが、最初に以下の様が画面が表示されます。

テストサイトの決済画面

ここでカード情報(テストサイトなのでダミーのカード番号)を入力します。

すると、Switchbotのスマートプラグに接続した電球が光る、というイメージです。

実際に決済が行われたどうかは、Stripeのダッシュボードで確認することができます。以下のような画面です。

Stripeのダッシュボード。テストモードで決済が行われたことが確認できる。

終わりに

コインボックスで運用しているランドリールームを、キャッシュレスにするためのシステム開発をしてみました。一応、プロトタイプとしては動作するものが完成したわけです。

ただ、ユーザが毎回カード番号を入力するという手間が必要なのと、はやり手軽に交通系などタッチ式の支払を検討したいです。そのため、このプロトは動作確認のみで留めておくことにしました。

また、今回のプロトタイプではSwitchbotで100V電源の制御を行いました。一方で、まだ現金(コイン)で支払いたいケースもあるかもしれません。そう考えると今あるシステムに、ある程度ハードウェアの開発と統合も必要に感じます。

もう少し検討したいところです。

プロフィール

テック大家さん
ソフトエンジニア兼不動産オーナー。
某超有名日本メーカーにおいてソフトウエア開発畑を30年近く勤務。
かつてはWindowsのアプリ開発や、組み込み機器のソフト開発を行う。プロジェクトマネジメント・オフショア開発・要件管理などの経験あり。現在は、個人開発で、JavaScript/TypeScript/React/Express、PHP/Laravel、Firebase、Google cloud、Arduino(C++)などでプログラミングを楽しむ。
サラリーマンの傍ら不動産経営を始め、現在、1棟モノの賃貸4物件を東京・神奈川に所有。夫婦でおよそ20年の賃貸経営の実績。
最近の物件では、入居者向けフリーWiFiなど、テック系の設備はDIYで自ら構築。
海外MBA取得。