このテンプレートでは、MDX 標準の記法に加えて、本文を書きやすくするための拡張をいくつか用意しています。
:::type[ラベル]で<Callout>/<Alert>を呼び出す- URL 文字列だけの段落を外部リンクカードに展開する
[[slug]]で内部記事へのリンク/カードを生成するastro-expressive-codeによるコードハイライト
この記事は、それぞれの記法と実際の見た目を確認するためのサンプルです。
Callout(:::type[ラベル])
:::type[タイトル] のようにラベルを付けると <Callout> に変換されます。対応 type は point / check / help / warning / alert の 5 種類。
:::point[ポイント]記事の要点を強調したい場面に使う。::::::point[...] のサンプル。記事の要点を強調したい場面に使う。リンクや インラインコード、強調 が中で使えるか確認します。
:::check[...] のサンプル。確認事項やチェックリストの導入に。
:::help[...] のサンプル。ヒントやヘルプ情報に。
:::warning[...] のサンプル。注意喚起に使う。
:::alert[...] のサンプル。最も強い警告に使う。
Alert(:::type)
ラベルを省略すると、タイトル領域のない <Alert> に変換されます。
:::warningラベルを省略するとタイトル領域のない Alert になります。::::::point のサンプル(Alert)。
:::check のサンプル(Alert)。
:::help のサンプル(Alert)。
:::warning のサンプル(Alert)。
:::alert のサンプル(Alert)。
内部に複数要素を含むケース
::: の中でも基本的な Markdown はそのまま使えます。リストやリンク、強調などが破綻なく並ぶかを確認します。
外部リンクカード(URL 自動展開)
URL文字列だけの段落は、ビルド時に対象サイトのOGPを取得して<LinkCard type="external">に展開されます。fetch結果は.cache/ogp/にMD5ハッシュ付きJSONでキャッシュされ、TTL 7日以内は再fetchしません。
https://lism-css.com/実際の表示:
上書き
fetchに失敗するサイトや、表示するタイトル・説明を自分で指定したい場合は、MDX上で<LinkCard type="external">を直書きできます。
<LinkCard type="external" href="https://example.com" title="独自タイトル" description="独自の説明文をここに書く。" />内部リンクカード([[slug]])
Obsidian風の[[slug]]記法で、同じブログ内の記事を参照できます。slugはsrc/posts/{category}/配下のファイル名(拡張子なし)です。
段落単独でカード化
[[slug]]を段落単独で書くと、Content Collectionsから記事情報を引いて<LinkCard type="internal">を出力します。
[[lism-css-intro]]文中リンク
段落の途中で[[slug]]を書くと、記事タイトルをテキストにしたインラインリンクになります。
詳しくは [[lism-css-intro]] を参照してください。詳しくは Lism CSS の概要 を参照してください。
表示テキストの上書き
[[slug|表示テキスト]]で表示テキストを上書きできます。段落単独でもエイリアスがある場合はリンクとして扱われます(カード化したいときはエイリアス無しで書く)。
[[lism-css-intro|前回の記事]] を参照。前回の記事 を参照。
コードハイライト(astro-expressive-code)
コードブロックのシンタックスハイライトは astro-expressive-code を使用しています。astro.config.mjs で themes: 'github-dark' を指定しているため、ライト/ダーク両モードで同じ配色(GitHub Dark)が適用されます。複数テーマを切り替えたい場合は themes: ['github-dark', 'github-light'] のように配列で指定し、themeCssSelector でサイト側のテーマ切り替えと連動させます。
通常のコードブロックに加えて、ファイル名タイトル付き表示や、特定の行のハイライト、差分表示なども書けます。
```ts title="src/lib/archive.ts" {3}export function getArchiveKey(date: string) { const [year, month] = date.split(/[-./]/); return { year, month };}```export function getArchiveKey(date: string) { const [year, month] = date.split(/[-./]/); return { year, month };}```bash title="Terminal"pnpm installpnpm dev```pnpm installpnpm dev仕様の所在
各記法を実装している remark プラグインは src/lib/ 配下にまとまっています。
| ファイル | 役割 |
|---|---|
remark-directive.mjs | :::type[label] / :::type を <Callout> / <Alert> に変換 |
remark-link-card.mjs | URL単独段落を<LinkCard type="external">に変換 |
remark-wiki-link.mjs | [[slug]]/[[slug|alias]]を<LinkCard type="internal">/<WikiLink>に変換 |
詳細は blog-astro-techlog の構成 のテンプレート解説を参照。