MkItYs

MkItYs > アプリの制作・サイトの統合 > 

images

静的サイトジェネレータを作る(4つの基本フィルタ):sh, PowerShell

images

- 2022.06.19

静的サイトジェネレータは、4コの短いスクリプト(それぞれ1行でOK)だけで作ることができます。

ウェブブラウザの限界


ウェブブラウザだけでも、ソース文書(XML)とスタイル文書(XSL)を合わせて、表示することはできますーーヘッダやフッタを共有したり、独自タグを作ることはできるわけです。

ただこの場合、<編集がページ単位になる>という制約は、どうしてもつきまといます(サイトの記述全体の見とおしが悪くなる)。いちばん大きな問題は、ウェブブラウザでしか表示できない、という点ですーーこれでは、ほかのメディア(電子書籍やPDFなど)に対応できません。

静的生成のための4コのスクリプト


そうなると、<ページ(ファイル)を生成するしかけ>はどうしても必要になります……とはいえじつは、そのしかけは、フィルタ/デバイスとパイプラインを使えば、とてもかんたんに作ることができます。

まず、たんに静的にページを生成するだけなら、次のような4コのフィルタ/デバイスがあれば済みます:

getcon
setcon
appxsl
appexe

それぞれの役割は:

getcon …… ファイルを読み込む
setcon …… ファイルに書き出す
appxsl …… XSLを適用する
appexe …… シェルを適用する

しかもその4コフィルタ/デバイスは、シェルを使えばどれも<1行>で書けるという、あっけないほどシンプルなものです:[※1][※2]

getcon:
cat $1
setcon:
cat > $1
appxsl:
xsltproc -
appexe:
sh -

どうでしょうか? これはいわゆる<静的サイトジェネレータ>の基本となるパーツですが、これだけシンプルな構造にできるのです。

以降は、この4コのフィルタ/デバイスを使って、さまざまな媒体の生成のしかたを紹介していきます。


※1
ただしじっさいにここで提供するシェルスクリプトは、(1行でなかく)数行のスクリプトになっていますーーこれは、各OSで共通の操作を実現する、不要な処理をさせない、といった制約からくるものですーーなので個人的に使うだけなら、ここに書いた1行のスクリプトでも十分に使いものになります。
※2
シェルがフィルタになっているので、シェルのプログラミングが必要になると考えるかもしれません。しかしその必要はありません。なぜなら、プログラミングで必須となる反復や分岐といった処理は、すべてXSLで書けるからですーーつまりXSLで、シェルに与えるパイプラインのソースコードのリストを生成すればよい、ということです(メタプログラミング)……じっさい数百ページ程度のサイトなら、このXSLによるシェルのソースコード生成(appxsl)と、シェルの適用フィルタ(appexe)で、生成できます(ただしそれ以上の大きなサイトになれば、相応のプログラミング言語によるフィルタとデバイスが必要になってきます)。