すべての記事

GitHubに置くだけのブログ自動読み込みを実運用して分かったこと ──「動く」と「使える」は別だった

GitHubに置くだけのブログ自動読み込みを実運用して分かったこと ──「動く」と「使える」は別だった

GitHubに置くだけのブログ自動読み込みを実運用して分かったこと ──「動く」と「使える」は別だった

GitHubに記事ファイルを置いたら、Next.jsのサイトが自動で拾って、一覧もサイトマップも勝手に増える。 これ、思想としてはかなり強いです。

正直、最初はこう思いました。
「記事を置いたら自動で反映されるブログ基盤が最適解では?」

実際に僕もそれをやりました。PoCとして動かすところまでは、わりと早い。

ただし、そこで終わりじゃなかった。
“思ったより簡単ではなかった”のは、技術が難しいからではなく、 運用に入った瞬間に「壊れ方」が露出するからでした。

  • 自動化 = 楽
  • Markdown/MDX = 正義
  • 表示された = 運用できる

なぜそれが起きるか(構造)

PoCは「動くか」を見る。本番は「壊れても回るか」を問う

自動読み込みのPoCは、だいたいこうです。
「ファイルを置いた → 記事が出た → OK」

でも運用は違う。運用の問いはこうです。
「増え続ける記事を、壊さず、迷子にせず、原因不明にせず回せるか」

この差分が、見えないコストになります。 そしてこのコストは、たいてい“最後にまとめて請求”されます。

本当にキツいのは「壊れる」ことより「理由が分からない」こと

記事が崩れる・出ない・一覧だけ欠ける。 これ自体もキツいですが、よりキツいのは原因が分からない状態です。

つまり問題は「技術の欠陥」ではなく、設計の問題でした。 失敗を前提に設計されていないと、失敗した瞬間に調査コストが爆発します。

今回試した構成(事実だけ)

ここは評価しません。あくまで「何をやったか」だけを書きます。

  • GitHubに記事ファイルを置く
  • Next.js(App Router)で記事を自動検出する
  • 自動インデックス(一覧生成)
  • 自動サイトマップ(記事追加に追従)
  • HTML / MDX の両対応を試行

PoC段階では「動く」までは到達できた。 ただしそれは「運用で回る」ことを意味しなかった。

PoCでは見えなかった問題が、運用で一気に露出する

記事は出る。でも壊れる

自動読み込みは「出す」こと自体はそこまで難しくない。 問題は、出た記事が一定の品質で出続けることでした。

  • レイアウトが崩れる
  • 表が崩れる(または横幅で破綻する)
  • 見出し階層が崩れ、読みやすさとSEO/A11yが落ちる

自動取得が成功しているか失敗しているか分からない

これが一番きつい。 「表示されない」状態が起きたとき、なぜ表示されないのかが分からないと詰みます。

JSONの形が少し変わるだけでUIが壊れる

自動処理は、少しの揺れに弱い。 たとえばメタ情報のキーが揺れる、空文字やnullの扱いが揺れる、配列の形が変わる。 それだけで一覧表示や詳細ページが壊れます。

問題はフレームワークの限界ではなかった。 失敗を前提に設計していないと、運用で破綻する。

HTMLとMDXを両方使って分かった“向き・不向き”

ここで結論を急がない方がいいです。 HTMLとMDXは「優劣」ではなく「向いてる用途」が違う。

HTMLの強み(運用で効く)

  • 壊れにくい(解釈の余地が少ない)
  • 表が安定しやすい
  • SEO/A11yを制御しやすい(見出し・代替テキスト・構造が固定できる)

MDXの強み(制作で効く)

  • 書くのは楽
  • コンポーネント連携がしやすい

MDXの落とし穴(自動化と相性が悪いところ)

  • 表崩れが起きやすい(表現自由度が高い分、統制が難しい)
  • 記法ミスが実行時まで分からないケースがある
  • 自動処理(取り込み・変換・整形)で“例外ルール”が増えやすい

仮説:「記事数が増え、運用負荷が問題になるほど、HTMLの安定性が効く」。 逆に、表現の自由度が価値そのものならMDXが効く。

自動読み込みで重要なのは、技術より“壊れ方の設計”

自動化は、成功すると静かに価値を出します。 でも失敗すると、原因不明のまま時間を吸い続ける。 だから最初にやるべきは、派手な機能追加じゃなくて壊れ方の設計でした。

設計ポイント(ベストプラクティスの芯)

  • 成功/失敗がUIで分かる(最低限、一覧やビルドで検知できる)
  • JSONの形を1つに決める、または揺れを吸収する(互換レイヤーを持つ)
  • 記事側に副作用を入れない(外部JS/CSSや不確実な依存を避ける)
  • 表・画像・見出しのルールを最初に固定(自由を与えるほど運用が壊れる)
  • 「楽に書ける」より「壊れない」を優先する

「書きやすさ」を先に最大化すると、後で「壊れにくさ」を取り戻すのが地獄になります。 なぜなら、記事が増えた後にルールを変えるのは“移行プロジェクト”になるからです。

最終的に採用したブログ基盤のベストプラクティス

ここで回収します。
「動く」だけなら色々できる。でも僕が欲しかったのは“使える”状態でした。

  • HTMLを“正”として扱う
  • MDXは限定用途(表現が価値になるページだけ)
  • 表は必ずHTML(崩れにくさを優先)
  • 記事は単一ファイルで完結(依存を増やさない)
  • 自動処理は「失敗前提」で設計(失敗を検知できる形にする)

自動化で得たいのは「楽」ではなく、 書くことに集中できる状態です。 その状態は、最初のルール固定でほぼ決まる。

この方式が向いているか判断するチェックリスト

採用するかどうかは、あなたが決めていい。 ただし、判断に必要な論点だけはここに置いておきます。

チェック(Yes/NoでOK)

  • 記事数は増える(増え続ける)見込みがある
  • 外部連携(RSS/取り込み/変換/自動分類など)がある
  • 表や図が多い(崩れると致命傷)
  • 将来、書く人が自分以外になる可能性がある
  • 「表示されない理由が分からない」状態を許容できない
状況 おすすめ 理由
記事が増える / 運用負荷が怖い HTML正 + ルール固定 壊れにくさと再現性が効く
表や構造が重要(仕様書・比較表など) 表はHTML固定 崩れが運用事故になる
表現の自由度が価値(凝った演出・埋め込み) MDX限定採用 自由のコストを払える範囲で
とにかく早く書きたい(短命コンテンツ) MDX寄りも可 運用寿命が短いなら移行コストが小さい

意思決定フロー(文章)

  1. 記事が増えるか? → 増えるなら「壊れにくさ」を優先する
  2. 表や構造が多いか? → 多いなら表はHTML固定
  3. 失敗検知が必要か? → 必要ならUI/ビルドで成功/失敗を見える化する
  4. 自由度が価値か? → 価値ならMDXは限定用途で使う
  5. ルールを固定できるか? → 固定できないなら自動化のコストが上がる

まとめ

自動化は目的ではありません。
「書くことに集中できる状態」を作るための手段です。

その状態を作る鍵は、技術選定より最初のルール固定でした。
「楽に書ける」より「壊れない」。ここを先に決めると、後がずっと楽になります。


 

必要になったときの参照用に置いてあります。押し付けません。