静的ブログジェネレーターTuzuruのベータ版をリリースした
静的ブログジェネレーターの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を簡易的にimporttuzuru 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/checkout と ainame/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