本文へスキップ
NextCode.ltd
開発事例

棚の前で入力欄5つは多すぎた ― 割引単価アプリ「わりどく」の作り直し

棚の前で入力欄5つは多すぎた ― 割引単価アプリ「わりどく」の作り直し

名前は「わりどく」なのに、カメラはまだ割引シールを読めません。いちばん肝心なところが、手入力のまま残っています。

夕方のスーパーで、しょうゆの棚の前に立つ。1リットルのボトルに20%オフのシール、500mlの詰め替えに30%オフのシール。どっちが安いのか。

わりどくの画面

これを暗算できる人は、たぶん多くない。わりどくは、この一瞬のためだけに作ったiOSアプリです。

1最初の目標は「1商品5タップ以内」

企画をまとめたのは2026年6月5日。目標は、1商品あたり5タップ以内でした。入力の順番は、名前(省略可)、価格、容量、単位、割引率で固定。

単位は8種類です。g、kg、ml、L、個、枚、m、cm。これを重さ・量・個数・枚数・長さの5つのグループに分けて、同じグループの中だけで換算します。1kgと500gは比べられる。1kgと6個入りは比べない、という考え方ですね。

実装の見積もりは全部で3.5人日、そのうち単位換算は0.5日でした。計算そのものは、それくらい小さいんです。

最初から後回しにしたものもあります。税込・税抜の切り替えと、「3個で10%オフ」のようなまとめ買いの割引。食品の8%と日用品の10%が同じ棚に混ざっていて、切り替えを入れると入力欄がもう1つ増える。なので最初の版は税込で入れる前提、と決めました。

2入力欄を捨てて、カメラを主役にした

作ってみて、5タップでも多いと気づきました。

2商品を比べるなら10タップ。3商品なら15タップ。片手にカゴ、もう片方の親指で数字を打つ。棚の前でそれをやらせるのは、「10秒で答えを出す」という最初の約束と噛み合っていなかった。

6月17日、深夜1時2分のコミットで主画面を入れ替えています。画面の下に大きな撮影ボタンが1つだけ。値札を撮ると、端末の中の文字認識が価格と内容量を読んで、カードに入れる。2枚撮れば、単価の安いほうのカードが緑色になって、もう片方は少し小さく縮みます。

手入力は、読み間違えたときにカードをタップして開く「手で直す」画面へ降格。起動直後の説明画面も外しました。開いたら、もう比較画面です。

値札の読み取りは、機械学習ではなく正規表現で書いています。「¥」か「円」にくっついた数字を価格とみなし、「税込」と書かれた行があればそちらを優先。「100mlあたり」のような行は丸ごと読み飛ばします。値札に最初から印刷されている単価を、価格と取り違えないためです。

文字認識の言語補正も切りました。数字の0をアルファベットのOに直されると、価格ごと消えてしまうので。

手入力版と、今のコード

項目手入力版(最初の設計)今のコード
主画面価格・容量・割引率の入力欄◎画面下の撮影ボタン
価格と内容量手で打つ◎値札から読み取る
割引率手で打つ手で打つ(カードをタップ)
比べられる数無料2商品・有料5商品◎全員5商品
単位の種類が違うときの警告◎出る出ない(後述)

3計算の式は1本しかない

わりどくの単価計算は、1つの関数で全部です。価格に「1−割引率÷100」を掛けて、基準の単位に直した量で割る。重さは100gあたり、量は100mlあたり、個と枚は1つあたり、長さは1mあたりに揃えて出します。

冒頭のしょうゆで計算すると、こうなります。

1リットル298円の20%オフは238.4円で、100mlあたり23.8円。500ml158円の30%オフは110.6円で、100mlあたり22.1円。安いのは詰め替えのほうでした。

割引が無ければ、100mlあたり29.8円と31.6円。ボトルの勝ちです。シール1枚で順位がひっくり返る。わりどくが拾いたいのは、まさにこの瞬間なんですよね。

端数は途中で丸めていません。238.4円は238.4円のまま割って、画面に出すときだけ小数1桁にしています。順位も丸める前の数字で決まる。一方で、結果画面の内訳は「¥298 × 80% = ¥238」と整数で見せているので、見た目の238と計算に使った238.4は少しずれます。レジで1円未満をどう処理するかは店によって違うはずで、そこは再現していません。

扱える割引は、今のところ「◯%オフ」の1種類だけです。

値札の書き方ごとの、今のわりどくでの扱い

値札の書き方今のわりどくでの扱い
30%オフ◎割引欄に30と入れる
30円引き割引欄では扱えない。引いた後の値段を価格に入れる
2個目半額専用の入力は無い。2個買うなら1個あたり25%オフと同じ計算
3個で10%オフ未対応(最初から後回しにした)
税抜価格だけの値札切り替えは無い。税込に直して入れる前提
1kgと500gの比較◎同じグループなので換算して比べる
100g入りと6個入りの比較本来は比べられない組み合わせ。今は警告が出ない

4同じ日のうちに、課金を全部外した

もともとは250円の買い切りで、無料では2商品まで、という設計でした。

それを、同じ6月17日の18時58分のコミットで全部外しています。有料画面、アップグレードの案内、設定画面の課金欄。この1コミットで消えた行は490行でした。

理由はコミットに書いてあります。課金のボタンはあるのに、押しても実際には買えない状態だった。その導線を残したまま審査に出せば、落ちるのは見えていたわけで。買える仕組みを急いで作るより、全部無料で先に出すほうを選びました。

3分後の19時1分には、利用状況の送信も止めています。説明文に「完全オフライン」「データ収集なし」と書くなら、裏で何かを送っているのは筋が通らない。送信の関数は残して、中身を空にしました。

画面の言葉も「お得」から「安い」に揃えています。お得かどうかは人によるけれど、単価が安いかどうかは数字で言えるので。

5正直に言うと、作り直しで消えた警告がある

手入力版の画面には、「単位の種類が異なります」という警告がありました。100gあたりで出る商品と、1個あたりで出る商品を並べたときに出るものです。

撮影版に作り直したとき、この警告を持ってきていませんでした。判定する関数はコードに残っているのに、どこからも呼ばれていない。手入力版の画面を消したときに、一緒に消えています。

なので今は、100g入りのお菓子と6個入りのお菓子を撮ると、100gあたりの値段と1個あたりの値段を同じ物差しのように並べて、1位を決めてしまう。これは間違いです。次に直すのはここにします。

もう1つ。単価がぴったり同じ2商品は、片方が1位、もう片方が2位と表示されます。同点の扱いを書いていないからです。

それから、名前は「わりどく」なのに、カメラは割引シールを読みません。読むのは価格と内容量だけで、30%オフの「30」は、カードをタップして手で入れる。いちばん肝心なところが、まだ手入力のまま残っています。

LPの文言も、まだ「無料で2商品まで比較」の頃のままです。アプリのほうが先に進んでしまいました。

6まだ分からないこと

目標にした「棚の前で10秒」は、実はまだ測っていません。撮って、読み取りを待って、割引率を1つ打つ。これが本当に10秒に収まるのかどうか。

値札の読み取りが、実際の店でどれくらい当たるのかも数えていません。値札のデザインは店ごとに違うし、手ぶれも照明の反射もある。正規表現でどこまで行けるのかは、スーパーを何軒か回って、撮った枚数と当たった枚数を数えてみないと分からない。

円引きやまとめ買いに対応してほしい人が、どれくらいいるのかも分かっていません。割引シールを読めるようにするのが先か、割引の種類を増やすのが先か。そこもまだ決めていないんです。

作品の概要はわりどくの作品ページに、ほかのアプリの開発記録はブログ一覧に並べています。値札の読み取りを実際の店で数えたら、その結果もまた書きます。買い物まわりのアプリで相談したい方は、こちらからどうぞ。

関連プロダクト

わりどくの詳細を見る

この記事を書いた人

NextCode(沖縄県宜野湾市)は、iOSアプリ・ホームページ/LP・NFCデジタル名刺・AI業務自動化を作っている開発スタジオです。ここで書いているのは、実際に作って公開したものと、その過程で詰まったことだけです。

お問い合わせフォームは24時間受け付けています。

この記事が役に立ったらシェアしてください