Astro と Quarto の技術スタック比較
この CMS(issues-quarto-cms)は、元々 Astro で作られていました。ここでは 「技術スタック」という視点で Astro と Quarto を比較し、どういう場面でどちらを選ぶべきかを整理します。
両者の立ち位置がそもそも違う
| 分類 |
Web フレームワーク(静的サイトジェネレーター) |
文書エンジン(計算対応ドキュメントツール) |
| 得意分野 |
Web サイト・アプリっぽい UI の構築 |
論文・レポート・教材・ブログの執筆 |
| 設計思想 |
「島(islands)アーキテクチャ」でページを最適化 |
「1原稿 → 多形式出力」の再現可能な執筆 |
つまり 「Web アプリを作るための道具」vs「文章と計算をまとめる道具」という違いが根底にあります。
言語・エコシステム
| メイン言語 |
JavaScript / TypeScript |
YAML + Markdown(本体)+ R / Python / Julia / JS(実行) |
| ランタイム |
Node.js |
変換は Pandoc / Deno。実行は R / Python 等のカーネル |
| パッケージ管理 |
npm(世界最大の JS エコシステム) |
pip / CRAN / Julia レジストリ |
| コミュニティ |
フロントエンド寄り(React 等との連携が豊富) |
データサイエンス・学術寄り(Posit 製) |
レンダリングモデル
| ページ生成 |
コンポーネント(.astro)をビルド時に HTML 化 |
.qmd(Markdown)をビルド時に HTML / PDF 等へ変換 |
| 動的 UI |
コンポーネントの「島」を部分ハイドレーション |
基本は静的。Observable JS で一部インタラクティブ |
| スタイリング |
Tailwind / CSS / コンポーネント内 CSS |
テーマ(bootswatch)+ カスタム CSS |
| 型安全なコンテンツ |
Content Collections(Zod で frontmatter 検証) |
なし(スクリプト側で検証) |
コード実行(最大の差)
import matplotlib.pyplot as plt
labels = ["Astro", "Quarto"]
times = [1, 5]
plt.bar(labels, times)
plt.ylabel("コード実行コスト(相対)")
plt.show()
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/IPython/core/pylabtools.py:158: UserWarning: Glyph 12467 (\N{KATAKANA LETTER KO}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/IPython/core/pylabtools.py:158: UserWarning: Glyph 12540 (\N{KATAKANA-HIRAGANA PROLONGED SOUND MARK}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/IPython/core/pylabtools.py:158: UserWarning: Glyph 12489 (\N{KATAKANA LETTER DO}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/IPython/core/pylabtools.py:158: UserWarning: Glyph 23455 (\N{CJK UNIFIED IDEOGRAPH-5B9F}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/IPython/core/pylabtools.py:158: UserWarning: Glyph 34892 (\N{CJK UNIFIED IDEOGRAPH-884C}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/IPython/core/pylabtools.py:158: UserWarning: Glyph 12473 (\N{KATAKANA LETTER SU}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/IPython/core/pylabtools.py:158: UserWarning: Glyph 12488 (\N{KATAKANA LETTER TO}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/IPython/core/pylabtools.py:158: UserWarning: Glyph 65288 (\N{FULLWIDTH LEFT PARENTHESIS}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/IPython/core/pylabtools.py:158: UserWarning: Glyph 30456 (\N{CJK UNIFIED IDEOGRAPH-76F8}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/IPython/core/pylabtools.py:158: UserWarning: Glyph 23550 (\N{CJK UNIFIED IDEOGRAPH-5BFE}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
/opt/hostedtoolcache/Python/3.12.13/x64/lib/python3.12/site-packages/IPython/core/pylabtools.py:158: UserWarning: Glyph 65289 (\N{FULLWIDTH RIGHT PARENTHESIS}) missing from font(s) DejaVu Sans.
fig.canvas.print_figure(bytes_io, **kw)
| R / Python 実行 |
不可(MD のみ) |
実行して図・表を自動埋め込み |
| 結果の再現性 |
手動でスクショを貼る |
コードを直すと自動で再計算 |
| データ分析記事 |
苦手 |
本領 |
出力形式
| HTML(Web / ブログ) |
◎ |
◎ |
| PDF / Word / PowerPoint |
不可 |
◎(--to pdf/docx/pptx) |
| スライド / 書籍 |
別構成が必要 |
◎(reveal.js / book) |
デプロイ・運用
| 出力 |
dist/ |
_site/(この CMS はここ) |
| ホスティング |
Pages / Netlify / Vercel / 任意 CDN |
Pages / 任意(静的 HTML) |
| 検索・sitemap・RSS |
プラグインで実装 |
標準装備(設定のみ) |
どちらを選ぶか(使い分け)
- Web アプリ寄りのサイト(ログイン・フォーム・SPA 的な体験)→ Astro
- データ分析・コード付き記事、論文、レポート → Quarto
- ブログだけで、とにかく軽く速く → どちらでも。Astro は型安全、Quarto は検索・多形式がお得
- GitHub Issues/Discussions を CMS にしたい → 両対応できるが、コードを記事に載せたいなら Quarto が有利
まとめ
- 技術スタックで見ると 「JS の Web フレームワーク」と「計算対応の文書エンジン」は住み分けが明確
- この CMS は「執筆 + コード実行 + 多形式」を活かして Quarto 側を採用
- どちらか一方が「正解」ではなく、作るものの性質で選ぶのが正しい