Richken blog

Rust製SSGの zola が早すぎて感動した

Rust製SSGの zola が早すぎて感動した

zola という Rust製の Static Site Generator (SSG) が気になったので、使ってみた。

img

この記事を書くに当たり、zolaはどのくらい認知度があるのか知りたかったので、Googleで検索(Keyword = “zola 静的サイト”)してみた。

すると、いくつも良記事を見つけることができた1ので、ここでは使用方法については触れず、

  • 辛い
  • 素晴らしい

部分のみを列挙します。

※ 『辛い部分』に書いている内容については執筆時のもので、ほぼ全てGitHub上にISSUEが立っているので、既に解決している可能性があります。

zola の辛い点・素敵な点

辛い部分

  • ビルドプロセスに介入して、カスタマイズができない
  • CSS と HTML が別ファイルなのがきつい(Reactに慣れすぎている?)
  • Tera (Template engine) のEditorとの相性(入力補完やチェックなど)が良くない
  • zolaでは、Teraの拡張子に『.html』を使用するため formatOnSave を使用しているとコードが壊れる
  • frontmatter は TOML のみで YAML は使えない
  • HTMLの出力を minify する機能がない。

ビルドプロセスに介入して、カスタマイズができない

Markdownの parse や render プロセスをカスタマイズできないため、例えば以下のようなカスタマイズができません。

  • 『末尾に半角スペース2つ』ではなく、改行は改行と扱わせたい
  • 外部リンクに noopener nofollow (& noreferrer) をつけられない
  • relative path(相対パス)で、他の markdown へのリンクが書けない。特別なフォーマットがあり、そちらで対応する必要がある。

素晴らしい部分

  • ビルドが超高速
  • HTML と CSS だけなので、サイズが小さい
  • node_modules のインストールが不要
  • パソコンへの負荷が小さい
  • shortcode が便利そう
  • GoogleのPageSpeed Insightのスコアが良い

ビルドが超高速

Gatsby.js や、素のReactや、Next.js でいくつかサイトを開発した事がありますが、 node_modules のインストールに凄まじい時間がかかる(特にGatsby.js)だけではなく、ビルドにも時間がかかります。

node_modules のインストールが不要

私はReact Nativeを普段書いていますが、React Native をやめたいと思うくらい node_modulesの仕組みが辛いです。

インストールの時間は長いし、容量を食いすぎる。

TypeScript や babel 関連だけでどれくらいになるのだろう。

GoogleのPageSpeed Insightのスコアが良い

今回 zola で作ってみようと決めたきっかけはこれ。

それぞれのツールで作られたいくつかのページに対し、 GoogleのPageSpeed Insightを使用したところ、 HUGOやzolaで作られたサイトの方が数値が上回っていました2

shortcode が便利そう

こちらは、まだ使う機会が無かったので使っていない機能

ホームページを作るときに使えそう。

他にも、今後結構使いそう。

ただ、zola にしかない機能なので、使い出すとやめられなくなるという辛みもある。

Teraのマクロがかなり便利

zola は『あり』それとも『なし』

目的
ブログの制作⭕️あり
簡単なホームページ⭕️あり
作り込んだホームページフロントエンドフレームワークを使うべし
ウェブサービスもちろん無理

やっぱりフロントエンドのフレームワークがほしい

ブログなので、『まあ良いか。』感はあります。 でも、やっぱり CSSは辛いです。

React Native と比べて、HTML + CSSは色々難しい。

zola をまた使いたいか?

もし今後、簡単なブログを作る必要があれば使いたい。

簡単なホームページは作る機会はありそうなので使うことはありそう。

Notes

  1. 例えばこれ https://another.maple4ever.net/archives/2833/

  2. ページのチョイスの問題があります。それと、Next.jsで頑張ると同じくらいのスコア(全てほぼ100)を出せるらしいです(試していません)