前のページへ

日本商品ディシジョンチェーンの歩み

日本商品ディシジョンチェーン

以下は 2026 年 7 月に書いた文章です。当時、三つのツールはまだ別々に動いていました。原文は変更せず、そのまま残しています。

日本の中古品を扱う小さな商いでは、同じ三つの問いが何度も現れます。

  • オンラインのどこに安い商品があるのか。
  • 店頭に立った今、この商品には最高でいくら出せるのか。
  • 売れたあと、その取引をどう記録するのか。

そこで、一つの問いに一つずつ、三つのツールを作りました。

どれも商用製品ではなく、自分が実際に使うための生産ツールです。発見、判断、記録をそれぞれが受け持ち、オンラインの相場から最終的な入帳までを一本の流れにしています。

チェーン全体

  1. 日本商品レーダー

    相場より安い商品を見つける

  2. 店舗判断

    店頭での最高購入価格を計算する

  3. 販売記録

    売買と最終利益を記録する

日本商品レーダー

相場より安い商品を見つける

どんなツールか

Mac 上で動くデスクトップの「レーダー集」です。

現在の最初のレーダーはヤフオクレーダーで、Yahoo!オークションのカメラ・レンズ、フィギュア・模型、腕時計という三つの垂直カテゴリーを監視します。

最近の相場より明らかに安い商品を検出すると、アラートをそのままスマートフォンへ送ります。

使い方

  1. 相場を自動で蓄積

    毎晩決まった時間に、その日の落札相場を収集してローカルデータベースへ保存し、「この商品はいくらくらいが普通か」という価格基準を少しずつ育てます。

  2. 昼間に出品中の商品を走査

    一日に複数回、出品中の商品を走査します。即決価格が最近の落札相場より明らかに低い場合は、候補をさらに絞り込んでからスマートフォンへ通知します。

  3. 条件に合えば即時通知

    ntfy を通じて、外出中でもリアルタイムで通知を受け取れます。プッシュ通知の商品リンクをいつでも開き、買うかどうかを判断できます。

  4. ローカル総覧パネル

    全体を確認したいときはローカルのウェブパネルを開き、価格分位、監視ワード、安値候補を一画面で見られます。

仕組み

中心となる考え方は、家のパソコンが動き、外にいる自分が受け取ることです。

  1. 収集層

    Python スクリプトが速度を制限しながら公開ページを収集し、robots の規則を守ります。落札データと出品中データは別々の SQLite データベースに保存し、互いを判断材料にします。

  2. スケジュール層

    macOS の launchd で定期実行し、クラウドサーバーには依存しません。落札相場は毎晩一回、出品アラートは一日に複数回動き、Mac 自体がサーバーになります。

  3. 判定層

    直近半年のノイズを除いた落札価格の低い分位を基準にします。候補は、下落率と絶対金額という二段階の条件を同時に通る必要があります。

    状態を確認できない商品は記録するだけで通知しません。第一判定を通過したあとに商品詳細を読み、状態と出品者リスクを含む第二段階の判定を行います。

  4. 通知層

    アラートは ntfy で送ります。スマートフォンに ntfy App を入れて購読すれば受信でき、中継サーバーの自作や開発者アカウントの申請は不要です。

店舗判断

店頭での最高購入価格を計算する

どんなツールか

スマートフォン優先のウェブツールです。

日本の中古店で型番を入力すると、「この商品に最高で何円まで出せるか」をすぐに表示します。

閑魚の相場、為替、コスト、目標粗利の換算を、スマートフォンを取り出して数秒で終わる判断に圧縮します。

使い方

  1. 店舗計算機

    トップページの検索欄に型番を入力して商品を絞り込みます。

    商品を選ぶと、最高購入価格を大きく表示し、その型番の検品ポイントも並べます。

    価格は次の情報からリアルタイムで計算します。

    • 閑魚の中央値
    • 販売チャネル手数料
    • 目標粗利
    • 持ち帰りコスト
    • 当日の為替レート

    結果は切り捨てます。

    店頭価格がこの数字より高ければ、その場で棚に戻せます。

  2. 仕入台帳

    仕入れたその場で入力すると予想粗利を自動計算し、あとから仕入れロットごとの質を振り返れます。

  3. 店舗リストとルート

    巡回ルートごとに店舗リストを管理します。

    各店舗には「今週訪問済み」をワンタップで付けられ、毎週月曜にリセットされます。週初めの補充リズムに合わせた仕組みです。

    Apple Maps または Google Maps のナビゲーションも直接開けます。

  4. 近隣店舗レーダー

    外出中にふと思い立ったときは、位置情報を許可すれば、周辺数キロの中古店や対象チェーンを検索できます。

仕組み

中心となる条件は、店内でスマートフォン回線しかなくても、いつでも使えることです。

  1. 配備

    アプリは香港のクラウドサーバー上で動き、Flask、SQLite、nginx のリバースプロキシ、systemd の常駐管理を使い、HTTPS ドメインからアクセスします。

    スマートフォンではウェブページを開くだけです。

    日本と中国大陸の両方からのアクセスを考え、サーバーは香港に置いています。

  2. 使用体験

    初回はアクセストークンで認証して Cookie に保存し、以後は直接入れます。

    Safari の「ホーム画面に追加」を使えば全画面で動き、ネイティブ App に近い体験を得ながら、公開、署名、審査を省けます。

  3. データ

    為替は公開 API から毎日キャッシュします。

    48時間以上更新されていない場合は画面で警告し、古いレートで購入価格を判断しないようにします。

    近隣店舗には OpenStreetMap Overpass API を使い、Apple Maps と Google Maps の検索を補助として用意しています。

  4. 同期

    データはサーバー側に保存します。

    店内でスマートフォンから入力したデータは、帰宅後にパソコンで同じ URL を開けばそのまま確認でき、自然に複数端末で同期します。

販売記録

売買と最終利益を記録する

どんなツールか

ローカルで動く、複数商品・複数販売チャネル対応の販売記録・分析ツールです。

商品台帳、個々の売買、異なるコストと販売経路を一か所にまとめ、商品単位、カテゴリー単位、事業全体の売上、利益、利益率をいつでも確認できます。

使い方

  1. 商品台帳

    スニーカー、登山用品、デスク収納などの商品カテゴリーを自分で作り、各商品に独自の商品コードを設定できます。

    各商品には次の情報を保存できます。

    • 実物写真
    • 販売用写真
    • 中国語の商品名
    • 日本語の商品名
    • 英語の商品名
    • 商品紹介
    • 販売文

    同じ商品を複数のプラットフォームへ出品するとき、既存の資料をそのまま再利用できます。

  2. 売買を一件ずつ記録

    同じ商品にも、異なる取引を何件でも続けて記録できます。

    各記録には次の情報を入力できます。

    • 販売価格
    • 数量
    • 仕入原価
    • その他コスト
    • 販売プラットフォーム
    • 販売経路

    入力したデータから、取引ごとの売上と最終利益を自動計算します。

    「一つの商品」を一つの固定価格や一件の販売記録に限定しません。

  3. 階層別分析

    データは三つの階層で確認できます。

    • 商品単位:一つの商品が実際にいくつ売れ、いくら利益を生んだかを見る。
    • カテゴリー単位:どの商品カテゴリーの販売実績がよいかを比較する。
    • 全体:総売上、総利益、利益率、チャネルごとの実績を見る。
  4. 検索と振り返り

    トップページで商品コードまたは名称を検索し、商品台帳をすぐに呼び出せます。

    過去の取引記録と合わせて、次回の価格設定、補充、販売チャネルの選択を振り返れます。

仕組み

  1. ローカルで使用

    自分の日々の売買管理のために作った自用ソフトウェアです。外部ユーザーへのサービスではなく、実際の販売をいつでも記録し、振り返ることを目的にしています。

  2. 商品と取引を分離

    商品台帳は長く変わらない情報や再利用できる情報を保存し、販売記録は一件ごとの実取引を保存します。

    一つの商品に複数の販売記録を紐づけられます。

  3. 自動集計

    売上、コスト、利益、利益率は実際の取引記録から自動で集計し、集計結果をもう一度手入力する必要はありません。

  4. 素材と多言語資料

    商品画像、三言語の商品名、販売文を商品コードに紐づけ、複数の販売プラットフォームで繰り返し使えるようにします。

三つのツールをつなげると、一つの日本商品ディシジョンチェーンになります。

  1. 日本商品レーダーが機会を見つける
  2. 店舗判断が最高購入価格を決める
  3. 販売記録が売買と入帳を完了する

データはチェーンの中で少しずつ蓄積し、一つひとつの工程が次の判断をわずかに正確にしていきます。

三つのツールから一本のチェーンへ

上に書いた三つのツールは、同時に作ったものでも、同じ目的のために作ったものでもありません。

日本商品レーダーは、毎日ヤフオクを手で巡回したくないというだけの理由で始まりました。店舗判断は、ある日店頭で一台のカメラを前に十数分迷い、結局買えず、帰宅して調べたら実はとても割安だったことがきっかけです。販売記録はさらに前からあり、もともとはスニーカーを記録するためのものでした。

三つにはそれぞれ別の由来があり、作っているときは互いのことなど考えていませんでした。これが一本のチェーンだと気づいたのは、実際に使い始めてからです——

ヤフオクで価格を見つけたら、二つ目のツールを開いてこの型番にいくら出せるかを調べる。商品を仕入れたら、三つ目を開いて帳簿に一件記録する。「この一台は以前にも仕入れたか、前回はいくらで売れたか」を知りたければ、三つの画面を行き来しなければなりません。同じ品物について、三か所に不完全な記録が一つずつあり、互いの存在を知りませんでした。

店頭でカメラを手に持っているとき、この往復がいちばん致命的でした。

発見、判断、記帳——本来は端と端がつながっていたものを、私が三つに分けて使っていただけでした。

その後のことを、以下に書きます。

2.0 開発記

  1. いちばん難しいのは画面を書くことではなく、まずデータの意味を揃えること

    三つのツールは三通りの書き方で作られ、データ形式も互いを理解しません。しかし本当に立ちはだかったのは形式ではなく、基準でした。

    レーダーが価格基準を計算する途中には、付属品を除き、無関係な型番を除き、状態のはっきりしないものを除く長いフィルターがあります。最初は手を抜いて生データ表の分布を直接調べたため、システムが実際に使う数字とまるで違う結論になりました。付属品に汚染されたと思ったのに、実際はまったくそうではありませんでした。

    それ以来、一つの規則を決めました。どんな数字も、まずシステムが本当に使っているその数字なのかを確認してから結論を出す。この規則には、その後何度も救われました。

  2. 長いあいだ隠れていた誤り

    腕時計カテゴリーにはもともと五万円の上限があり、それを超える落札は基準に入りませんでした。かなり前に、極端なデータを防ぐつもりで何気なく加えたものです。

    外してみると、ある型番の中央値が 8650 円から 89000 円へ跳ねました。十倍です。その型番の基準はずっと、しかもひどく間違っていました。落札の大半はもともと五万円を超えていたのに、上限が上半分をすべて切り落とし、端数だけを残していたのです。

    さらに厄介なのは、見た目では気づきにくいことでした。中央値は切り詰めに鈍感で、表面上は何も問題がないように見えます。実際に歪んでいたのは、仕入判断に使う二つの分位数——つまり私が本当に見ていた二つでした。

    最終的な修正は、型番ごとに固有の価格帯を使い、両端を 5% ずつ落とす方式です。固定金額の上限は置かず、市場が上がれば一緒に上がります。すべての型番を新しい基準で再計算しました。

    今はどの型番の相場欄を開いても、下の「過去基準」に旧基準の行があり、「5 万円上限を含む」と記されています。記念のためではありません。一つの数字を変えたなら、以前どう見えていたかをいつでも比べられなければならないからです。

  3. データを引っ越させない

    パネルが三つのデータを同時に読むなら、最も簡単なのは自分の側へ一式コピーすることです。そうはしませんでした。

    コピーの代償は見た目より大きいものです。二つのデータはいずれ必ずずれ、そのときどちらが正しいか分からなくなります。そこでパネルは一行も複製せず、読み取るたびに元の場所から中継します。少し遅くても、真実は一つしかありません。

    販売記録のデータベースには、もう一つ問題がありました。完全なローカル自用で、もともと認証がありません。パネルから使うなら、そのポートを一歩もローカルの外へ出さないことが絶対条件です。すべてのリクエストをパネルのバックエンドで中継し、外部からは決して触れません。その後は変更のたびにこの点を検証し直しました。入口を一つ漏らせば、商品写真がそのまま公に露出するからです。

  4. 店頭の三十秒

    このパネルは店頭で使います。その一文が、無関係に見える多くの細部を決めました。

    画面に専門用語を出さず、分位数は「低中高」と呼び、判定条件を平易な言葉で横に書く。データは一度にすべて送り、絞り込みはスマートフォン側で行い、押したあとに待たせない。入口は自作の合言葉と半年有効の Cookie にし、より整った企業向けログインは使わない。後者は期限切れのたびにメールの確認コードを待たされます。店頭でカメラを手に持ち、店員が横で見ているとき、その三十秒は待てません。

  5. 十七回に分けて直した

    パネルは一度で完成したのではなく、少しずつ磨きました。まずデータをつなぎ、次に機能を一つずつ移し、最後に元の三つのツールの画面と一項目ずつ照合して、何が足りないかを確かめました。

    最後の照合では十一の欠落が見つかり、そのうち七つが同じ場所——取引記録——に集中していました。理由は単純です。そこを最もよく使うため最初に作り、その時点では全体が後にどんな形へ育つか分かっていなかったからです。

  6. 結び

    今、このチェーンは最初から最後まで通して使えます。

    これで以前より多く稼げるようになったわけではありません——店頭でお金を出す前に、以前より少し多く知っているだけです。