raahii.meのブログのロゴ画像

ウェブログ

LINE上で手軽に割り勘できるサービスを作った

LINE 上で手軽に生活費を折半できる haraiai(払い合い) というサービスを作った。 ターゲットユーザーとして主にカップルを想定しているが、2 人組であれば誰でも使えるサービスで、こんな価値仮設を基に開発した。

  • (ユーザー) カップルなどの 2 人組は、
  • (欲求) 支払いをどちらかがまとめてした際に、折半したいが、
  • (課題) わざわざアプリを入れたりするのは面倒くさいので、
  • (製品の特徴) LINE 上で手軽に支払いを記録できることに価値がある

使い方

LINEグループを作成して haraiai 公式アカウント を追加し、そこで支払いを記録していくだけ。

「集計」とメッセージを送ると、支出の差額を返す。

haraiai 公式アカウントは「メッセージが 2 行」かつ「2 行目が金額(数値)」であるメッセージだけを処理する。よって普通の会話は自由にできるつくりになっている。

このサービスの売りはなんと言ってもその手軽さにあり、余分な機能をあえて削ることでそれを達成している。例えば、5:5 以外の折半や 3 人以上での折半には対応しない。できることはただの 2 つ、「支出との記録」と「集計(5:5 で折半した場合の支払いの偏りの表示)」 だけだ。

開発のきっかけ

個人的にパートナーと同棲を始めるにあたって、まとめて支払ったものを楽に記録・清算できる方法を探していた。

よくあるやり方として、共通の財布やカードを作るというものがあるが、準備に時間と手間がかかる。加えて、支払い方法が多様化している今、「個人のお金」と「共通のお金」を分けること自体が悪手だと感じていた。

そこで共通の財布のようなやり方はきっぱりと諦めて、互いに支払いを記録していくととした。いくつか既存のアプリも試したが、普段から使っている LINE 上で記録できるツールを自作することにした。なぜならその方が

  • アプリのインストールが要らず、使い方も迷わない
  • LINE は日常的に開くのでシームレスに記録できる
  • 普通の会話もできる、記録が会話につながる

という良さがあるためだ。

デメリットを一つ上げるなら、手で入力するのが手間、ということだ。たしかに大量の支払いがあるならマッチしないかもしれない。

しかし、プロトタイプを作って使い始めてみたところ、この手で入力する行為が「支出を記録しない」という選択肢を残してくれており、自由度の高さにつながっていることに気づいた。

例えば、「さっきのはご馳走するね」というやり取りがあれば、記録しなければよい。「食費は自分の方が多く食べるから多めに負担するね」となれば、好きな額を差し引いて記録すれば良い。このような柔軟性は共通口座にはない haraiai の強みだと考えている

清算はどうやるの?

さきほど、あえて削った機能として紹介した「清算」について。清算という行為は一般的で、特に経済的に余裕がない人は短期間で偏りを解消したいと考えるので、月ごとにやっていたりする。なので実は、 haraiai でも「清算」と呼びかけることで、サポートはしている。だが、あえてサービス説明などでは載せておらず、 支払いの少ない側が次回は払うなどしてバランスを取る ことをオススメしている。

理由は、どちらかがまとめて払っている時点で、一時的に多く払っている状況は許容できるケースが多いと思うからだ。プロトタイプを試す中でも、シーソーゲームのように支払いのバランスを調整していくことで、清算はなくても良いと感じた。勝手な理念だと思うかもしれないが、はっきり言って清算は面倒くさいし、やらなくても良いのにやる必要があると思い込むケースが多いと想像している。「是非、払い合ってほしい」という思いを込めてサービス名をこのようにした。

運用コストの話

haraiai は LINE Bot なので、LINE 上でメッセージ送信などのイベントが起こったときに webhook が飛んでくるのでその処理がメインとなる。今回はコストを最低限に抑えるために、 GCP の Cloud Functions と Firestore Database を使った。

Cloud Functions は 200 万リクエスト/月 までは無料。1 グループあたり月 100 メッセージ飛んでくるとしても、月 2 万グループまでは無料で運用できる。

Database の方は読み取りと書き込み、保存データ量でそれぞれ無料枠の基準が設定されている。haraiai は最低限のグループ情報と各ユーザーの支払総額を保持しているだけなので、グループあたりのデータサイズは小さくて済む。1 グループのデータが 1KB と仮定すると、

  • 毎日 5 万件の webhook の受信 (read)
  • 毎日 2 万件の支出の記録 (write)
  • 10 万グループの永続化

が無料でできる。毎日支出を記録するユーザーを基準とすれば、月間 2 万 LINE グループくらいが目安になりそうなので、ほぼ無料で運用できる見通しだ。

懸念点としては、LINE のメッセージが送られるたびに webhook を受信せざるをえないので、スタ爆みたいなことをやられると辛い。今はすべてのリクエストでグループ情報を read しているので、Function も Database も使われてしまう。

よって今後の対策として、関係のない会話など、処理する必要のないイベントは DB アクセスをスキップさせることを考えている。LINE プラットフォーム側にもユーザーごとのリクエスト制限機能などがあると良いのになとは思うが…。

ちなみに GW に個人開発のコストの話が盛り上がっていて、これらの記事は面白かった。

今回は FaaS や terraform 使ってみたいという技術的な興味でこの構成だが、もっとヘビーなものをつくるんだったら、Heroku や VPS のような固定費用のものが堅実だろうと思う。個人開発でいきなりスケーラビリティが必要なことはほぼない。

終わりに

今のところ、「haraiai」と検索しても 「haraitai」の検索結果になってしまうので、まずはこれを打破したい。

是非、触ってみてください! haraiai - 払い合い