Disclaimer: This article was written by AI and may contain inaccuracies or errors.
Table of contents
Open Table of contents
はじめに
マークダウンで技術文書やブログを書いていると、「ここは特に注意してほしい」「これは重要なヒント」といった情報を視覚的に目立たせたくなることがあります。
Obsidianというノートアプリでは、以下のような記法でコールアウト(callout)と呼ばれる装飾ブロックを作成できます:
> [!note] 覚えておきたいこと
> ここに本文を書きます
このようなコールアウト記法を、通常のマークダウン処理でも使えるようにしてくれるのが remark-callout です。
今回、実際にこのプラグインを試してみたので、セットアップから動作確認までの過程をレポートします。
remark-callout とは
remark-calloutは、remark(マークダウンパーサー)のプラグインで、Obsidian風のコールアウト記法を解析してHTMLに変換してくれます。
主な特徴
- Obsidian互換の記法 -
> [!type] titleの形式をサポート - 柔軟なHTML出力 -
data-*属性を使った構造化されたHTML - 折りたたみ対応 -
> [!note]-や> [!note]+で折りたたみ可能なブロックを作成 - カスタマイズ可能 - アイコンやスタイルを自由に設定できる
- 複雑なコンテンツ対応 - コードブロック、リスト、複数段落などもコールアウト内に含められる
セットアップ
インストール
まず、パッケージをインストールします:
npm install @r4ai/remark-callout
または
pnpm add @r4ai/remark-callout
Astroでの設定
Astroプロジェクトで使う場合、astro.config.ts にプラグインを追加します:
import { defineConfig } from "astro/config";
import remarkCallout from "@r4ai/remark-callout";
export default defineConfig({
markdown: {
remarkPlugins: [
// 他のプラグイン...
remarkCallout,
],
},
});
これで、マークダウンファイル内でコールアウト記法が使えるようになります。
実際に試してみる
1. 基本的なコールアウト
まず、シンプルなコールアウトを試してみました:
> [!note]
> これは note タイプのコールアウトです
このマークダウンは以下のHTMLに変換されました:
<div data-callout data-callout-type="note">
<div data-callout-title>Note</div>
<div data-callout-body>
<p>これは note タイプのコールアウトです</p>
</div>
</div>
data-callout-type 属性にタイプ名が設定されるので、CSSでスタイリングしやすい構造になっています。
実際にレンダリングされた例:
これは note タイプのコールアウトです。この記事で remark-callout プラグインが正しく動作していることを確認できます。
2. 様々なタイプ
いくつかのタイプを試してみたところ、以下のタイプが動作することを確認できました:
note- 一般的なメモinfo- 情報tip- ヒントやコツimportant- 重要な内容warning- 警告caution- 注意
> [!tip]
> ここに便利なヒントを書きます
> [!warning]
> ここに警告メッセージを書きます
以下、実際の表示例です:
これは note タイプのコールアウトです。一般的なメモを提供する際に使用します。
これは info タイプのコールアウトです。補足情報や追加の説明を提供する際に使用します。
これは tip タイプのコールアウトです。便利なヒントやコツを共有する際に効果的です。
これは important タイプのコールアウトです。特に重要なポイントを際立たせることができます。
これは warning タイプのコールアウトです。警告が必要な情報を強調する際に使用します。
これは caution タイプのコールアウトです。注意が必要な情報を強調する際に使用します。
3. カスタムタイトル
タイプの後にテキストを追加すると、タイトルをカスタマイズできます:
> [!note] 覚えておきたいこと
> カスタムタイトルが設定されました
生成されるHTML:
<div data-callout data-callout-type="note">
<div data-callout-title>覚えておきたいこと</div>
<div data-callout-body>
<p>カスタムタイトルが設定されました</p>
</div>
</div>
実際の表示例:
カスタムタイトルを設定することで、より具体的な見出しを付けることができます。
タイトルを工夫することで、読者の理解を深めることができます。
4. 複数行と複雑なコンテンツ
コールアウトの中には、複数段落やリスト、コードブロックも含められます:
> [!info] セットアップ手順
> 以下の手順で設定してください:
>
> 1. パッケージをインストール
> 2. 設定ファイルを編集
> 3. 開発サーバーを起動
>
> \```bash
> npm install
> \```
実際に試したところ、コードブロックもリストも正しく表示されることを確認できました。
実際の表示例:
remark-callout を使い始めるには、以下の手順に従ってください:
- パッケージマネージャーを使ってインストール
- Astro の設定ファイルにプラグインを追加
- スタイルを定義(必要に応じて)
- マークダウンファイルで使用開始
複数の段落や、太字、斜体などのマークダウン記法も使用できます。
5. 折りたたみ可能なコールアウト
タイプの後に - または + を付けると、折りたたみ可能なコールアウトになります:
> [!note]- デフォルトで折りたたまれている
> この内容は最初は隠れています
> [!note]+ デフォルトで展開されている
> この内容は最初から表示されています
これらは <details> と <summary> 要素として出力されます:
<details data-callout data-callout-type="note">
<summary data-callout-title>デフォルトで折りたたまれている</summary>
<div data-callout-body>
<p>この内容は最初は隠れています</p>
</div>
</details>
<details data-callout data-callout-type="note" open>
<summary data-callout-title>デフォルトで展開されている</summary>
<div data-callout-body>
<p>この内容は最初から表示されています</p>
</div>
</details>
実際の表示例(クリックして展開・折りたたみできます):
追加の詳細情報(クリックで展開)
この内容は最初は折りたたまれています。長い補足説明や詳細な情報を含める際に便利です。
- ページをすっきり保てる
- 必要な人だけが詳細を確認できる
- JavaScriptなしでネイティブに動作
重要なヒント(デフォルトで表示)
この内容は最初から展開されています。重要だけど長い情報を提供する際に使えます。
6. スタイリング
プラグインはHTMLの構造を提供してくれますが、見た目のスタイルは自分で定義する必要があります。
Tailwind CSSを使った例:
/* 基本スタイル */
[data-callout] {
@apply my-4 rounded-lg border-l-4 p-4;
}
[data-callout-title] {
@apply mb-2 font-bold;
}
/* タイプ別の色分け */
[data-callout][data-callout-type="note"] {
@apply border-blue-500 bg-blue-50 dark:bg-blue-950/30;
}
[data-callout][data-callout-type="note"] [data-callout-title] {
@apply text-blue-700 dark:text-blue-400;
}
[data-callout][data-callout-type="warning"] {
@apply border-yellow-500 bg-yellow-50 dark:bg-yellow-950/30;
}
[data-callout][data-callout-type="warning"] [data-callout-title] {
@apply text-yellow-700 dark:text-yellow-400;
}
/* 折りたたみ用のアイコン */
details[data-callout] summary[data-callout-title]::before {
content: "▶ ";
@apply inline-block transition-transform;
}
details[data-callout][open] summary[data-callout-title]::before {
@apply rotate-90;
}
このようなスタイルを設定することで、タイプごとに異なる色で表示され、折りたたみ時にはアイコンがアニメーションする、視覚的に分かりやすいコールアウトになります。
動作確認
実際にテストスクリプトを作成して、プラグインの動作を確認しました:
import { unified } from "unified";
import remarkParse from "remark-parse";
import remarkCallout from "@r4ai/remark-callout";
import remarkRehype from "remark-rehype";
import rehypeStringify from "rehype-stringify";
import { readFileSync } from "fs";
const markdown = readFileSync("test-callout.md", "utf-8");
const result = await unified()
.use(remarkParse)
.use(remarkCallout)
.use(remarkRehype)
.use(rehypeStringify)
.process(markdown);
console.log(String(result));
このスクリプトで様々なパターンのコールアウトをテストし、期待通りのHTMLが生成されることを確認できました。
使ってみた感想
1. シンプルで直感的な記法
Obsidianを使ったことがある方なら、すぐに使い始められる記法です。初めての方でも > [!type] title という形式は覚えやすいと感じました。
2. HTML構造の設計が良い
data-* 属性を使った構造は、CSSでのスタイリングがしやすく、また他のJavaScriptとの連携もしやすいと思いました。特定のクラス名に依存しない設計は、プロジェクトごとの命名規則との衝突を避けられる点が良いです。
3. 折りたたみ機能の活用
<details> 要素を使った折りたたみ機能は、JavaScriptなしでネイティブに動作します。長い補足説明や詳細情報を含める際に、ページを読みやすく保てるのは便利だと感じました。
4. カスタマイズの余地
デフォルトでは最小限の機能のみを提供し、スタイリングやアイコンは利用者に任せる設計は、柔軟性があって良いと思いました。プロジェクトのデザインに合わせて自由に調整できます。
5. 複雑なコンテンツへの対応
コードブロック、リスト、複数段落など、様々なマークダウン要素をコールアウト内に含められるのは、実用的な場面で役立つと感じました。
気づいた点
1. スタイルは自分で用意する必要がある
プラグイン自体はスタイルを提供しないため、最初にCSSを書く必要があります。これは柔軟性のためのトレードオフですが、すぐに使い始めたい場合は少し手間がかかるかもしれません。
2. タイプの制限について
ドキュメントには明示的に「これらのタイプがサポートされている」というリストはありませんでした。設定によってはすべてのタイプ名を受け入れるようですが、どのタイプが利用可能かは、実際に試してみるか、設定で明示的に指定する必要があるようです。
3. Obsidianとの完全互換ではない
Obsidianには他にも様々なコールアウト機能がありますが、このプラグインは基本的な記法をサポートしています。高度な機能を使いたい場合は、カスタマイズが必要かもしれません。
このブログでの実装
このブログ記事自体が、remark-callout を使用した実例となっています。
実装内容
-
パッケージのインストール
pnpm add @r4ai/remark-callout -
Astro 設定の更新 (
astro.config.ts)import remarkCallout from "@r4ai/remark-callout"; export default defineConfig({ markdown: { remarkPlugins: [ remarkToc, [remarkCollapse, { test: "Table of contents" }], remarkCallout, // 追加 ], }, }); -
スタイルの定義 (
src/styles/typography.css)- Tailwind CSS を使用してタイプ別に色分け
- ライト/ダークモードの両方に対応
- 折りたたみ時のアニメーションも実装
この記事に表示されている callout は、すべて実際に動作している実例です。
まとめ
私が感じたこと
remark-calloutは、マークダウンに視覚的なアクセントを加えるための、シンプルで効果的なツールだと感じました。特に以下の点が印象的でした:
- 記法の分かりやすさ - Obsidian風の直感的な構文
- 柔軟な設計 - スタイリングの自由度が高い
- 標準的なHTML要素の活用 -
<details>など、ブラウザの機能を活かせる
どんな場面で使えそうか
以下のような用途で特に有用だと思います:
- 技術ドキュメント - 注意事項やヒントを目立たせたい
- ブログ記事 - 重要なポイントを視覚的に強調したい
- チュートリアル - ステップごとの説明を分かりやすく
- 個人のノート - Obsidianと同じ記法で一貫性を保ちたい
個人的な感想
実際にセットアップしてテストしてみることで、プラグインがどのようにマークダウンを変換し、HTMLを生成するかを理解できたのは良かったです。特に、折りたたみ可能なコールアウトが <details> 要素として出力される仕組みは、ドキュメントを読むだけでは分からなかった発見でした。
マークダウンで書いたドキュメントの読みやすさを向上させたい方や、Obsidianユーザーで同じ記法を他のプロジェクトでも使いたい方には、ぜひ試してみることをお勧めします。
参考リンク
検証環境
本記事で使用したパッケージのバージョン:
- @r4ai/remark-callout: 0.6.2
- astro: 5.14.7
- Node.js: 22.x
remark-calloutを実際に試してみて、Obsidian風のコールアウトを簡単にマークダウンで実現できることが分かりました。
この記事が、マークダウンでのドキュメント作成を改善したい方の参考になれば幸いです。