はじめに
大量のコンテンツを扱うウェブサービスを設計するとき、単純に情報をデータベースへ保存して一覧表示するだけでは、快適なサービスにはなりません。
利用者が増え、コンテンツ数が数千、数万と増加していくにつれて、「目的の作品をどう探してもらうか」「似た作品をどう提示するか」「カテゴリーをどう整理するか」といった情報設計が重要になります。
今回は「禁漫天堂」
(https://https://18mh.net/mv/all )
のように、多数の作品情報を扱うコンテンツ型サービスを題材として、検索、タグ、推薦、キャッシュなどの仕組みを技術的な視点から考えてみます。
扱うのはサービスの内容そのものではなく、あくまでウェブサービスを構築する際の設計思想です。
コンテンツ型サービスで重要になる検索機能
コンテンツが少ない段階では、データベースに対する単純な部分一致検索でも十分です。
しかし、データ量が増加すると状況が変わります。
たとえば利用者が作品名の一部だけを入力した場合でも、タイトル、作者、カテゴリー、タグなど複数の項目から候補を探す必要があります。
ここで重要になるのが検索用データの設計です。
作品情報を一つの文章として保存するのではなく、
・作品タイトル
・作者情報
・カテゴリー
・タグ
・公開日時
・更新日時
・人気度
といった形で構造化して保存しておけば、検索条件を柔軟に変更できます。
さらに検索件数が増えた場合は、検索専用の仕組みを導入する方法もあります。
重要なのは、最初から巨大な検索システムを構築することではありません。
サービス規模に合わせて段階的に改善できる構造にしておくことです。
タグは単なる飾りではない
コンテンツ型サービスでは、タグ設計も非常に重要です。
タグというと、画面上に表示する分類ラベルという印象がありますが、実際には検索や推薦にも利用できます。
たとえば、ある利用者が特定ジャンルの作品を頻繁に閲覧している場合、そのジャンルに関連するタグを持った別作品を候補として提示できます。
つまり、
利用者
↓
閲覧履歴
↓
タグ
↓
関連作品
という単純な構造だけでも、基本的な推薦機能を作ることができます。
高度な機械学習を最初から導入しなくても、タグの一致数や閲覧回数を点数化するだけで、ある程度実用的な推薦を実現できます。
人気順だけでは発見性が低下する
ランキング機能にも注意が必要です。
単純に累計閲覧数だけで順位を決めると、昔から存在する人気作品が常に上位に表示され、新しく追加された作品が発見されにくくなります。
そこで期間ごとの数値を利用します。
たとえば、
直近一日の閲覧数
直近七日間の閲覧数
お気に入り追加数
検索結果からの選択数
更新からの経過時間
などを組み合わせて評価します。
こうすると、「長期間人気の作品」と「最近急速に注目されている作品」を別々に表示できます。
利用者にとっても、新しいコンテンツを発見しやすくなります。
キャッシュで表示速度を改善する
アクセス数が増えると、すべてのページ表示でデータベースへ問い合わせる構造は負荷が高くなります。
特に、
人気ランキング
トップページ
カテゴリー一覧
新着一覧
など、多くの利用者に共通して表示される情報はキャッシュとの相性が良い部分です。
ランキングが一分ごとに更新されれば十分なのであれば、一回計算した結果を一定時間保存して再利用できます。
これだけでもデータベースへの問い合わせ回数を大きく減らせる可能性があります。
一方、利用者ごとの閲覧履歴など、頻繁に変化する情報まで長時間キャッシュすると表示内容が古くなるため、情報の性質に応じて保存時間を変更する必要があります。
画像の最適化も重要
作品一覧型のサービスでは、一画面に大量の画像を表示する場合があります。
ここで元画像をそのまま読み込むと、通信量が増えて表示速度が低下します。
一覧ページでは小さな画像を使用し、詳細ページを開いたときだけ大きな画像を取得する設計が有効です。
さらに、画面外の画像を必要になるまで読み込まない遅延読み込みを利用すると、最初に必要となる通信量を削減できます。
利用者が体感する速度は、サーバーの処理速度だけで決まるわけではありません。
画像サイズ、読み込み順序、キャッシュ、通信回数などを総合的に改善することが重要です。
「探せること」がサービスの価値になる
禁漫天堂のように大量のコンテンツを扱うサービスについて技術的に考えてみると、重要なのはコンテンツ数だけではないことが分かります。
情報が増えるほど、
「どう保存するか」
よりも、
「どう探してもらうか」
の重要性が高くなります。
検索、カテゴリー、タグ、ランキング、推薦は別々の機能に見えますが、実際には同じメタデータを共有できます。
そのため、初期段階から作品情報を適切に構造化しておくことが、後から機能を追加するときの大きな助けになります。
まとめ
コンテンツ型ウェブサービスを構築するときは、画面デザインだけではなく、裏側にある情報構造を考える必要があります。
特にコンテンツ数が増えてからデータ構造を変更するのは大変です。
検索しやすいデータ構造を作り、タグを整理し、ランキングや推薦に再利用できるようにしておけば、サービスの成長に合わせて機能を拡張しやすくなります。
最初から複雑な仕組みを作る必要はありません。
小規模なデータベース検索から始め、アクセス数やコンテンツ数が増えた段階で検索機能、キャッシュ、推薦処理などを分離していく。
こうした段階的な設計こそ、大量の情報を扱うウェブサービスを長期的に運用するうえで重要なのではないでしょうか。