← 制作記一覧へ

楽天最安値検索を作った話(買い物リストの単価比較)

公開: 2026-05-03 · #15 / 最終更新: 2026-06-01 楽天市場Yahoo!ショッピング単価比較ツール制作

📌 記事の取り扱いについて:本記事は公開当時の体験・気づきをまとめたものです。現在のツール数・プラン数・対象年齢・記事数・仕様とは異なる場合があります。最新の内容は各ツールページをご確認ください。ツールや外部サービスの仕様・料金は変更されることがあるため、利用前には各公式情報も併せてご確認ください。記載に誤りを見つけられた場合はお問い合わせフォームよりご連絡いただけると助かります。

「シャンプーの詰め替え、どこで買うのが一番安いんだろう」

そんな疑問が、このツールの出発点です。

日用品って、なんとなく「楽天でポイント付く日にまとめて買う」という習慣になっていました。でも実際のところ、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」

これを取り違えると、単価が一桁ずれてしまいます。

商品ページごとに表記が違うので、ひとつのルールで全部きれいに拾うのが難しい。いまも少しずつ直している最中です。

ツールを自分で使い続けることで、次の改善点が見えてくる——自分で使い続けながら改善する、私の試行錯誤はまだまだ続きます。


← 他の制作記を見るトップお問い合わせ