FluxNovelsは、日本の小説を最も贅沢に楽しむための、縦書き専用プレミアム・リーダーです。
日本語が最も美しく映える「縦書き」に特化。独自のレンダリングエンジンにより、ウェブ小説を洗練された一冊の本へと昇華させます。
ページをめくる裏側まで再現する「ダブルサイド演出」。デジタルでありながら、本物の紙を手繰るような高揚感を届けます。
SwiftDataとCloudKitにより、あなたのライブラリと読書位置はすべてのAppleデバイス間で完璧に同期されます。
リーダー画面で指を「上」へ動かすと、目次(Table of Contents)パネルが下部から優雅にスライドイン表示されます。別エピソードへの瞬時切り替えのほか、目次上部から「フォント・テーマ設定」を起動できます。
目次パネルを表示リーダー画面で指を「下」へ動かすと、読書をスマートに終了し、本棚(ライブラリ)や作品詳細画面へ瞬時に戻ることができます。スムーズに前画面に復帰可能です。
リーダーを閉じる日本語の美しい縦書き(RTL:右から左へめくる)仕様に完璧に合わせ、画面を【左へスワイプ】すると次のページへ進み、【右へスワイプ】すると前のページに戻ります。本物の紙をめくるような極上の操作感です。
左:送り / 右:戻し本アプリは、星空文庫などの一部の例外を除き、デフォルトでは公式Webサイトをそのまま表示する「ブラウザ読書モード」を提供しています。小説を縦書きリーダーで読むためには、ユーザー様ご自身の責任において「拡張プロファイル」を作成または適用していただく必要があります。プロファイルを作成・適用する際は、対象サイトの利用規約を必ず確認し、コンテンツの改変や外部ビューアーでの閲覧が禁止されている環境において、規約に抵触するような設定の作成や適用は行わないでください。
iOSの「設定」> [ユーザー名] > iCloud で、iCloud DriveおよびFluxNovelsがオンになっていることをご確認ください。
一度読み込んだエピソードは端末にキャッシュされるため、オフラインでもお読みいただけます。さらに便利にお使いいただける一括ダウンロード機能等については、今後のアップデートで拡張を予定しています。
FluxNovelsは、星空文庫などの一部の例外を除き、デフォルトでは公式Webビューによる「ブラウザ読書モード」を提供しています。ただし、独自の「拡張プロファイル」を作成することで、ユーザー様ご自身の判断と責任において、Web上の小説を美しい縦書きで読み込むことが可能になります。
| 項目 | 説明 |
|---|---|
workIdPattern | URLから作品IDを抽出する正規表現。 |
episodeNumberPattern | URLから話数を抽出する正規表現。 |
| 項目 | 説明 |
|---|---|
tocEpisodeRowSelector | 目次の一行分(リスト要素など)を指すCSSセレクタ。 |
tocEpisodeTitleSelector | エピソード題名を取得するセレクタ。 |
tocEpisodeHrefSelector | リンクを取得するセレクタ。 |
| 項目 | 説明 |
|---|---|
episodeBodySelector | 重要。 本文が含まれるコンテナのセレクタ。 |
episodeTitleSelector | 話のタイトルのセレクタ。 |
| 項目 | 説明 |
|---|---|
removeSelectors | 削除する要素(広告、SNSボタンなど)。 |
preserveSelectors | 保護するタグ。 ["ruby", "rt", "img"] を推奨。 |
{
"displayName": "ノベル・ラボ(拡張)",
"mode": "extendedReader",
"isEnabled": true,
"workIdPattern": "novel-labo\\.com/v/([a-z0-9]+)",
"episodeNumberPattern": "novel-labo\\.com/v/.+/chapter/(\\d+)",
"episodeBodySelector": "article#novel-text",
"preserveSelectors": ["ruby", "rt", "img"]
}
AI(ChatGPTやClaude等)を活用すれば、HTMLを読み込ませるだけでプロファイルを作成できます。以下のプロンプトをコピーして活用してください。
あなたはCSSセレクタおよび正規表現の専門家です。小説リーダーアプリ『FluxNovels』の「拡張プロファイル(Extended Profile)」を作成してください。
以下の【ターゲット情報】(対象サイトのURL構造、目次ページのHTML、本文ページのHTML)を深く解析し、以下の【出力フォーマット】のすべてのパラメータを正確に埋めたクリーンなJSONを出力してください。プレースホルダーや推測による省略はせず、実際のHTML構造に完全に合致するセレクタを指定してください。
### URLプレースホルダーと正規表現の設計ルール
1. {workId}: URLから作品を識別するためのID(数字や文字列)を指します。
2. {episodeId}: エピソード個別のID、または連番(話数)を指します。
3. workIdPattern はURLから {workId} を抽出するためのキャプチャグループ () を含む正規表現です。
4. episodeNumberPattern はURLから {episodeId} を抽出するためのキャプチャグループ () を含む正規表現です。
5. tocPageURLTemplate には、{workId} プレースホルダーを含む目次(作品トップ)ページのURLテンプレートを指定します。
6. episodeURLTemplate には、{workId} や {episodeId} プレースホルダーを含む、本文エピソードページのURLテンプレートを指定します。
7. urlPatterns には、このプロファイルを適用するURLのパターンを、上記のプレースホルダーを用いて複数(目次用、本文用など)配列で指定します。
### セレクタ設計のルール
- tocEpisodeRowSelector: 目次ページにおける、各話エピソード1件分を表すCSSセレクタ。
- tocEpisodeTitleSelector: 上記Row要素内から「エピソードのタイトル」を抽出するためのセレクタ。
- tocEpisodeHrefSelector: 上記Row要素内から「本文URL(href属性)」を抽出するためのセレクタ。
- tocEpisodeDateSelector: 上記Row要素内から「投稿日・更新日」を抽出するためのセレクタ。
- episodeBodySelector: 本文ページにおける「小説の本文」を囲むコンテナのセレクタ(広告やノイズを含まない最も狭い範囲)。
- episodeTitleSelector: 本文ページにおける「エピソードのサブタイトル」のセレクタ。
- removeSelectors: 本文に含まれる広告、SNSボタン、スクリプトなど、読書に不要なタグを排除するためのCSSセレクタの配列。
【出力フォーマット】
{
"displayName": "サイト名(拡張)",
"mode": "extendedReader",
"isEnabled": true,
"userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1",
"acceptLanguage": "ja-JP,ja;q=0.9",
"timeoutSeconds": 30,
"maxPrefetchEpisodes": 5,
"cachePolicy": "library",
"requestIntervalSeconds": 1,
"workIdPattern": "作品IDを抽出する正規表現(例:site\\\\.com/novel/([0-9]+))",
"episodeNumberPattern": "エピソードIDを抽出する正規表現(例:/episode/([0-9]+))",
"tocPageURLTemplate": "目次URLテンプレート(例:https://www.site.com/novel/{workId})",
"urlPatterns": [
"https://www.site.com/novel/{workId}",
"https://www.site.com/novel/{workId}/episode/{episodeId}"
],
"tocEpisodeRowSelector": "目次行のセレクタ(例:.episode-item, tr.row)",
"tocEpisodeTitleSelector": "タイトルセレクタ(例:.title, a)",
"tocEpisodeHrefSelector": "リンク(aタグ)のセレクタ(例:a)",
"tocEpisodeDateSelector": "投稿日のセレクタ(例:time, .date)",
"tocEpisodeNumberRegex": "タイトルやURLから話数を抽出する正規表現(例:第\\\\s*([0-9]+)\\\\s*話)",
"tocNextPageSelector": "目次の「次へ」ボタンのセレクタ(無い場合は空文字)",
"episodeURLTemplate": "本文URLテンプレート(例:https://www.site.com/novel/{workId}/episode/{episodeId})",
"episodeTitleSelector": "本文ページの話タイトルセレクタ(例:h1, .episode-title)",
"episodePrefaceSelector": "前書きのセレクタ(無い場合は空文字)",
"episodeBodySelector": "本文のセレクタ(例:#novelBody, .novel-text)",
"episodeAfterwordSelector": "後書きのセレクタ(無い場合は空文字)",
"removeSelectors": [
"script",
"style",
"noscript",
"div.ad-container"
]
}
【ターゲット情報】
1. 対象サイトの主要URL:
- 目次ページ:[ここに目次ページのURLを記入]
- 本文ページ:[ここに本文ページのURLを記入]
2. 目次ページのHTML:
[ここに目次ページのHTMLソースの一部、または全体を貼り付け]
3. 本文ページのHTML:
[ここに本文ページのHTMLソースの一部、または全体を貼り付け]
プロファイルの共有や相談はコミュニティ(GitHub Discussions)へ。
コミュニティへ参加するFluxNovels(以下「本アプリ」)は、ユーザーのプライバシーを最優先事項として設計されています。
本アプリは、個人情報(氏名、メールアドレス等)を収集することはありません。
データはAppleのiCloud(CloudKit)に保存され、開発者がアクセスすることはありません。
support@cecily.jp