Mermaid.jsのスマホ崩れを解決!Astro専用図解コンポーネント3種自作とAI執筆CLI高速化
技術記事や解説ブログで図解を入れる際、真っ先に候補に挙がるのが「Mermaid.js」です。ところが実際にスマホと 27 インチ 5K モニターの両方で表示を確認してみると、「横長フロー図がスマホ画面で豆粒のように縮小されて読めない」「AI に書かせると括弧や記号で構文エラーを連発する」「クライアント JS の描画待ちで画面がガタつく」といった悩みが尽きません。
結論からお伝えすると、ブログ記事に登場する図解の 9 割は 「フロー図・比較カード・階層スタック」の 3 パターンに集約でき、これらをクライアント JS ゼロの Astro 専用 HTML/CSS コンポーネントとして自作するのが、視認性・表示速度・AI 執筆効率のすべてで圧勝する最適解 です。本記事では、スマホで自動的に縦積み&矢印回転する CSS 設計と、AI の手戻りをゼロにした執筆 CLI ツールキットの全貌を公開します。
-
【Astro 6×5K Retinaの罠】Mermaid図解の極小化・文字切れとPlaywright『WebP 16,383px上限クラッシュ』を解決した記録 : 複雑な分岐グラフで Mermaid を併用する際の SVG スケーリング補正と、実機検証時の画像上限バグ対策をまとめた姉妹編です。
-
【AIクォータ半減時代の防衛術】なぜAIエディタはすぐ上限に達するのか?190会話ログ解剖とSQLiteキャッシュ最適化で消費を劇的削減した全記録 : AI がお手本探しでトークンを浪費する原因を突き止め、ツール化で消費量を激減させた検証記事です。
-
【SEO×AI検索の両取り戦略】Astroで『llms.txt・ai-corpus.jsonl・citation構造化データ』を自動生成してAIに引用されるサイトを作る実装ガイド : 図解内のテキストまで検索エンジンや AI クローラーに 100% 意味理解させるための構造化戦略です。
-
Mermaid 図解をスマホで見たときの 「文字が小さすぎてピンチズームしないと読めない問題」 を根本から解決したい方
-
ライトモード/ダークモードの切り替えに瞬時に追従し、JavaScript 読み込みゼロ(CLS ゼロ)で動く美しい図解部品 を Astro で作りたい方
-
AI エディタに記事を書かせる際、お手本探しのファイル読み込みや書式ミスの手直し往復をゼロにしたい 方
Mermaid図解がスマホとAI執筆で抱える4つの限界
Mermaid はテキストから複雑なネットワーク図やシーケンス図を描ける素晴らしいライブラリですが、「Web 記事の本文中で誰にでも読みやすく見せる」という用途に限ると、SVG 固定座標レンダリングゆえの構造的な弱点があります。
| 評価ポイント | 従来の Mermaid.js(クライアント描画) | 自作 Astro 図解コンポーネント 3 種 |
|---|---|---|
| スマホでの可読性 | 横長図解が画面幅に合わせて縮小され豆粒文字になる | 自動で縦積みに変形し、矢印も下向きへ 90 度回転 |
| 表示速度・CLS | ランタイム JS 読込+描画計算まで高さが確定しない | ビルド時 HTML/CSS 出力(JS ゼロ・CLS ゼロ) |
| テーマ切替・SEO | ダーク切替時に再描画が必要・SVG 内文字が扱いにくい | CSS 変数で瞬時に色追従・純粋な HTML として検索対象 |
| AI 執筆との相性 | 括弧 () やスラッシュで構文エラーを起こしやすい | Props と通常文章だけで書けるため構文ミスが激減 |
パソコンの大きな画面で作っとるときは「おお、カッコいい図ができた!」と満足しとるんじゃけど、あとから iPhone で自分の記事を開いてみたら、米粒みたいな文字になっとって愕然とするんよね。
まさにそこが一番の盲点なんです!複雑な網目状のグラフなら Mermaid の出番ですが、記事で伝えたい「手順の流れ」「A と B の違い」「3 階層の仕組み」なら、CSS グリッドとコンテナクエリで組んだ Astro コンポーネント に置き換えるだけで劇的に読みやすくなりますよ!
クライアントJSゼロのAstro専用図解3種の設計
display:contentsとコンテナクエリの妙技
自作したのは FlowDiagram(手順・因果フロー)、CompareDiagram(2 列/3 列の対比カード)、LayerDiagram(上下階層のアーキテクチャ図) の 3 種類です。特に工夫した CSS 設計の急所が 2 つあります。
1 つ目は、横並びフロー図における 「カード幅の完全 1:1 均等配分」 です。各ステップ部品(FlowStep)の中に「カード本体」と「右向き矢印コネクタ」をセットで入れ、最後のステップだけ CSS の :last-child .flow-connector { display: none; } で矢印を消すと、そのままでは最後のステップだけが矢印のぶん狭くなってカード幅が不揃いになります。
そこで横並び時は親ラッパーに display: contents を指定して DOM の箱をレイアウト上透過させ、全カード本体に直接 flex: 1 1 0%; min-width: 0; を効かせることで、矢印の幅を除いた残りスペースが全カードへ寸分違わず均等配分されるようにしました。
/* FlowDiagram.astro(抜粋:ラッパーを透過して全カード幅を1:1均等化) */
.flow-diagram {
container-type: inline-size;
}
.flow-diagram.is-horizontal .flow-track > :global(.flow-step-unit) {
display: contents;
}
.flow-diagram.is-horizontal .flow-track > :global(.flow-step-unit .flow-card) {
flex: 1 1 0%;
min-width: 0;
}
.flow-track > :global(.flow-step-unit:last-child .flow-connector) {
display: none;
}
/* コンテナ幅600px以下(または4ステップ以上で760px以下)なら自動で縦積み+矢印90度回転 */
@container (max-width: 600px) {
.flow-diagram.is-horizontal .flow-track {
flex-direction: column;
}
.flow-diagram.is-horizontal .flow-track > :global(.flow-step-unit) {
display: flex;
flex-direction: column;
}
.flow-diagram.is-horizontal .flow-track > :global(.flow-step-unit .flow-arrow-svg) {
transform: rotate(90deg);
}
}
2 つ目は、画面全体の幅(@media)だけでなく図解自身の横幅を見る CSS コンテナクエリ(container-type: inline-size) と :has(> :nth-child(4)) の併用です。これにより、ステップ数が 4 つあって横幅が窮屈になったときだけ、PC の狭いウィンドウでも自動的に縦積みレイアウトへ美しく切り替わります。
実演!フロー図・比較図・階層図の3パターン
実際にこのページ上で 3 つのコンポーネントを動かしている実演サンプルをご覧ください(スマホでご覧の方は縦積み+下向き矢印に、PC でご覧の方は横並びやマルチカラムに自動最適化されています)。
まずは ① FlowDiagram + FlowStep です。tone 属性(default / accent / danger / success)と矢印ラベル(arrow)を渡すだけで、視線が自然に流れるステップ図になります。
CLIコマンド1発でフォルダ、アイキャッチWebP、テンプレートを準備します。
Markdownと3種の図解コンポーネントを使って、構文エラーなく本文を記述します。
見出し文字数・太字スペース・画像サイズの違反がないかを15ミリ秒で自動検査します。
次に ② CompareDiagram + CompareCard です。従来品との比較や「NG 例 vs OK 例」を色分けバッジ付きで並べるのに最適です。
- 過去記事を何本も開いてインポート文や書き方を探す時間がかかる
- 見出しの30文字超過や太字スペース抜けにデプロイ後まで気づけない
- 最初から正しいimport文と構成が入った状態で執筆に集中できる
- 保存直後に機械検査が走り、公開前の手直し往復がゼロになる
そして 3 つ目が ③ LayerDiagram + LayerBox です。システム構成や優先順位の階層を表現でき、中間レイヤーだけを columns={2} で横 2 分割するといった柔軟なレイアウトにも対応しています。
ブラウザがHTMLを受け取った瞬間に完成形で描画され、レイアウトシフトが一切発生しません。
記事種別ごとの必須枠と図解importを標準完備します。
見出し・タグ閉じ忘れ・画像寸法上限を即座に判定します。
AIの無駄な往復をゼロにする執筆CLIツールキット
ミリ秒単位の書式検査とアフィリエイト自動登録
美しい図解コンポーネントを作っただけでは、まだ半分です。AI エディタと一緒に何十本もの記事を執筆していると、AI が毎回「既存の記事はどう書いているかな?」と過去の .mdx を 5〜10 ファイルも読みに行ったり、手作業でアフィリエイト定義ファイルを編集してカンマ抜けを起こしたりといった 「非本質的な往復コスト」 が発生します。
そこで当サイトでは、templates/ フォルダにマスター原型を置いた上で、定型作業をすべて 1 コマンドで片付ける Node.js 製 CLI scripts/article_toolkit.mjs を整備しました。
-
scaffold(初期骨格・画像の一括準備) : スラッグと元画像を渡すだけで、ディレクトリ作成、アイキャッチ画像のアップスケールなし.webp変換(sharp駆動)、会話履歴 DB からのpubDate自動解決、末尾の猫画像の配置までを 1 秒で完了させます。 -
add-affiliate(商品カードのワンコマンド登録) : 商品名と検索キーワードを渡すだけで、Amazon・楽天市場・Yahoo! ショッピングの二重 URL エンコード済み検索リンクを生成し、中央辞書(src/data/affiliates/index.ts)へのimport追加までアトミックに完結させます。 -
check(15ミリ秒のプリフライト書式検査) : フルビルド(約 30 秒)を回す前に、わずか 0.015 秒で「H2/H3 見出しの文字数超過・先頭番号混入」「日本語と太字マーカーの半角スペース」「GadgetSectionの閉じ忘れ・入れ子」「元画像サイズを超えたwidth指定」「未登録のアフィリエイト ID」を一括検出します。 -
outline(分割読み込み不要の構造マップ出力) : 長文記事を部分改修する際、見出し・枠・表・商品カードの正確な行番号マップを一瞬で出力し、AI がピンポイントの行範囲だけを読めるようにします。 -
add-related-link(既存記事への相互リンク安全注入) : 関連する複数の既存記事の「合わせて読みたい深まる関連情報」枠へ、重複チェックと自動バックアップ付きで新記事へのリンクを一括追加します。
AI さんに「気をつけて書いてね!」と毎回お願いするより、0.01 秒で見つけ出してくれる検査道具を渡してあげるほうが 100 倍確実でちね!
まさにその通りです!AI は人間のような「なんとなくの空気読み」は苦手ですが、明確な型(コンポーネント)と機械的な検査コマンド(check) を用意してあげると、驚くほど正確に一発で美しい記事を仕上げてくれるようになります。
まとめ:AIが迷わず書ける『型と道具』を先に作る
個人メディアや技術ブログを長く心地よく続けていく秘訣は、毎回の執筆で気合や手作業に頼らないことです。「スマホでも 5K でも絶対に崩れない Astro 図解コンポーネント 3 種」と「0.01 秒でミスを弾くスキャフォールド CLI」 という土台を一度作ってしまえば、あとは中身の一次検証と読者への価値提供だけに 100% 集中できるようになります。
-
導入して幸せになる人 : Astro で記事を継続発信しており、スマホでの図解の読みやすさと AI 執筆のスピード・品質を一気に引き上げたい方
-
別の選択肢が向く人 : 記事数がごくわずかで図解もほとんど使わず、標準の箇条書きと表だけで十分な方
ご自身の Astro ブログにも同様の専用図解コンポーネントと執筆 CLI ツールキットを取り入れたい方は、以下のプロンプトを最上位モデルの AI エディタへ渡してカスタマイズしてみてください。
※CSS コンテナクエリや MDX パーサーと干渉しない AST・正規表現検査の設計には高い精度が求められるため、必ず 『Gemini 4 Argon』(または同等以上の最上位推論モデル)を選択して実行してください。
以下の記事の設計を参考に、私の Astro プロジェクトへ「クライアントJSゼロの専用図解コンポーネント3種(FlowDiagram / CompareDiagram / LayerDiagram)」と「記事スキャフォールド&高速プリフライト検査CLI」を導入してください。
参照URL: https://lab.chihouzakki.com/blog/review/astro-custom-diagrams-mermaid-alternative-scaffold/
【作業ルール(厳守)】
1. まず私のサイトの既存カラースキーム(ライト/ダークモードのCSS変数)と MDX ディレクトリ構造・フロントマター定義(src/content.config.ts 等)を確認し、デザインに自然に馴染む実装計画を提示して合意を得てください。
2. FlowDiagram は横並び時に display: contents と flex: 1 1 0% で全カード幅が均等になるようにし、スマホ幅や狭幅コンテナ(@container)では自動で縦積み+矢印90度回転するレスポンシブ設計にしてください。
3. プリフライト検査CLI(checkサブコマンド)には、見出し文字数チェック、未閉じタグ検出、画像ファイルの存在確認を含め、数ミリ秒で実行できるようにしてください。 「崩れない図解の器」と「迷わない道具箱」を揃えて、毎日の執筆をもっと楽しくクリエイティブな時間にしていきましょう!

▲ 図解の崩れ直しから解放されれば、夜はぐっすり眠れます