SSGを自作した話

誰でもフルスクラッチでツールを作る時代の話

約 4 分で読めます
目次
  1. 作ったもの
  2. これはなにか
  3. なぜ作ったのか
  4. どんな機能を盛り込んだか
  5. 逆に盛り込まなかったこと
  6. 開発の状況
  7. 開発の雑多な振り返り

作ったもの

これはなにか

bareは、ベアと読みます。「余計なものが何もない」「ありのままの」という意味らしいです。

一般向けの説明をすると、記事の元となるMarkdown形式のファイルを作成することでブログの記事のHTMLファイル、つまりWebサイトを生成するシステムです。

Static Site GeneratorでSSGと呼ばれています。

生成されたWebサイトは、単純なファイルの配布(HTML,CSS,JS)だけで完結します。昨今セキュリティ面で世間を騒がせているような、サーバーサイドでのプログラム実行や動的なデータ取得・生成を行わないため、高速で安全です。

誰でも使えるのか、という点で言えばGitHubを使いこなせる前提条件があるため、IT技術者向けです。

このサイトのように、リポジトリをフォークすることでそれぞれのサイトを作成できるようにしています。このサイト自体が、実運用を想定したデモを兼ねています。

なぜ作ったのか

以前より、脱WordPressについて検討する機会が多く、SSGは企業向けの有力な提案候補の1つでした。

脱WordPress候補は、他にもいくつかあるのですが、ここで書く内容ではないので置いておきます。結局はサイト管理の体制やなんやかんやを考慮する必要があるので、WordPressユーザーはこれで決まり!みたいなものは存在しないと考えてもらって良いし、WordPressの特定のプラグインに対する依存度が高すぎる場合などはそもそも脱却が無理ということもあり得ます。

話が逸れました。

SSGの提案を行う場合に、Astro, Next.js, Hugo, GatsbyなどのOSSでの運用が挙げられます。これらのSSGを使えば必要十分ではあります。

ただ、個人的にSSGを運用するに当たって、結局避けて通れない「ビルド環境(開発・CI/CDパイプライン)」を標的としたサプライチェーン攻撃というものがあります。これらは配布されているライブラリに依存するから、致し方ないと言えばそうですし、頻繁にアップデートを行いながら運用すれば良いだけです。

頻繁に記事を書いたり、システムのアップデートなんて、致命的に面倒くさがりな私には無理です。

そこで、最初から依存先を言語のみに絞り、ライブラリの依存なしで全部作れば良い、というなんとも胸をはってエンジニア仲間には言えないような結論に至っています。

言語は、Rustで作成していますが、深く考えてはいません。ある程度読めて書けて、信頼できる言語が良かったので、じゃあRustかー、ぐらいの感覚でした。

どんな機能を盛り込んだか

基本的にはGitHub Pagesを使って自分でシンプルなブログを構築することが目的だったので、シンプルな構成にしたつもりですが、いざ動かすところまで来たらそこそこ充実した機能があります。

  1. Markdownによる記事とページの作成
  2. RSS/Atomフィード
  3. テンプレートによるデザインカスタマイズ
  4. テーマの切り替え
  5. 年別アーカイブ、ページネーション(アーカイブのみ)、タグ、タグ一覧などを標準搭載
  6. OGP画像の自動生成(ここだけRust以外にヘッドレスChromeを使用)
  7. GitHubだけで完結できるActions(記事・ページの追加/更新、システムアップデートなどが可能)

逆に盛り込まなかったこと

以下の機能は開発時点で、実装するつもりがなかったものです。

  1. ピンバック / トラックバック
  2. Webmention
  3. コメント・ディスカッション管理
  4. プラグインシステム
  5. その他、一般的なブログで見られる付加機能全般

開発の状況

いったんはこれで最初のリリースはできたかな、と感じています。

しばらくは自分で記事を書きながら、継続的なメンテナンスができれば良いなと考えています。

開発の雑多な振り返り

技術ブログの内容自体はAIに頼らず書きますが、bareの開発はClaude Code(Opus 5.5)に全面的なサポートをお願いしていました。

最近はもう慣れてしまいました。
こちらはでき上がったコードにさっと目を通し、動作確認を行い、更なる要望を伝える、という「自分で開発する」と言ってよいのか疑問が浮かぶ作業の繰り返しです。
本当にこれで良いのかを問いたくなる気持ちがずっと隣にあります。
最終的に「欲しいものが簡単にできるんだからこれでいいんだよ!!1」という結論になっていますが、本当にこれで良いのだろうか……。

RustはいつもWASMの開発に使っていた言語で、今回のような開発に使うのは久しぶりな感じがしました。

コードは自分でほぼ書いていないのですが、出力されたコードは自分で書くよりスマートな印象があり、「もう、これでいいや」となっています。

bare自体、作った目的が自分用なので、広く使ってもらうことを想定したGitHub Actionsとかは要らない機能だったかもなーと今更思っています。

ではではいったんこれにて。

記事一覧へ戻る