静的ブログジェネレーターTuzuruのベータ版をリリースした

By ainame / Published on 7 September 2025

静的ブログジェネレーターのTuzuruのベータ版(^1)としてリリースした(0.1.2)。GitHub Pagesでシンプルにブログを立ち上げたい人向けのCLIだ。 せっかく作ったのでこのページで紹介したい。

https://github.com/ainame/tuzuru

Tuzuruはいわゆる静的サイトジェネレーター(static site generator)の一種のCLIで、ブログ以外の用途を考慮してないので静的ブログジェネレーターと勝手に名乗っている。この記事もTuzuruで生成してGitHub Pageにカスタムドメインを設定してホストしている。

もしGitHub Pageでブログをホストしてみたい人がいたら試してみて欲しい。 フィードバック大歓迎。


(ロゴはGeminiで適当に生成した)

(^1)ここまではmainブランチ上で勢いよく開発してきたが、これ以降は簡易的にPRベースで開発していこうという気持ち。

特徴

一度過去に作ったHugoのブログを復活させようとして断念してTuzuruの開発を始めた経緯があるので、可能な限りシンプルに使うことを意識して設計した。特徴としては、

  • プレーンなMarkdownのみで記事を書けて直感的
    • YAML front matterのsyntaxを覚える・思い出す必要のない
    • 代わりにgit logから投稿日時やauthor名を取ってくる
  • デフォルトで多分いい感じに動く&必要な設定が最小限
    • 設定せずにトップページや年別・カテゴリ別リストが自動生成される
    • シンプルなレイアウト
  • Swiftで書かれている
    • そこそこ実行速度早い(ベンチマークしてないけど内部でGitコマンドを呼び出している箇所がボトルネックにはなりそう)
    • Linux向けにはStatic Linux SDKで静的なバイナリになっているのでインストールが簡単

デモ


こちらは、動画とは別にホストしているランダムなAI生成のデモページ。
https://ainame.github.io/tuzuru-demo/

主な機能

現状では以下のサブコマンドが存在している。

  • tuzuru - tuzuru generate が実行される
  • tuzuru init - 設定ファイル(tuzuru.json)や、テンプレート生成などプロジェクトの初期化
  • tuzuru generate - contents/ 以下においたMarkdownファイルをHTMLに変換する、リスティングページを生成する
  • tuzuru amend - Gitの歴史を書き換えずにTuzuru上での記事の投稿日時やauthor名を後で変えるための仕組み(マーカー付きのGitコミットを作る)
  • tuzuru import - Hugo向けに書かれたMarkdownを簡易的にimport
  • tuzuru serve - プレビュー用の組み込みHTTPサーバー

他にも

  • 自動でリスティングされないページが作れる(/aboutみたいなのが作れる)
  • Xのリンクを貼ると自動で埋め込み用のHTMLに変換出来る
  • プレビュー用の組み込みHTTPサーバーがHot Reloadに対応
  • CSS cache busting
  • OGタグ
  • sitemap.xmlの自動生成
  • Homebrew/npmでのインストール

GitHub Pageへの簡単デプロイ

リポジトリの設定でGitHub Pageの設定を有効にして、これを .github/workflows/deploy.yml におくだけでdeploy出来る。 ainame/tuzuruにおいてある actionを再利用できるようになっていて、 actions/checkoutainame/Tuzuru/.github/actions/tuzuru-deploy の 2 stepsだけ書けば良くなっている。

name: Deploy

on:
  push:
    branches: [main]
  workflow_dispatch:

permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    steps:
      - uses: actions/checkout@v5
        with:
          fetch-depth: 0
      - uses: ainame/Tuzuru/.github/actions/tuzuru-deploy@0.1.2

実装の中の個人的な面白ポイント

こちらに書きました

まとめ

シンプルだけどそれなりに欲しい機能が揃ったやつが出来た。 もし試してみて良かったらスター下さい。

👉 GitHub: ainame/tuzuru