AsciiDocで色付きの正方形を表示する : 実践ガイド
公開日: 01 November 2025
導入
技術ドキュメントを作成する際、特にスタイルガイドやユーザーインターフェース仕様では、カラーパレットを表示することがよくあります。AsciiDoc はドキュメント作成に非常に強力ですが、カラーサンプルを表示するためのネイティブな構文は提供されていません。この記事ではこの問題を検討し、HTML インジェクションに基づくエレガントな解決策を提案します。
問題
使用コンテキスト
ウェブアプリケーションテーマのCSS変数をドキュメントしていると想像してください。次のものが必要です:
-
16進数のカラーコードをリスト
-
各色の視覚的なプレビューを表示
-
ソースドキュメントの可読性を維持する
-
静的サイトジェネレーター(JBakeなど)との互換性を確保する
@startuml
left to right direction
skinparam packageStyle rectangle
actor "技術ライター" as writer
actor "読者" as reader
rectangle "AsciiDoc ドキュメンテーション" {
usecase "カラーパレットをドキュメントする" as UC1
usecase "16進数コードを表示" as UC2
usecase "色を表示" as UC3
usecase "静的サイトを生成" as UC4
usecase "ドキュメントを参照" as UC5
}
writer --> UC1
UC1 ..> UC2 : include
UC1 ..> UC3 : include
UC1 --> UC4
UC4 --> UC5
UC5 <-- reader
@enduml
考えられるアプローチ
いくつかの解決策を検討することができます。AsciiDocドキュメントで色を表示するために:
@startuml
skinparam componentStyle rectangle
package "可能な解決策" {
component "Unicode文字" as unicode
component "外部の画像" as images
component "カスタムCSSロール" as css
component "HTMLインジェクション" as html
}
package "評価基準" {
component "シンプルさ" as simple
component "�携帯性" as portable
component "パーソナライズ" as custom
component "メンテナンス" as maintain
}
unicode -down-> simple : ✓
unicode -down-> portable : ✓
unicode -down-> custom : ✗
images -down-> simple : ✗
images -down-> portable : ✗
images -down-> custom : ✓
css -down-> simple : ~
css -down-> portable : ✗
css -down-> custom : ✓
html -down-> simple : ✓
html -down-> portable : ✓
html -down-> custom : ✓✓
html -down-> maintain : ✓
note right of html
Solution recommandée
end note
@enduml
オプション 1 : Unicode文字
Unicode文字を使用して`■`(■) 簡単だが限定的である :
* ■ --accent-color: #7952b3 (violet Bootstrap)
制限 : 色の制御はありません、システムフォントに依存します。
オプション 2 : 外部画像
各色ごとに PNG または SVG の画像を作成する:
* image:colors/violet.svg[width=16] --accent-color: #7952b3
制限 :重いメンテナンス、ファイルの増殖、自動同期なし。
オプション3 : カスタムCSSロール
CSSクラスを定義し、AsciiDocのロールを使用して適用する:
* [.color-violet]##■## --accent-color: #7952b3
制限 : 外部スタイルシートが必要、すべての可能な色の事前定義が必要
オプション4 : HTMLインジェクション (採用された解決策)
マクロを使用する``HTMLをインラインスタイルで注入するために :
* pass:[<span style="display:inline-block;width:1em;height:1em;
background:#7952b3;vertical-align:middle;margin-right:0.5em"></span>]
--accent-color: #7952b3 (violet Bootstrap)
解決策 : HTMLインジェクション
動作原理
マクロ``AsciiDoc では、AsciiDoc プロセッサーによって解釈されない生のコンテンツを挿入できます。これにより、インライン CSS スタイルを持つ HTML を直接挿入できます。
@startuml participant "ドキュメント\nAsciiDoc" as doc participant "プロセッサー AsciiDoc" as processor participant "パス:[] マクロ" as pass participant "HTML 最終" as html doc -> processor : Analyse document processor -> pass : Détecte pass:[] pass -> processor : Retourne HTML brut processor -> html : Insère sans transformation html -> html : Navigateur applique styles @enduml
実装
ここに注入するHTML構造は:
<span style="display:inline-block;
width:1em;
height:1em;
background:#7952b3;
vertical-align:middle;
margin-right:0.5em">
</span>
CSSプロパティの説明
| 所有 | 機能 |
|---|---|
|
インラインフローに留まりながら width/height を設定できるようにする |
|
フォントサイズに対する正方形のサイズ (レスポンシブ) |
|
表示する色(ニーズに応じて変数) |
|
正方形を隣接するテキストに合わせて揃える |
|
正方形とテキストの間隔 |
完全な例
テーマパレットの文書化例を以下に示します:
== Thème Clair
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#f8f9fa;border:1px solid #ccc;vertical-align:middle;margin-right:0.5em"></span>] --bg-primary: `#f8f9fa` (blanc cassé)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#212529;vertical-align:middle;margin-right:0.5em"></span>] --text-primary: `#212529` (noir très foncé)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#7952b3;vertical-align:middle;margin-right:0.5em"></span>] --accent-color: `#7952b3` (violet Bootstrap)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#61428f;vertical-align:middle;margin-right:0.5em"></span>] --accent-hover: `#61428f` (violet plus foncé)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#ffffff;border:1px solid #ccc;vertical-align:middle;margin-right:0.5em"></span>] --card-bg: `#ffffff` (blanc)
次のレンダリングを生成する:
ライトテーマ
-
--bg-primary:`#f8f9fa`(オフホワイト)
-
--text-primary:`#212529`(非常に暗い黒)
-
--accent-color:`#7952b3`(バイオレット Bootstrap)
-
--accent-hover:`#61428f`(より暗い紫)
-
--card-bg:`#ffffff`(白)
最適化とベストプラクティス
明るい色を管理する
非常に薄い色(白、非常に薄いグレー)の場合は、白い背景でも見えるように枠線を追加してください:
<span style="display:inline-block;width:1em;height:1em;
background:#ffffff;border:1px solid #ccc;
vertical-align:middle;margin-right:0.5em"></span>
�灰色の境界線`border:1px solid #ccc`) は白い背景上の白い正方形を区切ることができます。
正方形のサイズを調整する
必要に応じて正方形のサイズを調整できます:
* pass:[<span style="display:inline-block;width:1.5em;height:1.5em;background:#7952b3;vertical-align:middle;margin-right:0.5em"></span>] Grand carré
* pass:[<span style="display:inline-block;width:0.8em;height:0.8em;background:#7952b3;vertical-align:middle;margin-right:0.5em"></span>] Petit carré
単位の使用`em`フォントサイズに合わせて正方形が適応することを保証します。
バリエーションを作成する
特定のニーズに対して、さまざまな形を作ることができます:
色付きの円
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#7952b3;border-radius:50%;vertical-align:middle;margin-right:0.5em"></span>] Cercle violet
色付きの枠線がある正方形
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#ffffff;border:3px solid #7952b3;vertical-align:middle;margin-right:0.5em"></span>] Bordure violette
ソリューションアーキテクチャ
@startuml
package "ドキュメントワークフロー" {
[Document AsciiDoc\navec pass macro] as asciidoc
[Processeur JBake] as jbake
[Site HTML statique] as html
[Navigateur Web] as browser
}
asciidoc --> jbake : 1. Compilation
jbake --> html : 2. Génération
html --> browser : 3. Affichage
browser --> browser : 4. Rendu CSS
note right of asciidoc
Contient les balises
pass:[] avec HTML inline
end note
note right of jbake
Préserve le HTML
dans pass:[]
end note
note right of browser
Applique les styles
inline CSS
end note
@enduml
利点と制限
利点
-
自律性 : 外部ファイルへの依存はありません
-
�✓ ポータビリティ : すべての AsciiDoc プロセッサーで動作します
-
�✓ 同期化 : カラーコードはHTMLに直接記述されています
-
�✓ 柔軟性 : スタイルの完全なカスタマイズ
-
メンテナンス : 16進コードの簡単な変更
-
✓ JBake 互換性 : 静的サイトジェネレーターと完全に互換性があります
制限
-
冗長 : HTMLコードの繰り返しは、AsciiDocソース内
-
✗ ソースの可読性 : ソースドキュメントはそれほどきれいではない
-
✗ アクセシビリティ : ネイティブな代替テキストはありません(手動で追加する必要があります)
アクセシビリティの向上
スクリーンリーダーが読めるように四角をアクセシブルにする:
* pass:[<span role="img" aria-label="Couleur violet Bootstrap"
style="display:inline-block;width:1em;height:1em;background:#7952b3;
vertical-align:middle;margin-right:0.5em"></span>]
--accent-color: `#7952b3` (violet Bootstrap)
属性`role="img"` et `aria-label`補助技術が視覚コンテンツを理解し、説明できるようにします。
具体例:テーマのドキュメンテーション
複数のテーマを文書化した完全な例 :
= Guide des couleurs de l'application
== Thème Clair (`:root`)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#f8f9fa;border:1px solid #ccc;vertical-align:middle;margin-right:0.5em"></span>] --bg-primary: `#f8f9fa` (blanc cassé)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#212529;vertical-align:middle;margin-right:0.5em"></span>] --text-primary: `#212529` (noir très foncé)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#7952b3;vertical-align:middle;margin-right:0.5em"></span>] --accent-color: `#7952b3` (violet Bootstrap)
== Thème Sombre (`[data-bs-theme="dark"]`)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#212529;vertical-align:middle;margin-right:0.5em"></span>] --bg-primary: `#212529` (noir très foncé)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#ffffff;border:1px solid #999;vertical-align:middle;margin-right:0.5em"></span>] --text-primary: `#ffffff` (blanc)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#0d6efd;vertical-align:middle;margin-right:0.5em"></span>] --accent-color: `#0d6efd` (bleu Bootstrap)
== Thème Contraste Élevé (`[data-bs-theme="high-contrast"]`)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#000000;vertical-align:middle;margin-right:0.5em"></span>] --bg-primary: `#000000` (noir)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#ffffff;border:1px solid #000;vertical-align:middle;margin-right:0.5em"></span>] --text-primary: `#ffffff` (blanc)
* pass:[<span style="display:inline-block;width:1em;height:1em;background:#00ff00;vertical-align:middle;margin-right:0.5em"></span>] --accent-color: `#00ff00` (vert vif)
結論
マクロを介したHTMLインジェクション``AsciiDocは、技術文書で色見本を表示するためのエレガントで実用的なソリューションを提供します。やや冗長ではあるが、このアプローチは最大限の移植性と簡素化されたメンテナンスを保証します。
この技術は外部の設定や追加のスタイルシートを必要とせず、JBakeおよびすべての標準的なAsciiDocプロセッサとすぐに動作します。
最初の色付きの正方形を作成したら、HTMLコードをコピー&ペーストし、16進数コードを変更するだけで、すぐに完全なパレットを作成できます。
この技術は、カスタマイズされたビジュアルレンダリングを必要とする他のユースケースにも拡張できます:アイコン、バッジ、シンプルなグラフ、またはスタイルを正確に制御する必要のあるすべてのビジュアル要素。
リソース
掲載された記事 2025-11-01
関連記事
31 May 2026
14 May 2026