Tools
← Worksタイトラボ — なろうランキングを解剖する実験場
なろう小説APIから取得したランキング作品を語単位で分解し、書き手のための観察ツールとして公開しています。
何ができるか
- 流行りの語をクラウド表示
- タイトル類似度チェック(自分の案と既存作の重なり可視化)
- タイトル文字数 × 順位の散布図
- 語の共起ネットワーク
- ジャンル別の特徴サマリ
- 週次の自動データ更新
制作背景
執筆中に「このタイトル、既存作と被っていないか」「いま流行っている語は何か」を確かめたくなる場面が何度もありました。既存のランキングサイトは作品単位で並ぶため、語の傾向を俯瞰する手段がない。それなら自分で作ろうと思ったのが出発点です。
書き手のための観察ツールであり、マーケティング最適化を目的としたものではありません。作品の価値はランキング傾向ではなく、その作品自体にある — この姿勢はサイト内にも明記しています。
技術構成
| 領域 | 採用技術 |
|---|---|
| フロントエンド | Next.js 14, TypeScript, Tailwind CSS |
| 可視化 | Recharts, react-force-graph-2d |
| 自然言語処理 | kuromoji(形態素解析) |
| データストア | Upstash Redis(Vercel KV) |
| 自動化 | GitHub Actions(週次cron) |
| ホスティング | Vercel |
| 開発環境 | Cursor + Claude |
開発プロセス
設計から実装まで、Cursor 上で Claude と対話しながら進めました。仕様書を起点にプロンプトを分割し、1 機能ずつ動作確認を挟みながら段階的に積み上げる形式です。
開発中に直面した課題と対処
- 共起カウントの重複バグ:複数ランキングソース間で同一作品が重複加算されていた問題を、ncode 単位の作品ユニーク化で解決
- kuromoji 辞書の CI 環境問題:GitHub Actions で辞書パスが解決できない事象を、process.env.CI 分岐と dotenv の override 制御で解消
- force-graph 描画の崩れ:ライブラリ内部の ctx.restore() 実装と衝突していた問題に、ダミー save() を積む回避策で対処
設計判断のうち、特に意識した点
- なろう API 規約の遵守(本文非取得、キャッシュ最長 2 週間、商用利用範囲内)
- 商標ガイドラインへの配慮(混同防止注記、登録商標明示)
- ユーザーが入力したタイトル案は保存しない(プライバシー)
- 集計の単位をすべて「作品」に揃える(重複カウント防止)
現在の規模
- 解析対象:約 500 作品(週次自動更新)
- 集計対象期間:日間 / 週間 / 月間
- 対象ジャンル:5 ジャンル(総合、異世界恋愛、現実恋愛、ハイファンタジー、ローファンタジー)
利用シーン
- タイトル案の被りチェック
- ランキング上位の語傾向の把握
- ジャンル別の特徴比較
- 文字数バランスの確認
書き手コミュニティで継続的にフィードバックを受けながら、要望を反映する形で機能を追加しています。
サイトを見る
本番環境の タイトラボ へ進みます(別タブで開きます)。
タイトラボを開く →