表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
小説家になろうのランキング作品を探しやすくするためのツールを作ってみるよ!  作者: とある小説投稿サイトのランキング好き
Web版開発編
10/23

なろらんサーチを作ってみる

はい、ということでやっとメイン機能ですね。今回はランキングの検索部分を作っていきます。


作業としては以下です。


- レイアウトを決める

- 作品を並べる

- 並べ替えする

- 検索させる

- 期間、ジャンルの拡張




--- レイアウト ---


まずは小説表示レイアウトを決めましょう。


これは色々なサイトを参考にしてから決めたいと思うので、色々なサイトのランキング画面を見ていきましょうか。


なお、基本的にスマホでの見え方を参考にしています。作品は適当に各小説投稿サイトでのランキングから取得したものを載せています。



小説家になろう

挿絵(By みてみん)


カクヨム

挿絵(By みてみん)


エブリスタ

挿絵(By みてみん)


アルファポリス

挿絵(By みてみん)


ハーメルン

挿絵(By みてみん)


ノベルアップ+

挿絵(By みてみん)



他にも色々と調べたけど割愛。




色々なレイアウトがありますが、大体共通項目はありますね。


並べてみて思ったのは、派手な色使いとか大きさはちょっとみにくいかなって思いました。色数もあんまり多いとどれを見たらいいかわからない感じ。文字サイズはタイトル以外はそこまで大きくなくていいかもしんない。


上位のサイト見る限りシンプルにするのが良さそうです。とりあえずカクヨム、なろう、ハーメルン、あたりを真似してみます。


あとAmazonみたいなレビュー★数あると面白そうなので入れてみます。


こんな感じのブロックに分けて表示させます


挿絵(By みてみん)


みたくないブロックは消せるようにもしておきます。


挿絵(By みてみん)


ということでこんな感じのレイアウトかな。


挿絵(By みてみん)


あらすじは正直1000文字まで表示しても読まないので、150文字くらいに削ります。興味があれば小説ページへ行ってって感じ。


情報たっぷり詰め込みました。



--- 並べる ---


あとは、これをリスト化させるわけですが、これも便利なライブラリがあるので使います


List.js

https://listjs.com/


並べ替えや検索もしてくれる優れもの。ページネーションも付けられます。


NovelList = new List('js-cont', options, json_calc);


指定した要素のところにjson形式のデータをoptionとともに放り込むだけで自動でリスト化してくれます。


超便利!



--- 並べ替え ---


では並べ終わったので、次はソートできるようにしていきます。


ソート項目を用意します。


<select class="select form-select custom-input" id="id-sort-select" onchange="sortList();">

<option value="js-rank_rev" selected>ランキング順</option>

<option value="js-rnd">てきとう</option>

<option value="tl">タイトル文字数の多い順</option>

<option value="tl_rev">タイトル文字数の少ない順</option>

<option value="u">ユーザーIDが新しい順</option>

<option value="u_rev">ユーザーIDが古い順</option>

<option value="l">文字数の多い順</option>

<option value="l_rev">文字数の少ない順</option>

<option value="js-ka">会話率の高い順</option>

<option value="js-ka_rev">会話率の低い順</option>

<option value="js-ahp">平均★数の高い順</option>

<option value="js-ahp_rev">平均★数の低い順</option>

<option value="al">1話の平均文字数の多い順</option>

<option value="al_rev">1話の平均文字数の少ない順</option>

<option value="js-gf">投稿日が新しい順</option>

<option value="js-gf_rev">投稿日が古い順</option>

<option value="js-gl">更新日が新しい順</option>

<option value="js-gl_rev">更新日が古い順</option>

<option value="ga">話数の多い順</option>

<option value="ga_rev">話数の少ない順</option>

<option value="imp">感想数の多い順</option>

<option value="imp_rev">感想数の少ない順</option>

<option value="r">レビュー数の多い順</option>

<option value="r_rev">レビュー数の少ない順</option>

<option value="ap">累計ポイントの多い順</option>

<option value="ap_rev">累計ポイントの少ない順</option>

<option value="f">ブクマの多い順</option>

<option value="f_rev">ブクマの少ない順</option>

<option value="a">評価ポイントの多い順</option>

<option value="a_rev">評価ポイントの少ない順</option>

<option value="ah">評価者数の多い順</option>

<option value="ah_rev">評価者数の少ない順</option>

<option value="dp">日間ポイントの多い順</option>

<option value="dp_rev">日間ポイントの少ない順</option>

<option value="wp">週間ポイントの多い順</option>

<option value="wp_rev">週間ポイントの少ない順</option>

<option value="mp">月間ポイントの多い順</option>

<option value="mp_rev">月間ポイントの少ない順</option>

<option value="qp">4半期ポイントの多い順</option>

<option value="qp_rev">4半期ポイントの少ない順</option>

<option value="yp">年間ポイントの多い順</option>

<option value="yp_rev">年間ポイントの少ない順</option>

</select>


挿絵(By みてみん)


まぁとりあえず並べ替えできそうなものを並べてみました。


まぁ確実に使わない項目もあるだろうけどいいかな。なんかすげー、感が大事。



それを動かしたら、js内のやつを並べ替えるようにします。


if(sortDesc.indexOf('rev') !== -1){

NovelList.sort(sortDesc.replace('_rev', ''), {order: 'asc'});

}else{

NovelList.sort(sortDesc, {order: 'desc'});

}


昇順と降順はvalのrevで判定させてます。



--- 検索 ---


次、検索部を作ります。


検索は色々とできますが、必要そうな項目だけ抜き出します。



- キーワード

- 種別

- 文字数

- タイトル

- ユーザー

- 投稿

- 更新

- ポイント



こんな感じかな。他にも感想とかレビューとかもあるけど基本的にポイントと相関あるので割愛。


とりあえずこれで様子見ましょう。


検索フォームを作ってOKです。


挿絵(By みてみん)



--- 期間、ジャンル拡張 ---


あとはジャンルと期間別も用意しましょう。



<select title="期間" id="js-ranking-period-select">

<option value="d" selected>日間</option>

<option value="w">週間</option>

<option value="m">月間</option>

<option value="q">四半期</option>

<option value="y">年間</option>

<option value="h">累計</option>

</select>



<select title="ジャンル" id="js-ranking-genre-select">

<option value="000" selected>総合</option>

<option value="101">異世界恋愛</option>

<option value="102">現実世界恋愛</option>

<option value="201">ハイファンタジー</option>

<option value="202">ローファンタジー</option>

<option value="301">純文学</option>

<option value="302">ヒューマンドラマ</option>

<option value="303">歴史</option>

<option value="304">推理</option>

<option value="305">ホラー</option>

<option value="306">アクション</option>

<option value="307">コメディー</option>

<option value="401">VRゲーム</option>

<option value="402">宇宙</option>

<option value="403">空想科学</option>

<option value="404">パニック</option>

<option value="9901">童話</option>

<option value="9902">詩</option>

<option value="9903">エッセイ</option>

<option value="9904">リプレイ</option>

<option value="9999">その他</option>

<option value="9801">ノンジャンル</option>

</select>


地味に累計ジャンルはなろうさんだとランキングに用意されていないので確認したい時に便利かもと思いました。


挿絵(By みてみん)


あと、リプレイとかノンジャンルランキングもないよね。知らない作品いっぱい出てきて面白かったです。


はいということでこれで検索部完了です!



次はガチャを作ります。

 


んー、気になるのはスマホで一画面に収まらないことなんですよね。


もしかしたら数値ブロックをさらに分割してデフォルト非表示にするのもありかなとも思う。

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
↓作っているもの↓
のべらん
hj015rdjlgeugec6dg0f3ypsd6v_ddb_yq_i9_3c81.png
↑作っているもの↑
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ