導入

技術ドキュメントを作成する際、特にスタイルガイドやユーザーインターフェース仕様では、カラーパレットを表示することがよくあります。AsciiDoc はドキュメント作成に非常に強力ですが、カラーサンプルを表示するためのネイティブな構文は提供されていません。この記事ではこの問題を検討し、HTML インジェクションに基づくエレガントな解決策を提案します。

問題

使用コンテキスト

ウェブアプリケーションテーマのCSS変数をドキュメントしていると想像してください。次のものが必要です:

  1. 16進数のカラーコードをリスト

  2. 各色の視覚的なプレビューを表示

  3. ソースドキュメントの可読性を維持する

  4. 静的サイトジェネレーター(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プロパティの説明

所有 機能

display:inline-block

インラインフローに留まりながら width/height を設定できるようにする

width:1em; height:1em

フォントサイズに対する正方形のサイズ (レスポンシブ)

background:#7952b3

表示する色(ニーズに応じて変数)

vertical-align:middle

正方形を隣接するテキストに合わせて揃える

margin-right:0.5em

正方形とテキストの間隔

完全な例

テーマパレットの文書化例を以下に示します:

== 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進数コードを変更するだけで、すぐに完全なパレットを作成できます。

この技術は、カスタマイズされたビジュアルレンダリングを必要とする他のユースケースにも拡張できます:アイコン、バッジ、シンプルなグラフ、またはスタイルを正確に制御する必要のあるすべてのビジュアル要素。

関連記事