なんじゃくにっき

プログラミングの話題中心。

GitHub Pagesに使う静的サイトジェネレーター(SSG)比較

概要

以前から静的サイトジェネレーター(SSG)は使っていたんですが、最近特にGithub Pagesにデプロイする用のは何が良いかなーって探していました。

で、色々動かしてみたりしましたが、自分のやりたいことに一番合ってたのはAstroということになりました。

要件

自分が求めている要件は以下

  • 基本はHTML吐いてくれる(ほぼ空のHTMLにjsで描画するのではなく)
  • React Componentを使いたくなったら使える
  • configはあまり書きたくない
  • 動的な部分はTypeScriptで書けてhot reloadが欲しい

Jekyll

Github Pages標準です。

Ruby製だし慣れているのでたまに使っています。JavaScript動かさない場合には楽に動かせて良いんですが、改めて調べてみました。

Viteと一緒に使おうと思うと、jekyll-viteというgemを使えるんですが、

GitHub - ElMassimo/jekyll-vite: ⚡️🩸 Use Vite.js in Jekyll as your assets pipeline

とりあえずローカルで立ち上がるまではサクッと行きます。

そこから先のことをやろうとすると、gemがあまりメンテされていなくドキュメントも少ないので結局vite-rubyとjekyll-viteのソースを読みながらconfigを書いていかないといけないのがつらくなってきました。

で、コンテンツを書いているのかconfigを書いているのか分からなくなってきたのでやめました。

Next

例は多く見つかりますがGithub Pages関係ないところでお仕事で使ったことあり、仕事とは違うことしたいので今回はスキップ。

Gatsby

GitHub - gatsbyjs/gatsby: The best React-based framework with performance, scalability and security built in.

前からちょっと使っていたんですが、React 18にアップデートしたらTypeScriptの型エラーが出るようになってしまいました。(動作自体はするけど型エラーが出続ける)

gatsby -> reach-router -> prop-types -> react-is

の依存でreact-isのバージョンとreactのバージョンが違うと型エラーになるらしいけど、reach-routerもprop-typesも開発止まっててなんともならんということで諦めました。

Hugo

The world’s fastest framework for building websites | Hugo

Go製。あまりViteと組み合わせてGithub Pagesにデプロイしている人を見つけられなかったので断念。

Docusaurus

Build optimized websites quickly, focus on your content | Docusaurus

meta製でReact前提だし、デザインのカスタマイズがしづらそうだったのでちょっと敬遠。

Astro

https://astro.build/

ごく最近までノータッチだったんですが、触ってみてええやん!ってなりました。

今回自分が要件として挙げていたものをほぼ満たしています。

あえて言うなら、styleがデフォルトではテンプレートにベタ書きになっているので別ファイルに切り出したりtailwind入れたりしようと思います。

試しに作ったもの

適当にガチャガチャやりました、だけだと面白みがないので一応役に立つものを作ってみました。

リポジトリ

https://github.com/nanjakkun/hyattoku

Github Pages ↓

https://nanjakkun.github.io/hyattoku/

QRコードが作成できます。それだけ。

QRコード生成

リポジトリ名は百徳とか偉そうな名前ついてますがまだ一徳しかありません。

百個機能付く日は来るのか・・

(最初jittokuって名付けようと思ったんですが、pythonのパッケージであるのを思い出してやめました)