Gatsby で書いていた Markdown ファイルを Astro に合わせる

作成:
heroimage

ここで書いていることはあくまで自分専用のものです。

Astro では GatsbyJS と比べて Markdown ファイルから見た画像の相対パスが違っていたり、Markdown ファイルごとに layout ファイルの指定が必要などの相違点がある。 そのため Markdown ファイルの frontmatter 書き換えが必須となる。

注意点として 以下の方法では改行コードが LF であるファイルのみが対象になる。

frontmatter の例

ここで扱う Markdown は frontmatter 先頭が title になっていること前提です。

---
title: ブログタイトル
date: "2022-12-12"
featured: ./img/res.jpg

フォルダ内の markdown ファイルの frontmatter の先頭行に layout をいれる

pcregrep は標準でインストールされていないのでインストールする

sudo apt install pcregrep

カレントディレクトリ内のすべてのファイルを置き換え対象かどうか検索し、 対象が変換された場合は置き換え後に.bak ファイルを生成する。

pcregrep のオプション

-M 複数行対象検索
-l 検索該当ファイルをリスト表示

sed のオプション

GNU 版 sed でのみ可能。Linux ではデフォルトで入っているので大丈夫。

-z 複数行対象

layouts を title の上に挿入する

pcregrep -M -l "^\-\-\-\ntitle" ./* | xargs sed -z -i.bak -e "s/^---\ntitle/---\nlayout: \"..\/..\/layouts\/BlogPost.astro\"\ntitle/g"

Gatsby では Markdown ファイルのあるディレクトリからサブディレクトリやカレントディレクトリにある画像が読み出せたが Astro は基本 public フォルダにアクセスしてしまうためパスを書き換える必要がある。

コマンド

pcregrep -l "^featured: \." ./* | xargs sed -i.bak -e "s/featured: \./featured: /g"

最後に

正常に書き換えがされたならば .bak ファイルを削除する。