-
-
Wordpressの記事を静的サイトジェネレータZoraへ移行する
こちらの記事はQiitaに投降した記事と同一の内容になります
ブログをWordpressからZola(Rust製の静的サイトジェネレータ)へ移行して数か月、自作テーマはテーマは依然として作成途中であるが、とりあえず今のところ問題もなさそうなので、重い腰を上げて旧ブログの記事を移行することにした。
具体的な工程としては以下
- Wordpressの記事をSSG用のテキストファイルへ出力
- 記事ファイルの整理
- フロントマターをZola用のものに修正
- リンクなど記事内の情報の修正(これは今回の記事では扱わない)
前提
移行前の環境
ブログプラットフォームでおなじみのWordpress ブログから大規模サイトまで作れる CMS | WordPress.org 日本語
多言語用にサブディレクトリ型のマルチサイトを使用
本記事の工程でも多言語、マルチサイト用の余計な工程ががかかってる。シングルサイトならもっと楽。
移行先の環境
静的サイトジェネレーターZolaで生成 Zola
今回はZolaだが、移行の手順の流れや考え方自体は他でも使えるのではないかと思う。
手順1: WordpressからSSG向けの形式への出力
Zola用のツールがあるとは思えなかったので、ほかにメジャーなSSGであるところのHUGO用のツールを探す。
puluginのインストール
SSHでサーバーに入り、以下のようにプラグインを入れる
$ cd /path/to/wordpress/wp-content/plugins/ $ sudo wget https://github.com/SchumacherFM/wordpress-to-hugo-exporter/archive/2.0.0.zip $ sudo unzip 2.0.0.zip
自分のケースでは
sudo
が必要だったが共有してるタイプのレンタルサーバーならHOMEディレクトリ以下にあると思うので、sudo
しなくてもいい。次にWordpress上の画面で対応
プラグインを有効化し… {{image(src=“activate.png”, alt=“有効化!”)}}
エクスポート {{image(src=“export.png”, alt=“エクスポート!”)}}
中身の確認
なぜか一部のマークダウンがAtomにディレクトリ扱いされて読めないというイレギュラーがあったが、VSCodeでは開けたのでそのまま続行する。 Atom最近使ってなかったから更新されてなくてバグってたのかもしれない。
Hugoならこれで終わりかもしれないが、今回は別のSSGなので、ここからが本番。
手順2: フォーマットの修正
正直今回のケースでは記事が少ないので手動修正のほうが早かったのだけれど、せっかく記事にするなら役に立つ記事にしたいというのと、bashを学ぶちょうどいい機会ということもあって、極力bashで一括でやれるようにした
ファイルの移動
出力時のディレクトリの構造としてはこんなかんじ
- hugo-export
- about
- index.md
- posts
- yyyy-mm-dd-slug1.md
- yyyy-mm-dd-slug2.md
- etc
- wp-content
- config.yaml
- about
posts内のファイル名は
投稿日-スラッグ.md
という形式だったaboutが固定ページで、ほかの投稿はpost配下に日付-スラッグという形式で入っている模様。
補足: config.yamlと固定ページについて
config.yamlはサイトの設定だが今回は移行先のブログはすでにあるので使わない また、固定ページは1件しかなかったのと内容を更新するつもりだったので後述の自動処理では扱っていない。
これが日本語と英語と2組ある(英語は英語勉強したい気分の時にしか にある
まずはこれを移行先の構造に合わせ以下のようなレイアウトに移動したい
- content
- post
- slug1
- index.md
- index.en.md
- slug2
- index.md
- index.en.md
- 略
- slug1
- post
一括処理用にBashを書く
最終的に出来たのがこれ
ROOT=${PWD} # hugo-exportの親ディレクトリで実行することを想定。 SRC="$ROOT/hugo-export/posts" # 移動元のディレクトリ DST="$ROOT/content/posts" # 移動先のディレクトリ cd $SRC for $FILE in *.md do LEN=$((${#FILE} - 14)) # スラッグ未設定の場合は日付だけだったので、判別する。 if [[ $LEN -eq 0 ]]; then AFTER="$DST/${FILE:0:-3}" # 日付だけの場合は仕方がないのでとりあえずそのまま移行する。 else AFTER="$DST/${FILE:11:-3}" # スラッグがある記事については日付を取り除く。 fi mkdir $AFTER echo "$FILE to $AFTER" cp "$FILE" "$AFTER/index.md" # 英語記事を移動するときはここだけ変える done
これでだいたい移動ができた。
誤算だったのは下書きで、slugがファイル名にもフロントマターにも反映されていなかった。原因が下書きだからかスラッグが未入力だったからか? とはいえブログを移行して数か月という状況で、旧ブログに残っていた下書きの必要はなさそうなので、気にせず続行する。
フロントマターの修正
Hugo-exporterはその名の通りHUGO用なので、Zolaとはフロントマター(ワードプレスで言うところの記事名とかスラッグとか、要は本文以外の情報が書いてるとこ)の書式が違う。 具体的に言うとHugo exporterの出力形式だとフロントマターはYAMLだが、ZolaはTOMLというのを使っているらしい。
出力時が以下