メンテが手軽な(本当ですか?)ブログシステム
はじめに
以前のブログ
以前のブログはNext.jsで作っていました。Reactベースのフレームワークで便利だったのですが、ブログはほとんど更新しないのに依存パッケージの更新をするのが面倒になっていまいました。
![落ちるRenovate](./failing-tests.png)
![大量の、更新](./many-many-updates.png)
そこで名案が浮かびます。一つも外部パッケージを利用しないブログを作れば、パッケージの更新をしなくても良いのでは……?
Golang
私はGoをよく書いています。Goには、以下のような機能が標準ライブラリに含まれています。
- HTMLテンプレートエンジン
html/template
- HTTPサーバー
net/http
- JSONエンコーダ/デコーダ
encoding/json
方針
- ブログの中身はMarkdown
- pages以下のmdを適当にルーティング
- HTMLテンプレートをコンポーネントぽく使う
- テンプレート側でも他のテンプレートを読み込めるが、Go側で埋め込むことに。
- 設定ファイルはjson
- yamlもtomlも標準ライブラリには無いが、なぜかjsonはあるので。
実装
ひたすらMarkdownのパーサを書きます。ネストできてしまうlistがツラい。。。今回はSSGのみとして、Markdownのパースは初回だけ行い、メモリに積んでおきました。
ディレクトリ構成
- app/app.go: HTTPサーバ
- pkg/mdparser/: MarkdownをパースしHTMLに変換
- pkg/framework/: HTMLテンプレートを使ってサイト構造を決定
- pages/: ページごとのMarkdownファイル
結果
go.mod(jsでいうpackage.json)は以下のようになりました。普通のプロジェクトならバージョンの下に依存パッケージが続いていますが、依存パッケージは空です。Go言語のアップデートにだけ追従すれば良いです。
![依存](./gomod.png)
PRは、こうなりました。
![PR](./onepr.png)
おわりに
自作Markdownパーサのお手入れの方が苦しいかもしれん。。。