0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude CodeでQiita記事で言及されている書籍のランキングサイトを作ってみた

0
Last updated at Posted at 2026-03-02

@jabba さんの有名サイト
技術書ランキングをQiita記事から集計 テック・ブック・ランク
および
@YA001 さんの類似サイト
Engineer's Book Hub
とその記事を読み,自分でも類似サイトを作ってみたいと思いました.
この二つのサイトのランキングは同じQiita記事から作成したものにも関わらず,ランキングが大きく異なります.
集計の仕方によってランキングがどのように変化するのかを見るのは面白そうですし,サイトとしても別の基準で作られたランキングは新しい視点が得られるものになると思います.

開発途中な機能もありますが,興味がある方はぜひこのサイトを訪れてみてください.

このサイトの特徴

ランキングの基本的な要素に加えて,以下の独自機能を実装しています.

1. 順位変動インジケーター(↑↓・NEW)

毎週バッチ処理でランキングを更新する際,前回のランキングと比較して各書籍の順位変動を記録します.ランク番号の下に ↑5↓3NEW のように表示されます.

2. 一緒に紹介されることが多い本(共起分析)

詳細パネルに「一緒に紹介されることが多い本」セクションを設けました。同じ Qiita 記事の中で一緒に紹介されている書籍を共起回数順に最大5冊表示します。

学習ロードマップ的な使い方ができます。「この本を読んでいる人は次にこの本を読む」というパターンが自然に浮かび上がってきます。

3. 4つの期間でフィルタリング

期間 用途
3か月 最近話題になっている本
1年 今年のトレンド
3年 中期的に支持されている本
全期間 定番・ロングセラー

仕組み

データパイプライン

  1. 書籍リンクを含む記事を全件取得(Qiita API)
  2. 記事本文から ISBN-13 を抽出
  3. amazon.co.jp /dp/{ASIN}
  4. oreilly.co.jp /books/{ISBN}
  5. gihyo.jp /book/{year}/{ISBN}
  6. amzn.to 短縮URL(並列解決)
  7. OpenBD + Google Books で書籍メタデータ取得
  8. スコア計算
  9. Cloudflare KV に保存

Cloudflare Workers + OpenNext の構成

Next.js のホスティングには OpenNext を使って Cloudflare Workers にデプロイしています.ランキングデータは Cloudflare KV に JSON で保存しており,API ルートから読み出して返します.

// src/app/api/trending/route.ts
const kv = getCloudflareContext().env.RANKING_KV;
const json = await kv.get(`ranking:${period}`);

問題点

  • 本の表紙画像が表示されないものがたくさんあること(おそらくopenBDから取得した画像urlが無効)
  • 順位変動インジケーターがどの期間のランキングでも毎週のバッチ処理で変化した分を表示していること(例えば3か月のランキングなら前の3か月のランキングとの差分にすべき)
  • 順位変動インジケーターが表示されなときがあるというバグがある
  • 明らかに拾えていない記事・書籍がある

技術スタック

役割 技術
フロントエンド Next.js 16 (App Router) + Tailwind CSS v4
ホスティング Cloudflare Workers (OpenNext)
データストア Cloudflare KV
書籍データ OpenBD API + Google Books API
記事データ Qiita API
バッチ処理 GitHub Actions

プロジェクト構成

src/
  app/
    api/
      trending/route.ts   # KV からランキングデータを返す API
      mock/route.ts       # 開発用ダミーデータ API
    layout.tsx
    page.tsx
  components/
    BookRanking.tsx       # ランキング表示コンポーネント
  lib/
    qiita.ts              # Qiita API クライアント
    openbd.ts             # OpenBD + Google Books による書籍メタデータ取得
    googleBooks.ts        # Google Books API クライアント
    bookUrls.ts           # 記事本文から ISBN を抽出するユーティリティ
    amazon.ts             # Amazon URL 生成
    ranking.ts            # スコア計算・ランキング生成・共起分析ロジック
scripts/
  build-ranking.ts        # ランキングデータ生成・KV 書き込みスクリプト
.github/
  workflows/
    update-ranking.yml    # 自動更新ワークフロー

Claude Code

このサイトのコードはほぼ全てClaude Codeに書いてもらいました.
ただ,自分でもわからないものが動いているのは怖いので,これから理解して上記の問題点を自分で修正できるくらいにはなりたいですね.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?