このサイトは現在開発中です

中古スマホ一括検索 (powered by Gadelog)

中古スマホ一括検索 (powered by Gadelog)

概要

日本全国の大手中古スマホショップ(イオシス、ゲオモバイル、にこスマ、ダイワンテレコム、エムモバ)の在庫データを網羅し、一括で比較・検索できるWebサービスです。 単なる価格比較にとどまらず、中古スマホ選びで最重要となる「状態ランク」や「バッテリー最大容量」での詳細な絞り込み・並び替え機能を備え、ユーザーに最適な端末を最短距離で提案します。

開発の背景と課題

近年のスマートフォンの高価格化に伴い、中古デバイスの需要が急速に高まっています。しかし、実際に購入を検討する際、ユーザーは複数の販売サイトを往復し、ショップごとに異なる「状態ランクの基準」や「表記方法」を見比べながら最安値を探さなければならないという大きな課題がありました。

ガジェット系メディアを運営する中でこの課題を強く認識し、「ユーザーの『めんどくさい』を技術で解決し、安心して中古スマホを選べるプラットフォームを作りたい」という思いから本プロジェクトを立ち上げました。

技術スタックとアーキテクチャ

保守性とパフォーマンスを両立するため、フロントエンドからインフラまで完全サーバーレスなモダンアーキテクチャを採用しています。

  • フロントエンド / API: Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS 4
  • データベース / ORM: PostgreSQL (Neon), Prisma
  • データ収集: Python (BeautifulSoup4, curl_cffi, psycopg2)
  • インフラ / CI/CD: Vercel, GitHub Actions

Vercel上でNext.jsアプリケーションをホスティングし、データベースにはサーバーレスDBaaSであるNeonを採用。データ収集のバッチ処理はGitHub ActionsのCronスケジュールで完全自動化しています。

技術的な工夫

強固なスクレイピング基盤とデータ正規化 各ショップでDOM構造やセキュリティ(WAF等)が異なるため、単純なリクエストではアクセスが弾かれる問題がありました。これに対し、TLSフィンガープリントを偽装できる curl_cffi を活用して安定したデータ取得を実現しています。 また、各社でバラバラな「状態ランク(S/A/B等)」や「ネットワーク利用制限(◯/△等)」の表記ゆれを、フロントエンドに渡す前のスクレイピング段階で独自ロジックを用いて正規化し、クレンジングされたデータをNeon上のPostgreSQLへ高速にバルクインサート(psycopg2)しています。

待ち時間を感じさせない爆速UIと複雑なクエリ処理 UI側では、Intersection Observer APIを用いた段階的読み込み(無限スクロール)を実装し、ネイティブアプリのようなサクサクとした操作感を実現しました。 バックエンドでは、フロントエンドからの「価格・容量・バッテリー状態」などの複雑なマルチ条件フィルタリングをNext.jsのRoute Handlersで受け取り、Prismaを介して動的かつ効率的なクエリを組み立てる堅牢な設計としています。

提供価値・ユーザー体験

ガジェット好きのインサイトを突いた「バッテリー最大容量順」でのソート機能や、「iOSのサポート状況(最新OS対応モデル)」を意識したUI設計により、中古スマホ特有の「ハズレを引くリスク」を視覚的に軽減しました。 また、ファーストビューにおける提携ショップロゴの配置や、メディア名の冠(powered by Gadelog)により、ユーザーに強い信頼感を与え、アフィリエイトのコンバージョン率を最大化する導線を構築しています。

成果・運用状況・今後の展望

バッチ処理からデータベース、フロントエンドの配信までを完全に自動化・サーバーレス化したことで、「完全に放置していても最新の最安値が更新され続ける」というメンテナンスフリーな運用基盤を確立しました。 今後は、ユーザーが指定した条件(特定のモデル・価格以下など)を満たした際にお知らせする「値下げアラート機能」の実装や、Android端末への対応モデル拡大を視野に開発を継続していきます。