
2026/08/25 2:21
コストコのガソリン価格を追跡
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
ライブダッシュボードを構築することで、著者はホルムズ海峡の燃料危機イベント期間中の約155日間にわたり、アメリカ合衆国内の約600カ所のコストコ倉庫におけるガソリン価格を追跡しました。データ収集には 2 つのコストコ API エンドポイント—that is
AjaxGetGasPricesService と AjaxWarehouseBrowseLookupView(latitude、longitude、hasGas=true、およびpopulateWarehouseDetails=true を必要とする)—が使用されました。API が倉庫ごとのコール数を 50 に制限しているため、緯度 25°N–50°N および経度 -125°W から -65°W の範囲におけるグリッドスイープに加え、アラスカとハワイの特定の点を対象として実施したスキャンは、60 秒未満で完了しました。結果は TigerData を通じて TimescaleDB(Postgres の拡張) に保存され、設定上の問題を解消した後、Cloudflare Workers にデプロイされた Next.js アプリケーションを介して提供されました。
分析では、約 600 カ所の倉庫全体で合計 38,101 回の価格変動が記録され、1 日平均 246 回の変動が観測されました。値下げの方が値上げよりも多かったことが示され、具体的には 20,535 件の値下げに対して 17,566 件の値上げがあり、純粋なバランスは追加的な値下げが 2,969 件となりました。歴史的にコストコのガソリンスタンドは周辺の駅より 15~20 セント安価で運営されてきましたが、これらのマージンは固定された割引ではなく、市場のボラティリティと共に変動します。タイムラインには 2026 年 6 月 17 日に署名された米・イラン協定、2026 年 7 月 2 日における同協定の崩壊、および 2026 年 7 月から 8 月にかけてのタンカー攻撃といった主要イベントがマッピングされており、地政学的緊張期間中にコストコがガソリンスタンドを損失リーダーとして活用して競合他社を値下げて牽制した様子が示されています。検索可能なデータベースは現在、消費者が価格低下を待つべきか即時に購入すべきかを判断するのを支援するとともに、エネルギー危機期における燃料価格戦略に関する洞察を提供し、コスト効果の高い技術を利用することで小売業者に役立つ情報を提供しています。著者はまた CRV から Tesla Model Y に乗り換えたため、個人的な移動において倉庫の選択は無関係となりました。
本文
ホルムズ海峡危機下のコストコガソリン価格追跡プロジェクト
掲載された全ての見解および内容は、私が個人として独自のものであり、現在の所属企業もまた以前の所属企業を代表するものではありません。本ウェブサイトは個人的な立場で保守・管理されています。技術的なコンテンツは教育目的のために共有されています。
プロジェクトの背景と動機
- 地理的状況: 昨年 4 月頃、ほぼ正確に2 つのコストコ倉庫の間に住んでいました。
- 課題:
- コストコ公式ウェブサイトでは個々の倉庫ページに情報が埋め込まれているだけで、中央集権的な価格公開がなされていませんでした。
- 住んでいる地域から近い 2 つの倉庫でも、価格が一致していません。
- コストコのガソリン戦略:
- 「失いリーダー(Loss Leader)」としての有名で、通常は周辺のスタンドよりも15〜20 セント安く設定されています。
- この価格差だけで迂回運転も検討されますが、どちらの倉庫を選ぶべきか明確にするには不足でした。
- 動機の変化:
- タンパ市という広大な都市で通勤しており、公共交通機関がないためガス価格の高騰に意識が向き始めました。
- 他のガソリンスタンドと同じペースで値上がりしているのか、コストコの「失いリーダー」戦略が維持されているのか疑問を持ちました。
- 結論: 過去にこうした傾向を把握するための適切な方法が存在しないため、独自のデータ収集システムを構築することにしました。
データ収集の実装(API エンドポイントの発掘)
コストコ側はデータ収集に対して極めて協力的でした。主要なエンドポイントと特徴は以下の通りです。
:AjaxGetGasPricesService- ガス価格を取得します。
- 入力形式は
(アンダースコアを区切り記号として採用)です。ID1_ID2_ID3_ID4
(必要な情報源):AjaxWarehouseBrowseLookupView- 名前の通り、緯度と経度をパラメータにして倉庫を検索します。
を設定することで、以下の詳細情報を取得できます。populateWarehouseDetails=true- 住所・営業時間
- 提供するサービス
- フードコートの有無
- ガス価格(最重要)
利用可能な API リクエスト例
GET /AjaxWarehouseBrowseLookupView?latitude=27.95&longitude=-82.45&hasGas=true&populateWarehouseDetails=true&countryCode=US
- 注意点:
を使用するとレスポンスボディが非常に大きくなります。populateWarehouseDetails- API は 1 回のコールで最大 50 ヵ所の倉庫のみを返すため、全国規模のカバレッジを得るには地図全体をスイープ(走査)する必要があります。
全国的なスイープ処理の実装アプローチ
アメリカ合衆国全土の座標グリッドを設定し、各ポイントからデータを収集して重複を除く方式を採用しました。
- 対象エリア:
- コストコ所在地約600 ヵ所。
- 1 レスポンスあたり 50 ヵ所を返すため、北米大陸全体をカバーするグリッド(ステップ 3)に加え、アラスカ・ハワイ向けに手動で追加ポイントを設定。
- 実装コード(Python / async):
def grid_points(step: int = 3) -> list[tuple[float, float]]: points = [] for lat in range(25, 50, step): for lng in range(-125, -65, step): points.append((float(lat), float(lng))) # アラスカ・ハワイの追加ポイント points.extend([ (61.2, -149.9), # アンカレッジ (64.8, -147.7), # フェアバンクス (21.3, -157.8), # ホノルル (20.9, -156.5), # カフルイ ]) return points async def fetch_all_costcos() -> list[CostcoStation]: points = grid_points() seen: dict[int, CostcoStation] = {} semaphore = asyncio.Semaphore(CONCURRENCY) async with httpx.AsyncClient(headers=HEADERS, timeout=30) as client: tasks = [fetch_point(client, lat, lng, semaphore, ts) for lat, lng in points] results = await asyncio.gather(*tasks) # 重複 ID を除外してユニークな倉庫のみを保持 for result in results: for station in result: seen.setdefault(station.id, station) return list(seen.values()) - 処理効率:
- リクエスト数の制限と再試行ロジックを組み込むことでサーバー負荷を管理。
- 全体のスイープ作業は60 秒以下で完了し、1 回の実行ですべての現在の価格・住所・座標を取得可能。
データ保存と可視化(時系列データベース)
プロジェクトの本質的な目的は、時間の経過とともに価格変動を観察することにあるため、時系列データ管理が不可欠でした。
保存先:TimescaleDB
- 選定理由: PostgreSQL の拡張であり、既存のクエリ言語・ツールを活用しつつ時系列機能を追加可能。
- メリット:
- 無料。
- 設定が迅速(TigerData 社によるサポート)。
- 同じ約 600 ヵ所の倉庫を繰り返しサンプリングし、過去データとの比較が可能。
可視化:Next.js アプリケーション
- 技術スタック:
- Next.js アプリケーション。
- Tailwind CSS を使用したスタイリング(Excel シート風にはしない)。
- Cloudflare Workers でデプロイメントを動作。
- 機能:
- 検索可能なリアルタイムデータベースの提供。
- 各倉庫に個別ページを設定し、SEO 対策として検索エンジンによるインデックス化を許可。
- 「どの倉庫に行くべきか」と悩むユーザーが API を逆エンジニアリングする手間をかけずに照会できるようにした。
ホルムズ海峡危機への影響分析
プロジェクトを開始したタイミングは、ホルムズ海峡の緊張が石油市場を不安定にした直後でした。タンパ市から近い港湾であり、閉鎖の脅威だけでガス価格を急騰させる可能性があります。
データ集約の結果(155 日間の追跡)
- 総変更数: 38,101 件の個別価格変更が発生。
- 平均:1 日あたり 246 件の変更。
- 増減バランス:
- 値下げ:20,535 件
- 値上げ:17,566 件
- 結果:値下げの方が約 2,969 件多かった。
| 出来事 | 日付 |
|---|---|
| 米国─イラン合意署名 | 2026 年 6 月 17 日 |
| 合意崩壊 | 2026 年 7 月 2 日 |
| タンカーへの攻撃再開 | 2026 年 7 月 23 日 |
| ハマス系グループがタンカーを攻撃 | 2026 年 8 月 13 日 |
考察と行動の変化
- 市場原理の確認:
- 立派なコストコでもホルムズ海峡の影響からは免れられず、ガスを切り捨て問題として捉えても市場の流れに追従する必要があることが示されました。
- 私の個人的な対応(エビデンスに基づいた意思決定):
- ガスタンクから数セントを削るためのシステムを月単位で最適化。
- CR-V をテスラ モデル Y に乗り換える。
- テスラに切り替えた結果、2 つの倉庫間の15 セントの価格差を追いかけても得られる金額より多い車料金を毎月支払うことになりました。
結論
- 「どのコストコに行けばよいか」という質問に対し、ついに必要なインフラストラクチャを手に入れることで、個人として永遠にこの疑問を不要なものにしました。
- (参考:フロリダ州で最も良いナンバープレートの組み合わせに関する詳細は別記事をご覧ください。)
謝辞
このプロジェクトに携わった方やコミュニティへの感謝の意を申し上げます。
- 校閲協力: Kai, Neesh, Ari, Landon, Mark, Jaden
- サポート: Creamcheese Babgel の皆様