NKSSG
NakaKen Static Site Generator

URLの設定をしよう

🌐

ここでは、パーマリンクの設定について見ていきます。

パーマリンクとは

パーマリンクとは、各記事に設定した URL のことです。http://example.com/xxx/ であれば、xxx の部分をパーマリンクと呼びます。

各記事ごとにどのような URL で公開するかを決めなければいけませんが、1つ1つ決めていくのは面倒です。パーマリンクの設定を行うと、URL を作るルールを決めておくことができます。

以下では、パーマリンクの設定方法を見ていきます。

パーマリンクの設定箇所

パーマリンクの設定とは、各記事の URL のルール設定のことです。投稿タイプごとに設定することができます。

NKSSG のインストール直後は、nkssg.yml ファイルの中に、デフォルトの設定が入っています。

post_type:
  - post:
      permalink: /%Y/%m/%d/%H%M%S/
      archive_type: "date"
  - page:
      permalink: /{slug}/
      archive_type: "section"

permalinkの後の部分がパーマリンクの設定です。上の例では、post と page に対して、設定されています。

不思議な文字列が続いていますが、これらは最終的に記事のメタ情報を使って更新されます。どのような値が使えるかは次で見ていきます。

パーマリンクの設定で使えるもの

パーマリンクには、いろいろな値を設定することができます。

日付関係

公開日時の情報から URL を作ることができます。それぞれの文字が次のように対応しています。

  • %Y: 西暦(4桁表記)
  • %m: 月(2桁表記)
  • %d: 日にち(2桁表記)
  • %H: 時(2桁の24時間表記)
  • %M: 分(2桁表記)
  • %S: 秒(2桁表記)

なお、内部では、Python のdate.strftimeを使っています。他に使うことができるものの一覧は strftime() と strptime() の振る舞い にありますが、上で挙げたもの以外で URL に使えるものは少ないです。

スラッグ

スラッグとは、記事を特定するための名前です。URL で使うことを想定しているものです。

スラッグは、フロントマターで各記事ごとに設定することができます。設定をしていなければ、記事のタイトルが設定されます。タイトルの設定がない場合は、ファイル名が設定されます。

スラッグを URL で使いたい場合は、次のようにします。

/{slug}/

波かっこで囲んで設定します。

ファイル名

ファイル名を URL で使いたい場合は、次のようにします。

/{filename}/

ファイル名とは、拡張子を除いた部分です。もとのファイルが xxx.html なら、上のように設定すると、/xxx/ という URL に変換されます。

テキスト

文字をそのまま使うこともできます。例えば、次のように使います。

/entry/%Y/%m/%d/

こうすると、URL は、/entry/2021/04/01/のようになります。

タクソノミー

タグやカテゴリーなどのタクソノミーを URL に使うこともできます。例えば、次のように設定したとします。

/{category}/

このとき、記事のフロントマターで category の設定した値を探します。もし何も設定していなければ、no-category という URL になります。値が設定されていれば、1つ目の値を取り出します。この値について、親たちのカテゴリーも含めて、URL に設定されます。

例えば、category - cat1 - cat2 - cat3 という親子関係であったとき、cat3 が設定された記事の URL は次のようになります。

/cat1/cat2/cat3/

もし、一番トップだけ(つまり category のすぐ下の値)を使いたければ、次のように設定します。

/{category_top}/

タクソノミー名に _top とつけます。

逆に、一番下だけ(つまり、フロントマターに実際に設定したものだけ)を使いたい場合は、次のように _last をつけて設定します。

/{category_last}/

階層全体を使うか、最初だけか、最後だけ、この3パターンから選びます。

メモ

URL に使われるのは、タームのスラッグです。スラッグを指定していない場合は、名前がそのまま使われます。

パーマリンクの設定がこれだけなら、同じタームを設定している記事は同じ URL になってしまいます。なので、さらに何か別の値も一緒に設定する必要があります。例えば、次のようにするのが普通でしょう。

/{category_top}/{slug}

こうすると、トップカテゴリーと記事のスラッグを使った URL になります。

具体例とオススメの設定方法

雑記ブログの場合

まず、post のパーマリンクの設定を考えます。

更新頻度がそれほど高くない場合、多くても1日に1回であれば、年と月と日が入ったパーマリンクでいいでしょう。

/%Y/%m/%d/

URL の例:
/2021/04/01/

1日に複数回更新することがありうるなら、次のように設定しましょう。

/%Y/%m/%d/%H%M%S/

URL の例:
/2021/04/01/123456/

1日に複数回更新しない場合でも、念のため、このように設定しておくことをおススメします。

メモ

/%Y/%m/%d/%H%M%S/ がデフォルトの設定です。

次のようにもできますが、これはオススメしません。

/%Y%m%d/%H%M%S/

URL の例:
/20210401/123456/

URL に応じて public フォルダ内にファイルができるのですが、この URL だと public フォルダの直下にどんどんフォルダが増えていくことになります。記事が少ないうちはいいのですが、多くなってくると管理しづらくなります。

例えば、たくさんのフォルダやファイルをエクスプローラで表示しようとすると、すごく時間がかかるようになってしまいます。

post 内の記事はどんどん増えていくことが予想されるので、スラッグだけを使うのはやめておいた方がいいです。少なくとも、年ごとに分けたほうがいいでしょう。

日時だけだと、何について書いた文章なのかわからない、ということで、次のように設定するという考え方もあります。

/%Y/%m/%d/{slug}/
/%Y/%m/{slug}/

URL の例:
/2021/04/01/sample-post/
/2021/04/sample-post/

更新頻度が少なく、同じタイトル・スラッグの記事を書くことがなさそうなら、後者の設定でも構いません。

page については、記事の数が少ないと予想できるので、スラッグだけでも問題はありません。

/{slug}/

URL の例:
/sample-page/

もし page 内の記事も増える予定なら、年などを入れたほうがいいでしょう。

特化型ブログの場合

ブログの中でも、いくつかのテーマにしぼった記事しか書かないのであれば、URL にカテゴリーを入れるという選択肢もあります。

例えば、プログラミングに関する記事をメインに書くブログがあったとしましょう。このブログに、最大公約数(gcd) の求め方に関する記事を書いたとします。このとき、次の3つの URL でどれが一番わかりやすいでしょうか。

http://example.com/2021/04/01/
http://example.com/2021/gcd/
http://example.com/python/gcd/

1つ目は、2021年4月1日に書いた記事だな、ということは推測できますが、中身まではわかりません。2つ目は、最大公約数(GCD)に関する2021年の記事だな、ということまで推測できます。3つ目なら、Python で最大公約数を求める方法を書いた記事だろうな、と推測できます。特化型のブログなら、3つ目がよさそうです。

カテゴリーに関する情報をパーマリンクに入れるかどうかは、慎重に判断しないといけません。カテゴリーを変えたら URL まで変わってしまうというデメリットがあるからです。ブログの特徴に合わせて、設定をしましょう。

階層型サイトの場合

階層型サイトの場合、URL はフォルダの構造をそのまま反映するのが基本でしょう。その場合は、特にパーマリンクの設定は必要ありません。

フォルダの構造を利用してサイトの構造(親子関係や順序など)に反映させたいが、それだと URL が長くなってしまうのがイヤだ、という人がいるかもしれません。そういう場合は、例えば、ファイル名だけにするなどとしましょう。

/{filename}/
/{slug}/

URL の例:
/sample-page/

また TODO