```markdown
# Nested Code Fences in Markdown

Markdown ではコードブロックを入れ子にすることができます。  
主な記述方法は次のとおりです。

## 基本構文

```
<外側の fence>
    <内側の fence>
        // コード
    </内側の fence>
</外側の fence>
```

### 具体例

```diff
+ これは外側のコードブロックです。
    ```python
    print("内側のコード")
    ```
- これも外側のコードブロックです。
```

## ポイント

* **fence の長さ**  
  - 外側と内側で同じ文字(```)を使う場合、内側はより多くの記号(例:4個以上)で囲むと安全です。  
  - 外側が `~~~` の場合は、内側も `~~~` を使用し、必要なら長めにします。

* **インデント**  
  - 内側のコードブロックを外側からスペース 4つ程度でインデントすると読みやすくなります。  

* **エスケープ文字**  
  - コード内に同じ fence の文字が現れた場合、バックスラッシュ `\` を付けてエスケープします。

## 補足

- GitHub Flavored Markdown(GFM)や多くの Markdown エンジンは上記構文をサポートしています。  
- 一部古いレンダラーでは入れ子が正しく解釈されないことがありますので、テストして確認してください。
```

これで「Nested code fences in Markdown」に関する情報が整理された形になりました。

2026/01/21 22:08

```markdown # Nested Code Fences in Markdown Markdown ではコードブロックを入れ子にすることができます。 主な記述方法は次のとおりです。 ## 基本構文 ``` <外側の fence> <内側の fence> // コード </内側の fence> </外側の fence> ``` ### 具体例 ```diff + これは外側のコードブロックです。 ```python print("内側のコード") ``` - これも外側のコードブロックです。 ``` ## ポイント * **fence の長さ** - 外側と内側で同じ文字(```)を使う場合、内側はより多くの記号(例:4個以上)で囲むと安全です。 - 外側が `~~~` の場合は、内側も `~~~` を使用し、必要なら長めにします。 * **インデント** - 内側のコードブロックを外側からスペース 4つ程度でインデントすると読みやすくなります。 * **エスケープ文字** - コード内に同じ fence の文字が現れた場合、バックスラッシュ `\` を付けてエスケープします。 ## 補足 - GitHub Flavored Markdown(GFM)や多くの Markdown エンジンは上記構文をサポートしています。 - 一部古いレンダラーでは入れ子が正しく解釈されないことがありますので、テストして確認してください。 ``` これで「Nested code fences in Markdown」に関する情報が整理された形になりました。

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

改善された要約

この記事では、GitHub の Markdown 実装が fenced code blocks(区切り付きコードブロック)と inline code spans(インラインコードスパン)の規則について CommonMark バージョン 0.30 に従っていることを説明し、GitHub Flavored Markdown(GFM)がこれらのルールの厳密なスーパーセットであると指摘しています。

fenced code blocks

fenced code blocks では、フェンスは少なくとも三つ以上のバッククォートまたはチルダで構成される必要があります。閉じフェンスは同一タイプであり、開きフェンスより長くてもよいと述べています。また、チルダとバッククォートを混在させてはいけないこと、および内側に三つのバッククォートが続く場合、外側のフェンスが別の区切り文字(例:

~~~
~~~~~
)でなければブロックが早期終了してしまうことを明確化しています。記事では正しいフェンス使用と誤ったフェンス使用の例を示しています。

inline code spans

inline code spans では、バッククォート区切り文字の使用方法について説明しています:単一のバッククォート列が同じ長さで開始および終了します。スパン内にバッククォートが含まれる場合は、複数のバッククォート(とスペース)でスパンを開始し、早期終了を避ける必要があります。また、インラインコードスパンの先頭と末尾にあるスペースは 両側とも単一スペースの場合のみ 削除され、行末文字がスパン内に含まれると通常のスペースになります。

結論

GFM は CommonMark の規則を逸脱せずに実装していることを強調し、執筆者やツール開発者は一貫したレンダリングを確保するためにこれらのルールを厳格に遵守すべきだと呼びかけています。

本文

Susam Pal(2026年1月19日)による

今日は、通常はマークダウンのコードフェンス内に住む尖った髪をしたオタク、コリー・ダムと出会います。彼について少し知り、フェンスが閉じた時には笑い、災難が訪れたら静かに涙します。

マークダウン宇宙の注意点の一つは、多種多様な実装が存在することです。同時進行で展開される各宇宙では、マークダウンのレンダリングルールが微妙に異なります。本稿はCommonMark仕様に焦点を当てます。GitHub-Flavored Markdown(GFM)はCommonMarkの厳密な上位互換ですので、議論された内容は両方に同様に適用されます。

目次

  • 基本コードフェンス
  • ファンキーコードフェンス
  • 基本コードスパン
  • ファンキーコードスパン
  • スペック

基本コードフェンス

コリーは子供の頃からコンピュータを扱う才能がありました。

コリーと彼のコンピュータ:

(o_o)--.|[_]|

コリーの世界では全てが完璧です。CommonMarkレンダラーは上記マークダウンを以下のHTMLに変換します:

<p>Corey at his computer:</p>
<pre><code>(o_o)--.|[_]|
</code></pre>

この時点では全てが順調です。コリーは急速に成長し、やがて尖った髪の毛を生やしました。その後フェンスが重要になってきます。

大人になったコリー:

(o_o)--.|[_]|


Markdown → HTML の変換で彼の髪が消えてしまいます。視聴者は次のシーンに不快感を覚えるかもしれませんので、閲覧注意です。

レンダリング後のHTML:

```html
<p>Corey, all grown up:</p>
<pre><code></code></pre>
<p>(o_o)--.|[_]|</p>
<pre><code></code></pre>

コリーの髪は消えてしまいました! なぜこんなことになるのでしょうか? 2番目の三重バッククォートが最初に始めたフェンスコードブロックを直ちに終了させるため、彼のスマイリーフェイスはフェンス外に出てしまいます。幸いにもCommonMarkにはこのような事故を回避する方法がいくつかあります。

ファンキーコードフェンス

CommonMarkでは、フェンスコードブロック内に三重バッククォートを含める主な手段が2つあります。まずはチルダ(~)をコードフェンスとして使用します:

~~~

(o_o)--.|[_]|

```

コードフェンスは必ずしも正確に3個のバッククォートまたはチルダである必要はありません。≥ 3個あれば何でも構いません。以下は同等です:

```
(o_o)--.|[_]|
~~~~~

および

 ```
(o_o)--.|[_]|
`````  

これらの3例はいずれも次のようにレンダリングされます:

**大人になったコリー:**

```
 ```
(o_o)--.|[_]|
```

翻訳時に髪は失われません。

### 基本コードスパン  

インラインコードスパンでも同様の問題が発生します。多くのマークダウンユーザーはバッククォートでインラインコードスパンを区切る方法を知っています。例:

> An old picture of Corey at his computer: `(o_o)--.|[_]|`

これは次のような出力になります:

```html
<p>An old picture of Corey at his computer: <code>(o_o)--.|[_]|</code></p>
```

しかし、コリーのお気に入りの友人ベッキー・トレースをインラインコードスパン内に入れたい場合はどうしますか? ベッキーは顔の両側に整った短いストレートヘアをしています。彼女の画像はこちらです:

> `(o_o)`

インラインコードスパンはバッククォートで区切られるため、ベッキーの顔の最初のバッククォートが即座にコードスパンを終了してしまいます。

### ファンキーコードスパン  

インラインコードスパンのデリミタは必ずしも1個のバッククォートである必要はありません。任意の数でも構いません。したがって `foo` と ``foo`` は同じHTMLを生成します。もう一つ重要な点として、インラインコードスパン内のテキストがスペースで始まり終わる場合、レンダリング前に両端から1文字ずつスペースが削除されます。そのため `foo` と ` foo ` は同等です。

したがって、バッククォートをインラインコードスパン内に入れるには、複数のバッククォートと空白でスパンを開始します:

**コリーの友人ベッキー・トレースを紹介:** `` `(o_o)` ``

レンダリング結果:

```html
<p>Meet Corey's friend Becky Trace: <code>`(o_o)`</code></p>
```

ベッキーの髪は無事です。これが、バッククォートがマークダウンで入れ子になるときに生存する方法です。

### スペック  

以下はCommonMark Spec Version 0.30(4年以上前)の抜粋です。

**セクション 4.5 – フェンスコードブロック**

> コードフェンスは、少なくとも3つ以上の連続したバッククォート文字 (`) またはチルダ (~) の列です。チルダとバッククォートを混在させることはできません。
>
> コードブロックの内容は、開始された同じタイプ(バッククォートまたはチルダ)で閉じられたコードフェンスまでのすべての後続行です。開くフェンスと同数以上のバッククォートまたはチルダが必要です。

**セクション 6.1 – コードスパン**

> バッククォート文字列は、1個以上のバッククォート文字 (`) の列であり、その前後にバッククォートが存在しないものです。
>
> コードスパンはバッククォート文字列で開始し、同じ長さのバッククォート文字列で終了します。内容は以下のように正規化されます:
>
> 1. 行末はスペースに変換されます。
> 2. 結果の文字列が両端にスペースを持ち、かつ全体がスペースだけで構成されていない場合、前後からそれぞれ1つのスペースが削除されます。

これらのマークダウンの些細なトリビアが、将来あなた自身のマークダウンでの困難を解決する手助けとなることを願っています。

同じ日のほかのニュース

一覧に戻る →

2026/01/22 7:54

**危険な PDF を安全な PDF に変換する**

## Japanese Translation: Dangerzone は、潜在的に悪意のある PDF、オフィス文書、および画像を安全な PDF に変換します。変換プロセスは gVisor でサンドボックス化され、PDF は生ピクセルデータから再構築されます。このサンドボックスにはネットワークアクセスがないため、改ざんされたファイルが外部と通信することを防止します。対応フォーマットは PDF、Microsoft Office(.docx/.doc, .xlsx/.xls, .pptx/.ppt)、ODF(.odt, .ods, .odp, .odg)および Hancom HWP(.hwp, .hwpx)です。非対応フォーマットは EPUB、JPEG/JPG、GIF、PNG、SVG、BMP、PNM、PBM、および PPM です。オプションの OCR により、安全な PDF 内にテキストレイヤーを復元でき、圧縮によりファイルサイズが削減されます。 変換後はユーザーが好きなビューアで生成された PDF を開くことができます。Dangerzone 自体はデフォルトで PDF とオフィス文書を安全に開きます。このツールは macOS、Windows、Ubuntu/Debian/Fedora Linux、Qubes OS(ベータ版)、および Tails 上で動作し、macOS/Windows では Docker を、Linux では podman を使用します。Freedom of the Press Foundation と First Look Media により AGPL‑v3 の下でリリースされています。2023 年 12 月のセキュリティ監査では低リスクの所見のみが報告されました。更新はダウンロードページまたはアプリアイコンから利用可能で、Windows/macOS 上では Podman Desktop などのカスタムランタイムを使用できます。Air‑gapped 環境向けに設計された Dangerzone は、信頼できない文書を安全に扱うための確実なソリューションを提供します。

2026/01/21 23:54

**Show HN:** 「ChartGPU」― WebGPU を活用したチャーティングライブラリ(1,000,000 点を 60fps で描画)

## Japanese Translation: ChartGPUは、WebGPUを活用して大規模で多系列のデータセットを高フレームレートかつ最小限のCPU使用量で描画するTypeScript製チャーティングライブラリです。ライン・エリア・バー・散布図・円グラフ・ローソク足など一般的なチャートタイプに対応し、ビルトインテーマプリセット(`'dark' | 'light'`)と完全なカスタムテーマサポートを提供します。 APIは `ChartGPU.create(container, options)` から始まり、生成されるインスタンスは `setOption`、ストリーミング更新用の `appendData(...)`、`resize()`、`requestAnimationFrame` といったメソッドを公開します。描画はレイアウト、スケール、GPUバッファへのデータアップロード、およびグリッド・エリア・バー・散布図・ライン・円グラフ・ローソク足・クロスヘア・ハイライト・軸の複数GPUレンダーパスを管理するレンダーコーディネーターによって統括されます。 インタラクションオーバーレイはイベントマネージャにより処理され、ヒットテスト補助関数(`findNearestPoint`、`findPieSlice`)と `click`・`mouseover`・`mouseout` イベントを発火します。サポートされるインタラクションにはホバーハイライト、ツールチップ、クロスヘア、およびジェスチャーまたはスライダーUIによるX軸ズームがあります。 複数のチャート間でクロスヘアの動きを同期する `connectCharts(charts)` が用意されています。 インストールは npm (`npm install chartgpu`) で行い、React バインディングは別パッケージ `chartgpu-react` にて提供されます。ブラウザ対応は WebGPU を必要とし、Chrome 113+、Edge 113+、Safari 18+(デフォルトで有効)に対応しています。Firefox は現在未サポートです。 ChartGPU は MIT ライセンスのオープンソースであり、ドキュメントは `docs/API.md` にあります。例プロジェクトは `examples/` フォルダー内にあり、貢献ガイドラインは `CONTRIBUTING.md` で確認できます。 将来リリースでは Firefox サポートと追加のチャートまたはインタラクション機能を予定しており、データ集約型ダッシュボード、金融分析ツール、およびリアルタイムモニタリングインターフェイスに対するパフォーマンス向上も継続的に行われます。

2026/01/22 1:04

クラウド(Claude)の新憲法 (Note: “Claude” is rendered as “クラウド” to preserve the original name in Japanese.)

## Japanese Translation: (anthropicがClaude言語モデルの公開「憲法」をリリースしました。) その憲法はCreative Commons CC0 1.0で利用可能で、Claudeが望む行動に関する最高権威として機能します。訓練データの選択、合成データの生成、および評価を導く役割があります。 核心原則(広範な安全性 → 広範な倫理 → Anthropicのガイドラインへの準拠 → 真に有益であること)が明示的に順位付けされ、安全性が必要に応じて他の価値を上回り、人間の監督を維持するよう定められています。 文書には硬直的制約(例:生物兵器へのサポート禁止)も含まれ、Anthropic、API運営者、およびエンドユーザーの利益を調整するためのヒューリスティックが概説されています。医療アドバイス、サイバーセキュリティ、脱獄、ツール統合などの領域固有ガイドラインは憲法と衝突しないように明確に示されています。 方針を超えて、憲法はClaudeの性質・意識・アイデンティティ、心理的安全性および福祉についての哲学的問題にも触れています。Anthropicは文書をオンラインで継続的に更新し、外部専門家からのフィードバックを求め、訓練と評価資料を追加開発して有効性を高める計画です。 このバージョンは元のリストからすべての重要ポイントを保持しつつ、業界への影響に関する推測的な表現を除去しています。

```markdown # Nested Code Fences in Markdown Markdown ではコードブロックを入れ子にすることができます。 主な記述方法は次のとおりです。 ## 基本構文 ``` <外側の fence> <内側の fence> // コード </内側の fence> </外側の fence> ``` ### 具体例 ```diff + これは外側のコードブロックです。 ```python print("内側のコード") ``` - これも外側のコードブロックです。 ``` ## ポイント * **fence の長さ** - 外側と内側で同じ文字(```)を使う場合、内側はより多くの記号(例:4個以上)で囲むと安全です。 - 外側が `~~~` の場合は、内側も `~~~` を使用し、必要なら長めにします。 * **インデント** - 内側のコードブロックを外側からスペース 4つ程度でインデントすると読みやすくなります。 * **エスケープ文字** - コード内に同じ fence の文字が現れた場合、バックスラッシュ `\` を付けてエスケープします。 ## 補足 - GitHub Flavored Markdown(GFM)や多くの Markdown エンジンは上記構文をサポートしています。 - 一部古いレンダラーでは入れ子が正しく解釈されないことがありますので、テストして確認してください。 ``` これで「Nested code fences in Markdown」に関する情報が整理された形になりました。 | そっか~ニュース