Product

そろばん — フリマ販売の 1 点ごと利益計算アプリ

仕入先の注文履歴とフリマアプリの販売履歴を取り込み、「どの仕入がどの販売になったか」を 1 クリックで結びつけて 1 点ごとの粗利を出す Windows / macOS アプリ。仕入送料の按分もまとめ売りの原価分割も自動。帳簿は手元のファイル 1 つに保存し、クラウドには送らない。

  • Electron
  • Vue 3
  • TypeScript
  • SQLite

Background

依頼の背景・課題

フリマアプリで継続的に物を売っていると、月末に「結局いくら儲かったのか」が分からなくなります。売上から原価を引くだけに見えて、実際に手を動かすと合いません。

1 回の注文で 10 点仕入れて送料が 800 円かかったとき、1 点あたりの原価はいくらか。まとめ売りで 3 点を 5,000 円で売ったとき、それぞれの粗利はいくらか。キャンペーンで手数料が 0 円だった月をどう扱うか。表計算でやると端数がずれて、月の合計が合わなくなります。

自分と配偶者が実際にこの問題を抱えていたので、まず自分たちのために作りました。いまも毎日使っています。

Solution

作ったもの

仕入先の注文履歴と、メルカリ・Yahoo!フリマの販売履歴を取り込み、「どの仕入がどの販売になったか」を 1 クリックで結びつける Windows / macOS のデスクトップアプリです。結びついた瞬間に、その 1 点の粗利が確定します。

粗利は「販売価格 − 販売手数料 − 発送送料 − 梱包材費 − 仕入原価(送料を按分したもの)」。仕入の送料・割引・その他費用は明細に按分して 1 点ごとの原価を確定させ、まとめ売りのときは原価を均等に割ります。手数料は率の見込みではなく、実際に請求された額を取り込んで優先します(出品先によっては率では計算できないため)。

転売と私物は税務上の扱いが違うので、仕入れた商品かどうかで自動的に列を分けて集計します。「発送しただけ」「受取評価待ち」「取引完了」も意味が違うため、実績と見込みを分けて数え、月次には実績だけを入れます。

ホームには「今やること」を 1 本の列で出します。送料を入れる、在庫を紐付ける、仕入の価格を入れる。どれも 1 件 10 秒で片付くことを目標に組みました。

仕入先の自動取り込みは、いまのところ国内のある Shopify ショップ 1 社に対応しています。商品を見分ける鍵は「【A035】」のような型番で、自動の紐付けはこの型番の一致で動きます。それ以外の仕入先は手入力で登録します。

Screens

画面

画面は実際に家族で運用しているデータです。商品名・金額はそのまま表示しています。

ホーム画面。今月の粗利、要対応の件数、在庫点数と、送料が未入力・仕入が未紐付けなどの「今やること」が 1 本の列に並んでいる
ホームの「今やること」。送料を入れる、在庫を紐付ける、仕入の価格を入れる。上から順に潰すだけで帳簿が埋まる。下は型番ごとの粗利ランキング。
売上画面。販売日・商品・価格・手数料・発送方法・梱包・原価・粗利が 1 行に並び、未確定の行には紐付けボタンが出ている
売上の一覧。発送方法を選んで在庫を紐付けると、その行の粗利が確定する。型番が完全に一致する場合だけ「型番で自動紐付け」が効く。
月次画面。月ごとの件数・売上・原価・手数料・送料・粗利が並び、右側に私物の売却が別の列として分かれている
月次。転売と私物は税務上の扱いが違うので、集計の列ごと分けている。粗利は転売分のみ。

Points

工夫した点

  1. 01

    確定は人に残す

    自動で紐付けを確定するのは、型番が 1 つだけで在庫と完全に一致するときなど、間違えようのない 3 つの場合だけです。それ以外は候補を出すところまでで、確定は人がやります。どれも 1 クリックで解除できます。帳簿は間違えたときの損が大きいので、自動化の範囲は意図的に狭くしました。

  2. 02

    過去の利益が後から動かない

    在庫の原価は生成した時点で確定し、後から書き換えません。手数料率の設定を変えても、既存の販売は再計算しません。先月の数字が今日変わる帳簿は信用できないからです。金額はすべて円単位の整数だけで扱い、按分の端数は必ずどこかの行に寄せて合計が一致するようにしています。

  3. 03

    帳簿を外に出さない

    データは手元のファイル 1 つです。クラウドに送らず、会員登録もありません。ログインはアプリ内のブラウザで利用者自身が行い、パスワードは保存せずセッションだけを持ちます。販売先への書き込みは一切せず、読み取りだけです。

  4. 04

    黙って欠けない

    取り込みが 0 件だったときは「成功」ではなく「空」として記録します。黙って欠けるのが一番危ないからです。収集は 1 回に数ページ、ページ間は 2〜6 秒で連打せず、CAPTCHA や本人確認が出たら処理を止めて人に渡します。

  5. 05

    説明を受けずに使える

    利用者 2 人のうち 1 人は、ソフトの説明を受けずに使っています。説明なしで間違えないことを設計の基準にしてきました。エラーも警告も日本語で「何が起きて、次に何をすればいいか」を書き、内部用語やエラーコードは画面に出しません。