last_updated を updated に変更した話

目次

  1. 1. 前回のあらすじ
  2. 2. 公式の解決方法
  3. 3. というわけで修正します
    1. 3.1. _config.yml の修正
    2. 3.2. sitemap_template.xml の修正
    3. 3.3. 記事側の修正
    4. 3.4. scaffolds の修正
  4. 4. まとめ
hexo

件名のとおりです。 以前の日記<lastmod> の値が変なことになって困っていたのをどうにかしたという内容で記事を書いたのですが、実は公式が提供している機能や設定だけで解決できることがわかったのでそっちに乗り換えました。というかんじの内容を今日は書いてみます。

前回のあらすじ

以前に書いた日記です。
XMLサイトマップの更新日時を直した | Jpsern.com

これは <lastmod> にファイル生成日時が使われていて困っていたという話です。このときは last_updated という項目を front-matter に追加し、ここに自分で日付を入れた場合のみ <lastmod> を記載する、という方法で解決しました。

公式の解決方法

変数#ページ変数 | Hexo

page.updated
ページの最終更新日

設定#日付-時刻形式 | Hexo

updated_option
Front Matterで提供されていない場合に使用するupdatedの値
デフォルト: mtime

つまり、last_updated を自作する必要はなく、公式が用意している updated を使えばよかっただけのようです。

さらに、updated_option を config に設定し、mtime ではなく date を指定しておけば、updated が設定されていない場合は勝手に date の値を使ってくれるようになるようです。




なぜオレはあんなムダな時間を・・・

というわけで修正します

まあ、もっと簡単に解決できることがわかったのはいいことなので、気を取り直してさっそく対応していきましょう。

_config.yml の修正

ちなみにプロジェクト直下のほうです。テーマ側のconfigではないです。

+ # updated がフロントマターにないときの挙動。dateは公開日を使う設定。
+ # https://hexo.io/ja/docs/configuration
+ updated_option: 'date'

sitemap_template.xml の修正

if文で分岐する必要もなくなったのでif文は消しつつ、last_updated を updated に変えます。なお、そのまま出力すると書式が ISO 8601 (yyyy-MM-ddTHH:mm:ss) で出力されてしまうので、format を噛ませています。

  {% for post in posts %}
<url>
<loc>{{ post.permalink | uriencode }}</loc>
- {% if post.last_updated %}
- <lastmod>{{ post.last_updated }}</lastmod>
- {% endif %}
+ <lastmod>{{ post.updated.format("YYYY-MM-DD") }}</lastmod>
</url>
{% endfor %}

記事側の修正

last_updated を使っている記事すべてフロントマターを修正します。ちょっと面倒ですが今回だけやれば楽になるのでここは last_updated を検索してヒットしたファイルを地道に直していきます。

updateddate と同じ書式(ISO 8601)でOKです。これで last_updated のクオート忘れに悩まされることもなくなるのでよかったです。

- last_updated: '2024-09-30'
+ updated: 2024-09-30 00:00:00

scaffolds の修正

次回以降の日記作成時にそなえて、scaffolds/post.md も直しておきます。

---
title: {{ title }}
date: {{ date }}
- last_updated: '2024-xx-xx'
+ updated: {{ date }}

以上で修正は終了です。

まとめ

いやー、完全に車輪の再発明してしまってましたw
とはいえ自分でどうにかした経験があるからこそ今回公式が提供していた機能のありがたみもわかりますし、それはそれで勉強にはなったのでよしとします。

ではまた

スポンサーリンク
share