こんにちは、えふてぃです!
このブログはAstroで作っているんですが、
「Markdownだけだと表現の幅が狭いな…もっと自由に表現してぇー」という願望を実現すべく、AIと壁打ちした結果MDXコンポーネントを3つ追加してみました。
結果、記事の読みやすさが段違いに良くなったので、今回はその紹介をしていきますー!
📝 MDXとはなんぞや?
MDX = Markdown + JSX(コンポーネント)
普通のMarkdownとして書けるけど、その中でReactやAstroのコンポーネントも使えるという優れものです。Astroは標準でMDX対応しています!
🎯 なぜMDXコンポーネントを追加したのか
技術ブログを書いていて(まだ全然書いてないけど)、こんな課題を感じていました:
- 会話形式の説明がしたい: 「Q: ○○ってなに? A: △△です」みたいなやつ。あれをやりたくなった。
- 重要な情報を目立たせたい: 注意事項やヒントを視覚的に強調したい
- 画像にキャプションを付けたい: スクリーンショットに説明を添えたい
Markdownだけだと自由な表現が難しそうだ…。
そこで、3つのカスタムコンポーネントを作りました!
💬 1. ChatBubble(チャット吹き出し)
会話形式で説明できるコンポーネントです。実際に使ってみますね:
ChatBubbleってどんな時に使うんですか?
FAQや対話形式の説明に最適です!例えば「こういう質問がよくあるよね」っていう内容を会話形式で書くと、読者が理解しやすくなります。
確かに!普通の文章より読みやすいですね。
でしょう?しかも、アイコンも変えられるんですよ!
カスタムアイコンも使える
アイコンを変えるとこんな感じになります
好きな絵文字で記事の雰囲気に合わせて調整できます。今度画像をこそっと使えるようにしておこう。
使い方
MDXファイルに以下のように書くだけなのでかなりシンプル:
<ChatBubble type="user">
質問内容をここに書きます
</ChatBubble>
<ChatBubble type="assistant">
回答内容をここに書きます
</ChatBubble>
<!-- アイコンをカスタマイズする場合 -->
<ChatBubble type="user" icon="😊">
好きな絵文字を指定できます
</ChatBubble>
📦 2. InfoBox(情報ボックス)
重要な情報を目立たせたい時に使用するコンポーネントです。
ヒント(tip)- 黄色
💡 読者に役立つヒントやテクニックを書く時に使います。このコンポーネントを使うと、重要なポイントが埋もれなくなりますよ!
注意(warning)- オレンジ
⚠️ 「ここは注意が必要!」という内容を強調したい時に。読者が見落としがちな注意事項をしっかり伝えられます。
成功/メリット(success)- 緑
✅ メリットや成功のポイントを書く時に使います
✅ 箇条書きで複数のメリットを並べるのにも便利
✅ 視覚的にポジティブな印象を与えられます
危険/デメリット(danger)- 赤
❌ デメリットや避けるべき行動を書く時に
❌ 「これをやるとダメ」という内容を強調できます
❌ セキュリティリスクなどの警告にも最適
情報(info)- 青
📝 補足情報や参考資料を書く時に使います。本文の流れを邪魔せずに、追加情報を提供できるのが便利ですね。
もちろんタイトルもカスタマイズできる
デフォルトのタイトル(ヒント、注意など)を変更できます。より具体的なタイトルを付けることで、内容が伝わりやすくなります。
使い方
<!-- 基本的な使い方 -->
<InfoBox type="tip">
ヒントの内容をここに書きます
</InfoBox>
<!-- タイトルをカスタマイズ -->
<InfoBox type="warning" title="重要なお知らせ">
カスタムタイトルを付けられます
</InfoBox>
個人的な使い分けのコツ:
tip: 読者が「なるほど!」と思うような有益な情報warning: ミスしやすいポイントや注意事項success: メリット、成功事例、推奨事項danger: デメリット、避けるべき行動、セキュリティ警告info: 補足情報、参考資料、豆知識
🖼️ 3. ImageBox(キャプション付き画像)
画像に枠線とキャプションを付けて、見栄え良く表示できます。
中央配置(デフォルト)
何も指定しないと、画像は中央に配置されます。メインビジュアルや大きく見せたい画像に最適です。
左寄せ
使い方
<!-- まず画像をインポート -->
import myImage from '../../assets/blog/sample.jpg';
<!-- 中央配置(デフォルト) -->
<ImageBox
src={myImage}
alt="画像の説明"
caption="画像のキャプション"
/>
<!-- 左寄せ -->
<ImageBox
src={myImage}
alt="画像の説明"
caption="左寄せの画像"
align="left"
/>
<!-- 右寄せ -->
<ImageBox
src={myImage}
alt="画像の説明"
caption="右寄せの画像"
align="right"
/>
🎨 実際の記事で組み合わせて使う
これからの記事ではこれらのコンポーネントを組み合わせて使っていきます。
例えば1つ前に投稿した、Astroの使い方を説明する記事なら:
Astroでブログを作りたいんですが、どうやって始めればいいですか?
簡単です!公式テンプレートを使えば、すぐに始められますよ。
初めてAstroを使う方は、公式のブログテンプレートから始めるのがおすすめです。必要な機能が最初から揃っているので、すぐに記事を書き始められます。
⚠️ Node.js 18以上が必要です。node -vでバージョンを確認してください。
こんな感じで、会話形式で説明しつつ、重要なポイントをInfoBoxで強調して使っていきます。
ただ多用すると逆効果なので適度に使う予定です👍
📝 実装した時に意識したこと
✅ シンプルなAPI: プロパティは必要最小限に抑えて、使いやすさを重視
✅ 視覚的な区別: 色やアイコンで一目で種類がわかるように
✅ レスポンシブ対応: スマホでも見やすいように調整
❌ 画像の配置がうまくいかない → max-widthでPC・スマホのサイズ制限を追加してすぐに解決
まとめ
✅ 記事の可読性が大幅向上: 重要なポイントが埋もれなくなった
✅ 表現の幅が広がった: 会話形式、視覚的な強調など、表現方法が増えた
✅ 記事を書くのが楽しくなった: 「どうやって伝えようか」を考えるのが面白い
✅ 読者の反応が良くなった: わかりやすいと好評(予定)
MDXコンポーネントを追加したことで、記事の表現の幅が広がって、これからブログ書いていくのが楽しみになってきました〜!
ブログの感想や意見があれば、ぜひXで教えてください!