Vercelの変更など

作成:

Vercelのロックが解除されたのでCloudflareからまたVercelに戻ってきた。
Cloudflareはどうもビルド失敗が多い。

Trailing slash

以前のURLの末尾がスラッシュだと別の投稿になる問題に対処するためにvercel.jsonに末尾に必ずスラッシュがつくようになる設定を加えた。

{
  "trailingSlash": true, //これ
}

時間の問題

Vercelの日時はUTC時間だが(javascriptのDateは基本的にUTC)ブログ記事のfrontmatterの日時は日本時間なため<time>タグのdatetimeがUTC時間の日本時刻という未来になりBridgy-Fedに未来時間の投稿をしてしまっていた。

とりあえず以下のように一時対処した。

通知用日時にするためにUTC時刻用変数を2つ用意する。

---
const postDate = frontmatter.date
  ? new Date(frontmatter.date)
  : new Date("2000-01-01 00:00:00");
const updatedDate = frontmatter.updatedDate
  ? new Date(frontmatter.updatedDate)
  : new Date("2000-01-01 00:00:00");
postDate.setHours(postDate.getHours() - 9);
updatedDate.setHours(updatedDate.getHours() - 9);

ブログに表示される日時部分は以下のとおり。

    <div class="dateInfo">
      {
        frontmatter.date && (
          <span class="postDate">
            作成:
            <time datetime={postDate.toJSON()}>
              {new Date(frontmatter.date).toLocaleDateString(SITE_DATE_LANG, {
                year: "numeric",
                month: "short",
                day: "numeric",
              })}
            </time>
          </span>
        )
      }
      {
        frontmatter.updatedDate && (
          <span class="updatedDate">
            更新:
            <time datetime={updatedDate.toJSON()}>
              {new Date(frontmatter.updatedDate).toLocaleDateString(
                SITE_DATE_LANG,
                {
                  year: "numeric",
                  month: "short",
                  day: "numeric",
                }
              )}
            </time>
          </span>
        )
      }
    </div>

非表示のBridgy-Fed通知用の<time>タグは以下のようにした。

      <div style="display: none;">
        <a class="u-bridgy-fed" href="https://fed.brid.gy/"></a>
        <time class="dt-published" datetime={postDate.toJSON()}>
          {postDate.toJSON()}
        </time>
      </div>

これでブログ上の表記ではfrontmatterのdateを使い日本時間になり、Bridgy-Fedに通知する時間はUTC時間になった。

もっとマシなやり方がありそうだが一応ここまでにしておく。