PureBuilder Simply改良: WordPressインポートの強化
開発::web
序
2022年を気持ちも新たに迎えるため、Chienomiは少しリニューアルを行った。
わかりやすいところでは、メニュー関連がすべて日本語になった。 英語だと分からないのかな、と思われる行動がかなり見受けられたためだ。 また、特に英語にしておく理由もなかったため修正した。
「関連記事」という機能を追加した。 これ自体は大したことではないのだが、その対象を古い(WordPressの)記事まで拡大したことで実は大きな変更となっている。
WordPressの記事のメタデータや内容を上書きできるようにするため、pbsimply-wpimporterが従来、強引にHTMLファイルを出力していたところ、PureBuilder
Simplyによって処理されるソースファイルとして出力するように変更された。
(devel
ブランチ)
これを実現するため、PureBuilder Simply自体も「分離されたメタデータのサポート」「拡張子を問わないソースファイルの処理オプション」などを追加した変更を加えた。
なお、PureBuilder SimplyはPandoc以外のエンジンをサポートするような変更が計画されており、この関係でコードの大幅なリファクタリングを予定している。 この変更を先に取り込むかどうかは未定。
PureBuilder Simply WP Importer
PureBuilder Simply WP ImporterはPureBuilder Simplyで構築されたサイト上にWordPressの記事を取り込むためのスクリプトである。
従来は予めPureBuilder Simplyによって生成されたHTMLファイルに記事本文を埋め込むというような形式であり、Buildディレクトリに出力を合成していた。 その生成過程でPureBuilder Simplyを使うため、無関係というわけではないが、無理やり混ぜ込んでいるに過ぎないものではあった。WordPressの記事をPureBuilder Simplyで直接管理できるわけではないからだ。
今回の変更で、WP ImporterはPureBuilder Simplyのソースファイルを出力するようになった。つまりSourceディレクトリに対して出力する前提になった。
これを実現したのは、Pandocが--metadata-file
という別ファイルのメタデータを取り込む機能を持つようになったためだ。
従来もそのようなことは不可能ではないが、割と汚い形で実現するものであった。
今回の変更では、WP Importerはメタデータファイルと記事本文を出力する。
メタデータファイルはWordPress記事のエクスポートデータに基づいてセットされるものであり、記事本文はHTMLまたはplain(通常Markdownとして解釈される)のファイルである。
従来、PureBuilder
Simplyはメタデータを必須とすることもあり、MarkdownまたはReSTructured
Textに制限されていた。
だが、分離されたメタデータファイルにメタデータを書くことができ、またソース形式の指定もできるため、-X
オプションによってこの制限を除外できるようになった。
基本的な使い方
まず、WordPressから記事のエクスポートを行い、XMLファイルを得る。
(例えばchienomi.WordPress.2019-10-13.xml
である)
これを適当なエクスポート処理用のディレクトリに配置する。
そしたらwp-importer.yaml
を書く。
通常はoutdir
とsourcefile
だけ書けば良い。
outdir
は出力するベースディレクトリを書く。
sourcefile
はエクスポートファイルのパスだ。
こんな感じ。
---
outdir: ../Source
sourcefile: "chienomi.WordPress.2019-10-13.xml"
それ以外についてはREADMEを読んでほしい。
あとはwp-importer.rb
を実行するだけで良い。
オーバーライド
overrideはエクスポートファイルに手を加えることなく、WordPress記事を編集するための機能だ。
巨大なファイルであるエクスポートファイルの編集は骨が折れるので、そのようなことをしなくても管理しやすい形でWordPress時代の記事に手を加えられるようにしている。
ただし、このオーバーライドは部分的な修正ではなく、全体の修正を意図していることに注意してほしい。 特定のデータだけを更新することはできるが(例えばメタデータを追加できる)、記事本文を更新する場合はその全文が必要である。
方法はおおまかに2つあり、YAMLで書く方法とMarkdownで書く方法がある。
YAMLで書く場合は./override.yaml
にまとめて書くか、./override.d/
以下に分けて書く(自動的にマージされる)かを選ぶことができる。
ここでは例としてhttps://example.com/archives/x/y/100
という記事をオーバーライドする方法について説明しよう。
記事のパスは、ドメイン部を除外した/archives/x/y/100
となる。
もしpathprefix
を設定している場合はそれが追加されるが、通常は必要ないはずだ。
(サーバーがこれらのファイルを直接デリバリーできない場合、使うと便利かもしれない。)
この記事のタイトルを修正したい場合は、YAMLファイルに次のように書く。
---
/archives/x/y/100:
title: ほげほげ記事
overrideの内容はマージされるため、該当のキーだけを設定すれば良い。
本文を書き直したい場合はarticle_body
に書く。
---
/archives/x/y/100:
title: ほげほげ記事
article_body: |-
# ほげ
ほげほげ
ほっげほげ
元記事はHTMLで書かれていたが、今回はReSTで書いた、というような場合はinput_format
を指定することで元記事と異なるソース形式を指定できる。
---
/archives/x/y/100:
title: ほげほげ記事
input_format: rst
article_body: |-
###################
ほげ
###################
ほげほげ
ほっげほげ
記事をMarkdownで書き直す場合はMarkdownファイルで書くのが便利だ。
この場合マージされるのはfrontmatterだが、特別なものとしてwp_path
というキーが必要になる。
これはoverrideされる対象記事を指定するために必要とされるものである。
---
wp_path: /archives/x/y/100
title: ほげほげ記事
---
# ほげ
ほげほげ
ほっげほげ
ちなみに、自動的にwpimported: true
がセットされ、overrideされた場合はwpoverrided: true
もセットされる。
この機能を使い、より自然な形でoverrideを行えるようになり、またインポートされた旧記事を明記することができるようになった。
むすび
WordPressのユーザーが、よりPureBuilder Simplyに移行しやすくなった。
以降後の編集に関しては特殊なテクニックを要したが、それもなくなり、実用的だ。
まだWordPressを使っている方も、これを機にPureBuilder Simplyを使ってみてほしい。