この CMS の仕組み:GitHub Issue → GitHub Actions → Quarto → GitHub Pages

『書く場所』『変換』『生成』『公開』の4段階で、この CMS の全体像をわかりやすく説明します。
blog
Published

August 2, 2026

この CMS の全体像

このサイトは 「GitHub Issues / Discussions を原稿にする CMS(コンテンツ管理システム)」です。無料・自動・GitHub 内で完結します。

4つの役割

役割 コンポーネント やること
① 原稿 GitHub Issues / Discussions 記事を書く場所(CMS の入力画面の代わり)
② 変換 GitHub Actions + Node.js 公開ラベルの記事を API で取得し .qmd を生成
③ 生成 Quarto 一覧・個別ページ・検索を静的生成
④ 公開 GitHub Pages 生成結果を無料でホスティング

データの流れ

1. 記事を書く(Issue / Discussion)
2. status:published ラベルを付ける
3. GitHub Actions が自動で起動
   ├─ Node.js が GitHub API から記事本文を取得
   ├─ frontmatter を Quarto 用に変換して posts/{slug}/index.qmd を作成
   └─ quarto render で _site/ を生成
4. _site/ が GitHub Pages にデプロイ

なぜ「Issue を書く」だけでブログになるのか

Issue / Discussion には次の便利な機能があります。

  • ラベルで公開/非公開を制御できる
  • 編集履歴が残る(GitHub 上で全文の差分が見られる)
  • コメントで読者とやり取りできる
  • 通知GitHub App 連携が使える

つまり「専用の管理画面」を作らなくても、GitHub が管理画面の役割を果たしてくれます。

変換処理のポイント

GitHub の Issue 本文は次のように書きます(これが記事の「原稿」です)。

---
slug: my-first-post
title: My First Post
publishedAt: 2026-08-02
tags: [quarto, cms]
category: blog
---

# 本文

ここに Markdown で書く。

この frontmatter は Node.js スクリプトが読み取り、Quarto 用のフィールド(date / categories / description)に変換して .qmd を生成します。

このサイトを動かすファイル

ファイル 役割
scripts/build-from-both.mjs Issue + Discussion を取得して .qmd 生成
scripts/lib/common.mjs 変換ロジックの本体
.github/workflows/build.yml ビルド + デプロイの自動化
_quarto.yml Quarto のサイト設定

まとめ

  • 「原稿 = Issue」「変換 = Actions」「生成 = Quarto」「公開 = Pages」
  • 専用サーバー不要・無料・GitHub 内で完結
  • 記事の公開は「ラベルを付けるだけ」という手軽さが最大の利点