Gatsby で書いていた Markdown ファイルを Astro に合わせる
作成:
ここで書いていることはあくまで自分専用のものです。
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"
featured のパスから『.』を消す
Gatsby では Markdown ファイルのあるディレクトリからサブディレクトリやカレントディレクトリにある画像が読み出せたが Astro は基本 public フォルダにアクセスしてしまうためパスを書き換える必要がある。
コマンド
pcregrep -l "^featured: \." ./* | xargs sed -i.bak -e "s/featured: \./featured: /g"
最後に
正常に書き換えがされたならば .bak
ファイルを削除する。