記事一覧

Markdownの記事をEmDashへ入れる|このサイトの20記事を流し込んだ方法

このサイトの記事は、すべてMarkdownで書いてからEmDashへ入れています。Markdownを Portable Text に変えて seed.json へ流し込む小さなプログラムの中身と、20記事を入れたときの手順を紹介します。

Markdownの記事をEmDashへ入れる|このサイトの20記事を流し込んだ方法

このサイトの記事は、編集部が Markdown(`.md` ファイル)で書いてから EmDash へ入れています。管理画面で1本ずつ打ち込むのではなく、記事のファイルをまとめて流し込みました。その方法を紹介します。

なぜ Markdown で書くのか

EmDash の本文は、HTML ではなく Portable Text(文章を部品の並びとして持つ JSON)で保存されます(Portable Text の説明)。Portable Text を手で書くのは大変なので、書きやすい Markdown で書き、プログラムで変換することにしました。

Markdown のファイルは、ふつうのテキストとしてパソコンに残ります。履歴を取ったり、まとめて直したりもしやすくなります。

記事ファイルの形

1本の記事は、先頭に記事の情報、その下に本文を書きます。

---
slug: japanese-font
title: EmDashで日本語フォントを使う|Noto Sans JPへの切り替え
excerpt: 記事の要約(一覧や検索結果に出る文)
category: customize
tags: astro
---
本文をここから書く。

## 見出し

category と tags には、seed.json に登録したカテゴリーとタグのスラッグを書きます。登録していないスラッグを書くと、変換のときにエラーで止まるようにしました。

変換のプログラムがすること

編集部の変換プログラム(Python で170行ほど)は、次のことをします。

  1. content/posts/ の .md を全部読み、先頭の情報と本文に分ける
  2. 本文を1行ずつ見て、Portable Text の部品に変える
  3. 雛形の seed/seed.json の記事・固定ページ・サイト名・メニュー・カテゴリーを差し替える

本文の変換で扱う書き方は、次のものだけに絞りました。

  • ## と ### の見出し → h2・h3 の部品
  • 空行で区切った段落 → normal の部品
  • - の箇条書きと 1. の番号付き → listItem 付きの部品
  • > の引用 → blockquote の部品
  • 「``」で囲んだコード → code` の部品(言語名も持たせる)
  • 文中の太字・コード・リンク → 文字の飾り(marks)とリンクの情報(markDefs)

表は使っていません。スマートフォンで横にはみ出しやすいためです。

20記事を入れた手順

変換プログラムを動かすと、seed/seed.json が書き換わります。

py scripts/build_seed.py

画面には posts=20 pages=2 のように件数と記事の一覧が出ます。--check を付けると、書き換えずに件数と一覧だけ確かめられます。

あとは、空のデータベースで初期設定をすると記事が入ります(初期設定の流れと守り方)。編集部は手元の wrangler dev で先に試し、記事一覧と各記事が表示されることを確かめました。

気をつけたこと

  • seed は「空のデータベース」にしか入らない。一度初期設定を済ませたサイトへ記事を足すときは、seed ではなく EmDash の CLI や管理画面を使います
  • 記事の中のリンクは /posts/<スラッグ> で書きます。スラッグを後から変えると、リンクが切れます
  • 雛形の seed.json は、書き換える前に別の場所へ写しを取りました

関連記事