LoginSignup
5
2

More than 3 years have passed since last update.

JekyllでパーマリンクにFront Matterのカスタム変数を使う方法

Last updated at Posted at 2020-06-01

「Front Matterのカスタム変数をパーマリンクに使いたい!」ので、使えるようにしてみたという記事です。https://mekurun.com/ を作るのに使っています。

背景

Jekyll で生成する記事のURLは、_config.yml の設定や Front Matter での直接の指定でカスタマイズできます。以下で軽く説明しますが、詳しくは、公式ガイドの Permalinks | Jekyll を参照ください。日本語版

_config.yml で記事のURLを設定する方法

_config.yml
permalink: /:categories/:title

_config.yml で、上記のような指定をすることで、全ポストのURLを一定のルールで決めることができます。しかし、事前に用意された Placeholder(置換用変数) しか使えません。
(組み込みフォーマットなどの説明はここでは割愛します)

Front Matter で記事のURLを設定する方法

Front Matter とは、ファイルの最初に3つのダッシュで挟まれたYAMLで、このブロックがあると Jekyllさんはファイルをいい感じに処理してくれます。記事のタイトルやカテゴリーなどを設定するのに使ったことがある方も多いでしょう。

about.md
---
permalink: /about/
---

この方法は柔軟に好きなパーマリンクを設定できますが、一定のルールで複数のページのパーマリンクを設定するのには向いていません。

本題 (_plugins を使ってパーマリンクをカスタムする方法)

しかし、「Front Matterのカスタム変数をパーマリンクに使いたい!」という場合にはどちらも向いていません。そこで、_plugins を使ってパーマリンクをカスタムする方法の登場です。
今回はこんな記事たち↓があるとします。デフォルトの変数の他に、author という変数を使っていますね。この著者猫さんの名前をパーマリンクに含めるのが目標です。

2020-06-01-test.md
---
layout: post
title: "テスト記事だにゃー"
date: 2020-06-01 11:14:26 +0900
categories: cat
author: toraneko
---
  1. まず、サイトのrootディレクトリ直下に _plugins というディレクトリを作ります。
  2. 適当な名前の.rbファイルを作ります。ここでは jekyll_change_permalinks.rb にしてみました。
  3. 中身を書きます。
jekyll_change_permalinks.rb
module Jekyll
  class PermalinkRewriter < Generator # Generatorクラスを継承してあげます
    safe true
    priority :low # プラグインがロードされる順位を決めてあげます

    def generate(site) # ジェネレータはこのメソッドを使います
      site.posts.each do |item|
        @author = item.data['author'] # Front Matter の変数はこれで取得できます
        unless @author.nil? # nilじゃないかな?チェック
          item.data['permalink'] = "/:categories/#{@author}/:title/"
        end
      end
    end
  end
end

/cat/toraneko/test/ で、先程の記事が見られるようになりました!

まとめ

「Front Matterのカスタム変数をパーマリンクに使いたい!」というときはこんな方法があるよ!という紹介でした(´∀`*)

それぞれに長所と短所があるので、目的にぴったりな方法を見つけると良さそうです💭

比較

方法 ルールがある カスタム変数を使える
_config.ymlを使う方法
Front Matterで直指定
_pluginsを使う方法

参考

Your first plugin | Jekyll • Simple, blog-aware, static sites
Generators | Jekyll • Simple, blog-aware, static sites
Permalinks | Jekyll • Simple, blog-aware, static sites
What are the steps to getting this 'custom' permalink scheme in Jekyll?
Search · class PermalinkRewriter < Generator

5
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2