近年、スマホの高価格化が進み、毎年の進化もカメラのアップデート程度に留まることが多くなった。その結果、中古スマホという選択肢が急速に市民権を得てきた。
しかし、いざ買おうとすると、様々なショップのサイトを開いて価格や状態ランクを見比べるのが面倒すぎると感じたことはないだろうか。実は私自身、普段から中古スマホショップの現場でスタッフとして働いている身でありながら、いざネットで最安値を探すとなると、その手間に辟易していた。
そんな面倒な作業をスマートに終わらせるため、日本全国の大手中古スマホショップの在庫を一括で比較・検索できるWebサービス「中古スマホ一括検索 (powered by Gadelog)」を開発・リリースした。
本記事では、このサービスの魅力と、裏側で動いている少しマニアックな技術スタックについて詳細に解説する。
「中古スマホ一括検索」の特長
単に検索できるだけでなく、スマホ探しにおいて「本当に欲しい機能」を詰め込んでいる。
大手5ショップの在庫を横断一括検索
イオシス、ゲオモバイル、にこスマ、ダイワンテレコム、エムモバの在庫データを網羅している。もうブラウザのタブを大量に開く必要はない。欲しいモデルの最安値が一瞬で見つかる仕様だ。
ガジェット好きも納得の絞り込み&ソート
価格帯やストレージ容量はもちろん、「状態ランク」や「バッテリー最大容量」での詳細な絞り込みに対応している。 さらに、単純な価格順だけでなく「バッテリー最大容量順」での並び替えも可能だ。中古スマホ選びで最も懸念されるバッテリーガチャの失敗を防ぐことができる。
ストレスフリーな爆速UI
Next.jsの最新機能と無限スクロールを組み合わせることで、サクサクと商品を見て回れるネイティブアプリのような操作感を実現した。スマホ、タブレット、PCどの端末から見ても美しく表示される。
裏側の技術スタック大公開
ここからは開発者向け技術解説コーナーである。今回はモダンなNext.jsによるフルスタックWebアプリと、泥臭いPythonスクレイピング、そしてそれらを完全自動で運用するサーバーレスインフラを組み合わせたアーキテクチャを採用している。
Webアプリケーション:Next.jsによるモダンなUIとAPI
- フレームワーク: Next.js 16 (App Router)
- UI / スタイリング: React 19, Tailwind CSS 4, Lucide React
- API / ORM: Next.js Route Handlers (
app/api/) / Prisma
UI側は「いかにユーザーに待ち時間を感じさせないか」にこだわり、InfiniteDeviceListコンポーネントでIntersection Observer APIを用いた段階的読み込み(無限スクロール)を実装した。 バックエンド(API)とフロントエンドを分離せずNext.jsに統合し、内部のAPIルート(/api/devices)でUIからの複雑なマルチ条件フィルタリングを受け取り、Prismaを介して動的にクエリを組み立てる堅牢な設計としている。
データ収集:泥臭く強力なスクレイピングと正規化
- 言語: Python 3
- 主要ライブラリ: BeautifulSoup4, curl_cffi, psycopg2
実は最も苦労したのがこのデータ収集部分である。ショップごとにDOM構造やセキュリティ対策(WAFなど)が全く異なるため、通常のrequestsライブラリでは弾かれてしまうサイトに対しては、TLSフィンガープリントを偽装できるcurl_cffiを活用して突破している。
また、各ショップでバラバラな「状態ランク(S, A, Bなど)」「キャリア情報」「ネットワーク利用制限◯/△」といった表記ゆれは、このスクレイピングの段階で独自ロジックを用いてクレンジングし、正規化しDBに格納している。
インフラストラクチャ:完全サーバーレスな自動化運用基盤
- ホスティング: Vercel
- データベース: Neon
- バッチ処理(CI/CD): GitHub Actions
個人開発において「運用に手間とコストをかけないこと」は最重要テーマであるため、インフラは完全にサーバーレスなモダン構成で統一した。
ユーザーがアクセスするフロントエンドとAPIは Vercel へデプロイし、シームレスで高速なエッジ配信を実現している。データベースにはサーバーレスPostgreSQLのDBaaSである Neon を採用し、Vercelとの抜群の相性により高速なレスポンスタイムを維持している。
そして、前述のPythonスクレイパーは GitHub Actions のスケジュール機能(Cron)を用いて定期実行させている。自動で最新の在庫データを取得し、psycopg2を使ってNeon上のDBへ高速にバルクインサートを行うことで、「完全に放置していても最新の最安値が更新され続ける」というメンテナンスフリーなシステムを作り上げた。
最後に
「自分が欲しいツールを作る」というモチベーションで開発した中古スマホ一括検索だが、ガジェットを探している読者にとっても間違いなく便利なツールに仕上がったと自負している。
ぜひ、次にスマホを買い替える際の相棒として使ってみてほしい。
(「こんな機能が欲しい」「ここでバグった」などのフィードバックがあれば、Xやコメント欄で教えてもらえると幸いだ。)


コメント