調達の仕事で、こんな作業をしていませんか。
購買サイトをいくつも開いて、
同じ部品の価格を探して、
Excelにコピーして、
入数が違うから1個あたりの単価を計算し直して……。
しかも、価格は毎週のように変わります。
「この相見積もり表、自動で作れないだろうか」
今回は、これを Claude Code と Bright Data のCLI でやってみました。
▶ Bright Data の無料トライアルに登録して、Webデータ収集を試す
対象にしたのは、製造業の現場で実際に買われている、ちょっとニッチな3品目です。
結論から言うと、価格比較表も、毎週取り直すスクリプトも、AIが作ってくれました。
ただし、そのスクリプトを実際に動かしてみると、
エラーは1つも出ていないのに、間違った価格が入っている
という問題が見つかりました。
今回は、そこも含めて書いていきます。
今回調べた3品目
| 品目 | どんな場面で使うか |
|---|---|
| PEEK樹脂 丸棒(φ20mm × 長さ300mm前後) | 半導体装置や医療機器の部品を削り出す素材 |
| フッ素ゴム(FKM)Oリング P-20 | 設備の保全、薬品や油が流れるラインのシール |
| 超硬スクエアエンドミル 2枚刃 φ1mm | 精密部品の切削に使う、消耗品の刃物 |
どれも、一般の人はまず買わないけれど、工場では毎月のように買っているものです。
あわせて、超硬工具の主な原料である タングステンの価格(市況) も調べてもらいました。
この記事でやること
購買サイトを探す
↓
robots.txt と利用規約を確認して、対象にしていいサイトを決める
↓
価格・入数・出荷目安を集めて、比較表を作る
↓
市況(タングステン)も調べて、価格交渉の材料をまとめる
↓
毎週同じ比較ができるスクリプトを作る
↓
実際に動かして、本当に正しいか確かめる
最後の「本当に正しいか確かめる」で、問題が見つかりました。
! 始める前に:データ取得のコンプライアンスメモ
- 扱うのは、ログインせずに見られる公開価格だけです。会員価格・見積価格は扱いません。
- Bright Dataの利用ポリシー(Acceptable Use Policy)でも、ログインが必要なページの情報を集めることは禁止されています(利用ポリシーを読む)。
- 取得する前に、各サイトの robots.txt と利用規約を確認します(STEP 2 でルールにしています)。規約を確認できなかったサイトは、毎週の取得対象から外します。
- 同じサイトへのアクセスは、10秒以上の間隔をあけます。
- 集めた価格は、社内の比較資料として使うことを前提にしています。サイトによっては、取得した情報の複製・転載を禁止しています。
- 通販サイトの価格は頻繁に変わります。記事中の価格は、2026年10月12日時点のものです。
STEP 1. Bright Data CLI を準備する
ポイント:準備は npm install -g @brightdata/cli と bdata login の2行です。「Network request failed」と出たら、bdata zones で確認したゾーン名を --zone で指定すると動きます。
今回は、Bright Data の CLI(コマンドで動かすツール)を使います。
Claude Code が自分で bdata コマンドを実行して、検索やページ取得をします。
npm install -g @brightdata/cli
bdata login
! つまずきポイント
一つ注意点があります。
自分の環境では、CLI が最初から使おうとする「ゾーン」がアカウントに存在せず、
Network request failed という、ネット接続の問題に見えるエラーが出ました。
bdata zones でアカウントにあるゾーンの名前を確認し、
--zone でその名前を指定すると動きます。

bdata zones で、アカウントにあるゾーンを確認したところ
▶ まだアカウントがない方は、ここから登録できます:Bright Data の無料トライアルに登録する
STEP 2. 「規約を確認してから取る」をルールにする
ポイント:CLAUDE.md に「取得する前に robots.txt と利用規約を確認し、自動取得を禁止しているサイトは外す」「すべての数値に取得元URLと取得日を付ける」「型番が一致しない品は類似品と明記する」などのルールを書きました。
価格を集めるときに一番気をつけたいのは、
そのサイトが自動での取得を認めているかどうか です。
そこで、CLAUDE.md にこう書きました。
# 調達・価格調査プロジェクト
あなたは製造業の調達担当を支援するアシスタントです。
## Web調査のルール
- Web上の情報は Bright Data CLI(bdata コマンド)で取得してください。
- 取得する前に、そのサイトの robots.txt と利用規約を確認してください。
自動取得を禁止しているサイト・パスは対象から外し、外した理由を記録してください。
- 公開ページ(ログイン不要の価格)のみ。会員価格・見積価格は扱わない。
- 同じサイトへの連続アクセスは控えめに(1サイトあたり必要最小限のページ数)。
## 記録のルール
- 価格は「税抜/税込」「1個あたり/1パックあたり」をページ表記どおりに記録する。
- すべての数値に取得元URLと取得日を付ける。
- 型番・仕様が完全一致しない品は「類似品」と明記する(勝手に同等扱いしない)。
最後の 「類似品と明記する」 も大事です。
AIは、少し仕様が違うものでも「同じようなもの」として並べてしまうことがあるからです。
指示(prompts.md)には、3品目と、やってほしいことを書きました。
## やること
1. 各品目について、国内の工業用品・部品の購買サイトを3サイト以上探す
2. 各サイトの robots.txt・利用規約を確認し、対象にできるかを判断する
3. 対象にできたサイトから、価格・入数・1個あたり単価・出荷目安・メーカー/型番を取得
4. 毎週同じ比較ができるように、URL一覧を読み込んで価格を取り直すスクリプトを作る
5. 価格比較レポートを作る(市況の動きと、価格交渉で使える材料を含む)
STEP 3. Claude Code に任せる
ポイント:Claude Code は約14分で、検索21回・ページ取得57回(robots.txt・規約ページを含む)を行いました。Googleでキャプチャが出たときは、自分でBingに切り替えて続けました。
入力したのは、これだけです。
prompts.md の指示に従って作業してください。

Claude Code が検索・規約確認・価格取得を進める様子(実行ログより)
途中で、Google の検索がうまくいかない場面がありました。
Error: waiting for selector "#main" failed: timeout 30000ms exceeded
Error: google_captcha detected
すると Claude Code は、自分で検索エンジンを Bing に切り替えて 続けていました。
(bdata search は --engine bing で検索エンジンを変えられます)
人が見ていなくても、詰まったら別の方法を試します(今回は Google でエラーが2種類出たあと、Bing に切り替えて検索を続けました)。
▶ --engine(検索エンジンの切り替え)や --zone など、bdata コマンドのオプションは公式ドキュメントで確認できます:Bright Data CLI の公式ドキュメントを見る
| 項目 | 結果 |
|---|---|
| かかった時間 | 約14分 |
| 検索した回数 | 21回 |
| 取得したページ | 57回(robots.txt・規約ページを含む) |
STEP 4. 規約チェックの結果
ポイント:規約の本文が自動取得で読めないサイトは「保留」にして毎週の取得対象から外し、価格が画面上でしか表示されない大手購買サイト2つは対象外になりました。
まず、AIが作ったサイトの判定一覧です。

robots.txt と利用規約のチェック結果(data/site_check.md)
ここで、いくつか大事なことが分かりました。
1. 規約が読めないサイトは「保留」にしていた
あるサイトの利用規約には「禁止行為」の条文がありました。
ところが、その本文はページを開いたあとにプログラムで表示される作りで、自動取得では中身を読めませんでした。
AIは、ここを「たぶん大丈夫」で済ませませんでした。
「目で確認するまで、毎週の取得対象から外す」 と判断していました。
2. 価格が取れないサイトもあった
大手の購買サイトのうち2つは、価格が画面上でしか表示されない作りでした。
ページを取得しても、価格の部分が空っぽです。
そのため、今回は対象外になりました。
3. AIが「確認していない」と自白した部分もあった
ある大手通販サイトについて、AIは
「規約で自動収集が禁止されているため対象外にした」
と書いていました。
ただし、よく読むと
「規約ページの本文は今回取得していない。一般に知られている条項に基づく判断」
とも書いてありました。
結論として外したのは慎重な判断です。
とはいえ、根拠は確認していない、ということです。
こういう一文を見落とさないことが大事だと感じました。
STEP 5. 価格比較の結果
3品目とも、3サイト以上で価格を集めることができました。
たとえば、エンドミルの比較表はこうなりました。
ここで目を引いたのは、
まったく同じ型番の三菱マテリアル製エンドミルが、サイトによって約20%違う
という点です。
| サイト | 価格(税抜・1本) |
|---|---|
| たのめーる | 1,820円 |
| MonotaRO | 1,998円 |
| オレンジブック.Com | 2,186円(オレンジブック価格) |
さらにAIは、メーカー希望小売価格の表示がサイトによって違う ことにも気づいていました。
同じ型番なのに、2,690円と表示しているサイトと、1,820円(税抜)と表示しているサイトがありました。
「定価改定の前後で表示が混在している可能性がある。販売店に確認が必要」
というのがAIの見立てです。
これは、そのまま価格交渉の質問に使えます。
市況:タングステンは、国際価格と中国国内価格で動きが逆だった
タングステンの価格も、公開されている情報から時系列でまとめてくれました。
・国際価格(EU):2025年前半の約340ドルから、2026年9月には約2,900ドルへ
・中国国内価格:2026年3月がピーク。7月から10月にかけて約25%下落
さらに、こんな試算もしていました。
φ1エンドミル1本に含まれるタングステンは約6g
→ 原料分の値上がりは、1本あたり300円弱
「原料が上がったので値上げします」と言われたとき、
値上げ幅が原料分の上昇を大きく超えていないか を確かめる材料になります。
! 注意
試算には、AI自身が「仮定」として置いた数字が入っています。為替レートなどの前提は、使う前に必ず確認してください
価格交渉で使える材料
レポートの最後には、交渉で使える材料が事実ベースでまとまっていました。
STEP 6. 毎週取り直すスクリプトを、実際に動かしてみた
ポイント:AIが作った価格取得スクリプトを実行すると、9件中8件が [ok] でした。ところがそのうちPEEK丸棒は、別の商品の価格(税抜4,398円。正しくは9,398円)を拾っていました。
ここからが本番です。
AIは、毎週同じ比較をするためのスクリプト(tools/refresh_prices.py)も作ってくれていました。
ただし、レポートの最後にこう書いてありました。
「このスクリプトは、一度も実行していません」
実行に承認が必要な設定だったため、作るだけで終わっていたのです。
そこで、自分で実行してみました。
9件中8件が [ok]。
1件だけ parse_failed(価格を読み取れなかった)でした。
「8件取れたなら、まあまあかな」
そう思って CSV を開いたら、おかしな行がありました。
PEEK丸棒 税抜 4,398円 税込 10,338円 status: ok
税抜が4,398円なのに、税込が10,338円。
計算がまったく合いません。
正しい税抜価格は9,398円です。
にもかかわらず、status は ok になっています。
! つまずきポイント
エラーは出ていない。処理も成功している。でも、数字が間違っている。
これが一番怖いパターンです。
このまま毎週回していたら、間違った数字で相見積もり表を作り、間違った数字で交渉していたかもしれません。
STEP 7. Claude Code に直してもらう
おかしかった点を、そのまま Claude Code に伝えました。
AIが見つけた原因はこうでした。
| 不具合 | 原因 |
|---|---|
| PEEK丸棒が 4,398円 | ページの下の方にある「新着商品」欄の、別の商品(アクリル板)の価格 を拾っていた |
| エンドミルが parse_failed | 価格の横に「値下げ」という表示が増えて、読み取りのパターンに合わなくなっていた |
1つ目は、サイトの見た目が少し変わるだけで、別の商品の価格を拾ってしまう という問題です。
2つ目は、セールなどで表示が変わると、すぐ読み取れなくなるという問題です。
あわせて、同じ間違いに気づけるように、チェックを1つ追加してもらいました。
税抜 × 1.1 と 税込 が合わない行は、status を check_needed にする
ここでも1つ、やらかしがあった
修正のあと、AIは確認のために、ひとつのサイトだけを対象にしてスクリプトを再実行しました。
すると、その日のCSVファイルが、そのサイトの5行だけで上書きされ、ほかのサイトの4行が消えてしまいました。
AIはこれに自分で気づき、消えた4行を戻しました。
さらに、「一部のサイトだけで実行しても、ほかの行は消さない」作りに直していました。
直すこと自体はうまくいきました。
でも、その途中でデータを消していたのです。
直したあとも、ファイルの中身まで確認する 必要があると改めて感じました。
STEP 8. もう一度実行して、本当に直ったか確かめる
修正後のスクリプトを、全サイト分もう一度実行しました。
| 品目 | 修正前 | 修正後 |
|---|---|---|
| PEEK丸棒(MonotaRO) | 税抜 4,398円(間違い) | 税抜 9,398円 |
| 三菱 MS2MSD0100(MonotaRO) | parse_failed | 税抜 1,998円 |
9件すべてが正しい値になりました。
追加したチェックも、前回の間違った組み合わせ(4,398円 / 10,338円)を、ちゃんと「おかしい」と判定することを確かめました。
ここまで確認して、ようやく
「毎週使える」
と言えます。
まとめ
良かったこと
・3品目 × 複数サイトの相見積もり表を、約14分で作れた
・robots.txt と利用規約を確認し、読めない規約は「保留」にする慎重さがあった
・同一型番で約20%の価格差、定価表示の食い違いなど、交渉材料を見つけてくれた
注意すること
・AIが作ったスクリプトは、「一度も動かしていない」ことがある
・エラーが出なくても、間違った数字が入ることがある(今回は別商品の価格)
・修正の途中で、データを消してしまうこともある
・「税抜×1.1=税込」のような、数字の整合性チェックを入れておく
AIに任せると、相見積もり表づくりは本当に速くなります。
ただ、本当に大事なのは
「動いたか」ではなく「正しい数字が入っているか」
を確かめることです。
今回は、税込と税抜の計算が合わなかったおかげで、間違いに気づけました。
もし税込価格を表示しないサイトだったら、気づけなかったかもしれません。
自動化するときほど、
「この数字、本当に合ってる?」
と疑うための仕組みを、一緒に作っておくのがおすすめです。
▶ 毎週取り直すと費用はいくらになるか、Bright Data の公式サイトで料金プランを確認できます:Bright Data の料金プランを確認する(公式サイト)
よくある質問(FAQ)
Q. 相見積もり表は、どれくらいの時間で作れましたか?
A. 3品目×複数サイトの価格比較表を、約14分で作れました。その間に、検索21回・ページ取得57回(robots.txt・規約ページを含む)を行っています。
Q. どのサイトからでも価格を取得してよいですか?
A. いいえ。取得する前に、各サイトの robots.txt と利用規約を確認し、自動取得を禁止しているサイトや、規約を確認できなかったサイトは対象から外しました。Bright Dataの利用ポリシーでも、ログインが必要なページの情報を集めることは禁止されています。
Q. 同じ型番でも、サイトによって価格は違いますか?
A. 違いました。三菱マテリアルの同じ型番のエンドミル(φ1)で、たのめーる1,820円、MonotaRO 1,998円、オレンジブック.Com 2,186円(いずれも税抜・1本、2026年10月12日時点)と、約20%の差がありました。
Q. エラーが出なければ、取得した価格は正しいですか?
A. 正しいとは限りません。今回はエラーが出ないまま、別の商品の価格(税抜4,398円)が入っていました。「税抜×1.1=税込」のような数字の整合性チェックを入れておくと気づけます。
Q. Googleの検索がうまくいかないときは?
A. 今回はキャプチャが出てタイムアウトしましたが、Claude Code が bdata search の --engine bing で検索エンジンを切り替えて続けました。
参考リンク
- Bright Data CLI(公式ドキュメント)
- 各購買サイトの利用規約・robots.txt




