現在、ブログ構築がストップしているのですが、その原因として、Metalsmith のページネーション系プラグインの機能が足りず、十分なサポートが得られていないという点があります。

metalsmith-collection プラグイン

このプラグインは、記事の集合( Wordpress 的な言い方をすると、アーカイブと同じようなものを作れます。以下ではコレクション)を作るためのものです。コレクションを作った時点で、nextprevious というメタデータが追加され、「次の記事」「前の記事」のリンクを作ることができます。

コレクションには、記事を並べる順序を指定できます。普通は date メタデータで逆順(新しいもの順)にソートすることが多いでしょう。場合によっては、古いもの順にソートしたいこともあるでしょう。現在の metalsmith-collection では、複数のコレクションを作ることはできるのですが、新しいものと古いもののコレクションの両方を作ると、nextprevious は上書きされて壊れます。

例を示します。today.htmlyesterday.html の 2つの投稿があったとします。最初に、新しいもの順にソートします。新しいもの順に並べると、today.html は以下のような next を持つことになります。

"today.html": {
  pagination: {
    next: { /* → yesterday.html */ }
  }
}

この状態で、古いもの順にソートします。today.html は、以下のようになります。

"today.html": {
  pagination: {
    next: { /* → yesterday.html */ }
    previous: { /* → yesterday.html */ }
  }
}

同じオブジェクトを使い回して、next は残ったまま、previous が追加されますので、変なナビゲーションができあがります。

metalsmith-pagination プラグイン

このプラグインは、metalsmith-collection で作ったコレクションを実際にページ単位に分割して、ページネーションを実現します。このプラグインで作れるページネーションは、こういうものです。

(おそらく多くの人が)作りたいものは、こういうものでしょう。

何が足りないかは、お分かりでしょう。Handlebars.js と相性が悪いのが原因という点もあるのですが、ちゃんと考えて作ってよ、と言いたくなります。

metalsmith-tags プラグイン

さらに話をややこしくしているのは、metalsmith-tags で作ったタグページのページネーションは、metalsmith-tags が独自に行うという点です。使う側としては別段どこでやってもらっても構わないのですが、同じテンプレートを使い回せないと面倒です。

で、どうすんの?

不満ばかり書きましたが、「このブログではできてんじゃん」ということですね。はい。そうです。