楽天最安値検索を作った話(買い物リストの単価比較)
「シャンプーの詰め替え、どこで買うのが一番安いんだろう」
そんな疑問が、このツールの出発点です。
日用品って、なんとなく「楽天でポイント付く日にまとめて買う」という習慣になっていました。でも実際のところ、1回あたりの量で割った単価 を比べたことはありませんでした。
400mlと700mlでは値段も違う。セットや詰め替え用など、同じ商品名でも種類が多すぎる。比べるだけで疲れてしまうんです。
スプレッドシートから始まった
最初は、よく買う商品をGoogleスプレッドシートにリストアップして、手動でURLを貼っていました。
1週間もすると飽きました。
価格は変わるので、定期的に更新しないとすぐ古くなります。手動で30品目を毎週確認するのは、明らかに続かない。
「これ、自動化する方法はないのかな」
そう思って Claude に相談したのが、このツールを作り始めたきっかけです。
JANコードで管理する、という発想
私がこだわったのが、JANコード(バーコード)で商品を管理する というアプローチです。
商品名での検索は厄介でした。同じシャンプーでも「詰め替え」「大容量」「ダブルパック」など派生品がたくさん引っかかって、目当てのものを絞り込むのが大変です。
JANコードは商品の仕様ごとに付与される番号なので、「このJANコードのものを探してきて」と指定すれば、商品自体の取り違え(容量違い・派生品の混入)はだいぶ減ります。
ただし、楽天市場やYahoo!ショッピングは同じJANでもショップごとに商品ページが立っているので、1つのJANで複数件ヒットすることはあります。ショップ間の価格差を比べるという用途には、むしろこの「複数ヒット」が役立ちます。
ただ、JANコードが同じでも、ショップ側の商品登録ミスやセット商品の表記ゆれで、完全に同一条件とは限りません。「JAN1234567 を3個セットで売っているのに、1個分のJANで登録されている」みたいな例は実際にあります。最終的な単価判断はリンク先のページで内容量・セット数を確認するのが安全です。
スプレッドシート時代に「この商品のJAN何番だっけ」と調べていた経験が、そのままツールの設計に活きました。バーコードリーダーアプリで自宅の棚の商品をスキャンして登録していく作業は、地味ですが意外と楽しかったです。
週次更新の仕組みを作る
価格が古いままでは意味がないので、登録した商品の価格情報を 定期的に取得して更新する仕組み が必要でした。
ちょうどホテル検索ツールで週次更新の仕組みをすでに作っていた(第6回参照)ので、そのパターンを流用しました。
仕組みはシンプルです。週に1回、Pythonのスクリプトが走って楽天とYahoo!ショッピングから商品データを取り直し、結果を1つのJSONファイル(data.json)に書き出します。値段一覧のページは、そのJSONを読み込むだけの 静的なファイルの集まり として配信していて、この部分はサーバー側で重い処理をしない素朴な作りです。あとから、JANコードやキーワードでその場で探せる検索機能を足したので、検索を使うときだけは、楽天とYahoo!の公式データを裏側でリアルタイムに取りに行き、結果をネット上の小さなメモ帳(KV)に一時的に控えて使い回しています。週ごとに作る一覧は静的、検索はその場で動く、という二段構えです。
データの作り直しからサイトへの反映までは、毎週土曜の朝に自動で処理が走るようにしています。Pythonの実行 → 新しいJSON生成 → Cloudflare Pagesへの自動反映(デプロイ)、までを一気通貫で回してくれるので、こちらは何もしません。
日用品の価格は1日・2日ズレても大きな問題にはならないので、週次で十分と判断しました。実際に使ってみると、「火曜日あたりにまとめて買い物リストを作る」という自分の習慣とも合っていて、週1更新はちょうどいいリズムでした。
ただ、価格・在庫・送料・ポイント還元は楽天市場とYahoo!ショッピング側で常に動いています。本ツール上の表示はあくまで 参考値 として、最終的な金額やセット内容はリンク先の商品ページでご確認ください。
「地味な便利さ」を公開してみた
しばらく自分だけで使っていたのですが、「これ、他のツールと同じように公開してみようか」という気持ちになりました。
ホテル検索や子連れスポット検索のように、一般性の高いツールではありません。登録商品は私が個人的によく買う日用品に偏っているし、単価比較という着眼点は地味です。「ウケる」かどうかはわからない。
でも、自分が本当に使っているツールを公開する というのが私のスタンスなので、そのまま出しました。
公開にあたって特に大きく作り直したわけでもなく、トップページのリンクに追加してサイトマップを更新した程度です。
作ってみて気づいたこと
このツールを使い始めてから、「同じ商品、先月より少し高くなってるな」という変化に気づくようになりました。価格を記録して比べる習慣がないと見えなかった情報です。
大きな節約につながるかどうかはわかりません。でも 「何となく買う」から「選んで買う」 という小さな変化が、地味に気持ちいい。
いま手こずっていること
作っていて一番手こずっているのは、「何個セット」「何枚入り」を正しく取得する ところです。
同じ商品でも書き方がバラバラなんです。
- 「3個パック」
- 「12本セット」
- 「50枚入り×2」
これを取り違えると、単価が一桁ずれてしまいます。
商品ページごとに表記が違うので、ひとつのルールで全部きれいに拾うのが難しい。いまも少しずつ直している最中です。
ツールを自分で使い続けることで、次の改善点が見えてくる——自分で使い続けながら改善する、私の試行錯誤はまだまだ続きます。
← 他の制作記を見る | トップ | お問い合わせ