なろう・ハーメルン・カクヨムなどの小説サイトで、読んだ作品を自動でマークして、評価とメモを残せるブラウザ拡張機能です。
- 話ページを開くだけで既読として記録されます(何話まで読んだかも残ります)
- 既読の作品を開くと「読んだことがあります」と出ます
- ランキングや検索結果でも、開く前に既読が分かります
- 評価(1〜10 または ★5)・良かった点・悪かった点・メモを作品に紐づけて残せます
- データはこの端末の中だけに保存します。外部への送信は一切ありません
- JSON で書き出し・読み込みができます(バックアップ・別PCへの移動)
同梱の定義は次の3サイトです。
| サイト | 作品ページ | 一覧・ランキング |
|---|---|---|
| 小説家になろう | ncode.syosetu.com |
yomou.syosetu.com |
| ハーメルン | syosetu.org |
同じ |
| カクヨム | kakuyomu.jp |
同じ |
対応サイトは設定画面から自分で追加・修正できます(後述)。
- このリポジトリをダウンロードして展開します
- ブラウザで
chrome://extensions(Vivaldi ならvivaldi://extensions)を開きます - 右上の「デベロッパー モード」をオンにします
- 「パッケージ化されていない拡張機能を読み込む」を押し、展開したフォルダ(
manifest.jsonがある階層)を選びます
- 話を開く → 自動で既読になります(設定でオフにできます)
- 既読の作品ページを開く → 上部(または右下)にバナーが出ます
- バナーの「評価・メモ」 → 状態(読了 / 切った / 積み)、評価、良かった点・悪かった点・メモを書けます
- ツールバーのアイコン → いま開いている作品の状態を確認し、同じパネルを開けます
- 設定画面(アイコン → 「設定・記録の一覧」) → 記録した作品の一覧、書き出し・読み込み、サイト定義の編集
主データは「読んだ話の識別子の集合」です。「第N話まで」は表示のための派生情報で、
- 話IDが連番のサイト(なろう・ハーメルン)→ 「12話まで」
- 話IDが連番でないサイト(カクヨム)→ 作品ページの目次を見た時に順番を覚え、「全33話中 12話目まで」
と出します。話リンクが1つも無い作品ページは短編とみなして既読にします(設定でオフにできます)。
設定画面の「対応サイト」に JSON で書きます。1件はこの形です。
{
"id": "example",
"name": "サンプル小説サイト",
"enabled": true,
"hosts": ["example.com"],
"listHosts": ["ranking.example.com"],
"work": { "pathPattern": "^/novel/(\\d+)/?$", "queryParam": null },
"episode": { "pathPattern": "^/novel/(\\d+)/(\\d+)/?$", "sequential": true },
"idCase": null,
"title": { "selector": "h1", "episodeSelector": null, "suffixes": [" - サンプル"], "pattern": null },
"workUrl": "https://example.com/novel/{id}/"
}| 項目 | 意味 |
|---|---|
hosts |
作品ページ・話ページのあるホスト |
listHosts |
ランキングや検索結果など、リンクにマークを付けたいホスト |
work.pathPattern |
作品ページのパスに当てる正規表現。1番目の括弧が作品ID |
work.queryParam |
作品IDがクエリに出るサイト用(例: ?nid=123 なら "nid") |
episode.pathPattern |
話ページ。1番目が作品ID、2番目が話ID |
episode.sequential |
話IDが連番なら true(「N話まで」の表示に使う) |
idCase |
"lower" にすると作品IDを小文字に揃えます |
title.selector |
題名の要素。話ページ用は episodeSelector |
title.suffixes / pattern |
上で取れない時の保険。document.title から末尾を落とすか、正規表現の1番目の括弧を題名として使います(話ページ用は episodePattern) |
題名は「①セレクタ → ②話ページに必ずある作品ページへのリンクの文字 → ③document.title の整形」の順で拾います。②はサイトの作りに依存しないので、title を空にしてもだいたい動きます。
保存したら、同じ画面の「権限」で、そのホストへのアクセスを許可してください(許可するまでは動きません)。
正規表現は URL 全体ではなくパス(
/…)だけに当たります。ホスト名の一部を作品IDとして拾わないための作りです。
- 保存先は
chrome.storage.local(この端末の中)だけです - サーバー送信・解析・広告の類は一切ありません
- 権限は、対応サイトのページを読むために必要なものだけを求めます(
storageとscriptingのみ)
詳細は PRIVACY.md を見てください。
node --test "test/*.test.mjs" # URL解釈・進捗計算・保存のテスト
node tools/make-icons.mjs # アイコンPNGの生成
node tools/make-promo.mjs # ストア用の販促画像の生成
node tools/build.mjs # ストア提出用の dist/store を作るストアへの提出に必要な文面と手順は docs/store-listing.md にまとめてあります。
dist/store は、成人向けサイトの定義(src/core/defaults.r18.js)と、その権限を外したビルドです。
必要な人は、設定画面から同じ形式のサイト定義を自分で足せます。
MIT License(LICENSE)