kosame.org

国内外の漫画を読んでレビューを書くウェブログ

Movable Typeでレビューブログをやる場合の一つのアイデア

このウェブログでは漫画のレビューを書く際にそれぞれの作品に対して評価の数値を設定し、国内の漫画と外国の漫画とに分類した上でそれぞれ評価の高い順に並べて表示するためのページを用意している。これについて実際にどうやっているのかという質問をつい先日もらった。このサイトではMovable Typeを使っているので、要するにMTで同じ事を再現するにはどうしたらいいのかということだと思う。質問への回答も含めて、このウェブログでMTをどのように使ってページを作成しているのか包括的に説明してみようと思う。

ブログでレビューをやる際の不満

一般にブログではひとつひとつのエントリーがさまざまなカテゴリーに分類され、さらにそれぞれのカテゴリーに所属しているエントリーが一覧できるページが用意されていることが多い。いわゆるカテゴリーアーカイブ。カテゴリーというのはブログの訪問者にとって一つの興味の対象と言っていいわけで、カテゴリーアーカイブは興味のないエントリーをあらかじめ除外した上でそのブログから本人の読みたいエントリーを探し出すのに役立っている。とはいっても、すべてのエントリーをカテゴリーに分類しさえすればそれで問題ないかというとそうでもない。エントリーの数が増えると当然のことながらカテゴリーアーカイブのページもどんどん長くなっていく。どこのブログでもそうだろうけれども、カテゴリーアーカイブのページではエントリーを単純に時系列順に並べただけなので、一つ一つのエントリーがそのカテゴリーに所属しているというほかには単に書かれた時期が相対的に新しいか古いかということしかわからない。もっとも、エントリーには見出しとしてタイトルが付くもんなのでそのタイトルからエントリーの内容はある程度想像がつく。それでもエントリーのタイトルというものはそれぞれ固有のものであるわけで、どのエントリーが読んでみたいかということをタイトルによって判断するにはそれぞれのタイトルに目を通してみるほかない。あるカテゴリーアーカイブに1000件のエントリーがあったとしたら、その1000件のうちどのエントリーに興味があるかを訪問者が判断するにはやはり1000件のタイトルに一つ一つ目を通してみるしかないわけだ。定期的にエントリーを投稿するのがブログだというのならば、エントリーが増えるほど使い勝手が悪くなるのがブログの必然だと言っていい。

レビュー系のブログならではのアイデア

種種雑多な話題を扱う一般的なブログならともかく、うちのようにレビューに特化したブログならば独特のアイデアがある。レビューのジャンルが何であれ、対象となる作品にはいくつかの共通した属性がある。映画ならば必ず「監督」がいるはずだし、音楽CDには「ミュージシャン」がいる。書籍には「著者」がいる。そしてどのジャンルにおいても「タイトル」が必ずある。そして何と言ってもレビュアーによる評価の高低がある。こういった属性に基づいたエントリーの分類や整序が可能だ。カテゴリーによる分類に不満ならばサブカテゴリーを導入すればいいという考えもある。それも一つの解決法だ。ただし、サブカテゴリーというものは結局のところ、あるカテゴリーの中でさらに固有の概念に基づいた区分を設けるだけのことであって、エントリーの分類に序列を導入することとは違う。カテゴリー名は固有なものだから序列化しようがない。つまり、カテゴリー名を例えばアルファベット順に並べたところでその順序の早い遅いに価値の違いはないわけだ。無限に増えつづけるエントリー群に対して、常にほかのほとんどすべてのエントリーを除外した上で、特定の意味を持ったエントリーのみを目立たせるにはやはり何らかの序列化が有効じゃないだろうか?

kosame.orgでのやり方

使用しているMovable Typeのバージョンは3.31。プラグインは以下の通り。CustomFieldsはすでに新しいバージョンがリリースされてるけれどもそちらは試していないのでわからない。

ここではとりあえず一つ一つのエントリーに対してRating(評価)を設定し、カテゴリーアーカイブのページで評価順にエントリーをソートしてリストアップする方法について説明したい。著者名や書名を扱う場合についてもやり方は基本的に同じ。

すでにCustomFieldsはインストールされているものとする。Custom Entry Fieldsを新規に一つ作成し、名前をRatingとでも付ける。MTのテンプレート内で使用する場合のタグは

<$MTEntryDataRating$>

となる。個別のエントリーを編集する画面を開くとRatingという名前のフィールドが追加されているのでそこに評価の数値を記入する。アルファベット順の評価にしたければAとかBとか書けばいい。

この評価を元にカテゴリーアーカイブのページでエントリーを並べ替えて表示するためにプラグインのMTCollateが必要になる。MTの編集画面で新しくアーカイブテンプレートを一つ作成する。テンプレートの名前は何でもわかりやすいものを。Category Archive - Sort by Ratingとか。テンプレートの中身は以下の記述を参考に。

<MTCollateCollect>
<MTEntries>
<MTCollateRecord>
<MTCollateSetField name="title"><$MTEntryTitle$></MTCollateSetField>
<MTCollateSetField name="link"><$MTEntryLink$></MTCollateSetField>
<MTCollateSetField name="rating"><$MTEntryDataRating$></MTCollateSetField>
</MTCollateRecord>
</MTEntries>
</MTCollateCollect>
<dl>
<MTCollateList sort="rating:#:- title:+">
<MTCollateIfHeader name="rating">
<dt class="rating"><MTCollateField name="rating">/10</dt>
</MTCollateIfHeader>
<dd><a href="<MTCollateField name="link">" title="<MTCollateField name="title">"><MTCollateField name="title"></a></dd>
</MTCollateList>
</dl>

続いてMTの編集画面でPublishing Settingsを開き、新しくArchive Mappingを一つ作る。Archive TypeにはCategoryを、Templateにはついさっき作ったカテゴリーアーカイブ要のテンプレートを指定してAddボタンを押す。Archive File Pathにはやはりカテゴリーのディレクトリの下にサブディレクトリを作るのがいいんじゃないだろうか。http://kosame.org/comic-review/sort-by-rating/ みたいに。

テンプレートの中身についてちょっと説明。ポイントは11行目。

<MTCollateList sort="rating:#:- title:+">

これは該当するカテゴリーに所属するすべてのエントリーを、先の MTCollateCollect のコンテナタグの中で rating という名前のもとに設定されたデータに基づき、それぞれを数値として扱って降り順でソートし、さらにデータが同じ場合には title というデータに基づいてアルファベットの登り順にソートする……ということをやっている。ratingのあとのダブルコロンに「#」があることが重要で、これがないとデータを数値として扱ってくれずただのテキストとしてソートしてしまう。つまり、

<MTCollateList sort="rating:- title:+">

これだと並べ替えの順番が 9, 8, 7, 6, 5, 4, 3, 2, 10, 1 になってしまう。10段階評価で10から1に向かって並べたいので先に挙げたような記述にするわけ。

また、同じ評価を受けた作品群については何度も何度も「評価:9」、「評価:9」、「評価:9」……などと繰り返すのは見た目に煩わしいので、その評価の数値を見出しのように扱って表示させたい。そこで12行目。MTCollateIfHeaderというコンテナタグを使う。ratingのデータが同じならばそのエントリーのリストの頭にだけ「評価:9」というように表示させている。

以上、実際にこのウェブログで使っているテンプレートの記述はもっとややこしいものなんだけれども他人にとっては必要がないと思うので省略し、必要最低限の部分だけ紹介してみた。