Metalsmith のメタデータのデフォルト値を決める
Metalsmith で記事を書くにあたって、メタデータを書けることは既に紹介しました。title や tags は仕方ないとは言え、date や layout を毎度書くのは正直しんどいです。これらにデフォルト値を与えるためのプラグイン metalsmith-default-values をご紹介します。
インストール&設定
例によって npm
でインストールします。ここで紹介する方法は、metalsmith-default-values 2.1.0 以降が必要です。
$ npm install metalsmith-default-values --save └─┬ metalsmith-default-values@2.1.0 ... $
index.js は 次のようになります。
const default_values = require('metalsmith-default-values');
Metalsmith(__dirname)
...
.use(default_values([
{
pattern: 'posts/**/*.md',
defaults: {
layout: 'post.html',
date: function (post) {
return post.stats.ctime;
},
tags: '' /** [BUG] tags を設定していない記事で、タグ表示がおかしくなるバグを回避。 */
}
}
]))
...
この例では posts/**/*.md
の各ファイルについて、デフォルト値を設定しています。
layout
は post.html
(文字列ですから、当然 '
と '
で囲う必要があります)に設定しています。これはデフォルト値ですから、ファイルの方で、layout
メタデータを書いた場合はそちらが優先されます。
date
は独特な書き方ですが、関数を与えた場合、引数 post
に処理中のファイルのメタデータが渡され、関数が実行されます。この仕掛けによって、別のメタデータを元に、値を決めることができます。stats.ctime
は Metalsmith コアが設定するメタデータで、ファイルの作成日付が入っています。このように書くと、date
を省略した場合は自動的に作成日付が設定され、何か別の事情で日付を指定したい場合は、個別にメタデータを書いて対応する、という方法がとれます。
とは言え、多くのテキストエディタが上書き保存の際に、新しくファイルを作成し、古いファイルと置き換えるという処理方式を採用しているので、実質的にはこの設定では更新日になると考えた方が良いでしょう。
tags
は空文字列を与えています。これは metalsmith-tags プラグインのバグで、tags
を書き忘れた場合にタグ表示がおかしくなるため、それを回避するための措置です。
ここでは、3つの使用例を示しました。デフォルト値をうまく使うことで Metalsmith はより快適になります。シンプルながら、使い道の多いプラグインであると思います。
謝辞
私が Metalsmith を採用するにあたり、より普通のブログシステムに近づけるために変更した点の一つです。私の pull request を快く受け入れてくれた Andrew Goodricke 氏に感謝いたします。