更新紀錄(僅初版,2026年02月22日 發布)
- 初次發布
引用本文(DOI: 10.5281/zenodo.21616235)
本文保存於 Zenodo。以下同時提供一律指向最新版本的 DOI,以及固定於您正在閱讀版本的 DOI。
小村 豪(2026)。〈什麼是 HCP 圖表 - 把 HCP-DSL 轉為決定性 SVG 的 MakingHCPChartSkill 使用方式〉。小村軟體有限公司。https://doi.org/10.5281/zenodo.21616235 https://comcomponent.com/zh-TW/blog/2026/02/22/000-what-is-hcp-chart-and-making-hcp-chart-skill/
- DOI(最新版本)
- 10.5281/zenodo.21616235
- DOI(此版本)
- 10.5281/zenodo.21616236
什麼是 HCP 圖表 - 把 HCP-DSL 轉為決定性 SVG 的 MakingHCPChartSkill 使用方式
1. 什麼是 HCP 圖表
HCP 圖表是一種以階層方式描述處理流程的表達方式。
在這個儲存庫裡,下列寫法被視為必備規則。
- 左側是「要達成什麼(目的)」
- 右側(更深的縮排)是「如何達成(手段・細節)」
- 最頂層(level 0)寫上目的標籤
依照這些規則撰寫文本,可以讓設計意圖與實作細節之間的對應變得容易閱讀。
2. 這個儲存庫解決的問題
若只以人工維護圖檔,常會遇到下列問題。
- 圖和規格文字對不上
- 分支或階層的限制變模糊
- 不容易做 diff 審查
MakingHCPChartSkill 的流程是:把 HCP-DSL 作為 JSON request 傳入,由 hcp_render_svg.py 進行驗證與繪製。
相同輸入會得到相同輸出,因此圖檔可以很自然地納入 CI 或審查流程。
3. 最快了解儲存庫結構
目標儲存庫:https://github.com/gomurin0428/MakingHCPChartSkill
hcp-chart-svg-v2/SKILL.md
Skill 的使用方式與限制(例如不可同時指定renderAllModules與module等)。hcp-chart-svg-v2/scripts/hcp_render_svg.py
接收 JSON 輸入、驗證並解讀 HCP-DSL、回傳 SVG 回應的主程式。hcp-chart-svg-v2/references/
規格參考、範例 request/response、範例 SVG。hcp-chart-svg-v2/scripts/hcp_xml_to_svg.py
deprecated,目前請改用hcp_render_svg.py。
4. 10 分鐘 Hands-on(GCD 範例)
4.1. 取得儲存庫
git clone https://github.com/gomurin0428/MakingHCPChartSkill.git
cd .\MakingHCPChartSkill
4.2. 把 skill 放到本機的 Codex
Copy-Item -Recurse -Force .\hcp-chart-svg-v2 "$HOME\.codex\skills\hcp-chart-svg-v2"
4.3. 用範例輸入產生 SVG 回應
python .\hcp-chart-svg-v2\scripts\hcp_render_svg.py `
--input .\hcp-chart-svg-v2\references\example-gcd-request.json `
--output .\hcp-chart-svg-v2\references\example-gcd-response.json `
--pretty
4.4. 從回應 JSON 取出 SVG
$r = Get-Content -Raw .\hcp-chart-svg-v2\references\example-gcd-response.json | ConvertFrom-Json
$r.svg | Set-Content -NoNewline -Encoding utf8 .\hcp-chart-svg-v2\references\example-gcd.svg
4.5. 補充(輸入限制)
- 當
renderAllModules=true時,不能同時指定module。 - 若
diagnostics中含有error,svg或svgs會是空的。
5. 兩個範例的閱讀方式
5.1. 歐幾里得演算法(GCD)
- 輸入範例:
example-gcd-request.json - 輸出範例:
example-gcd-response.json
「接收輸入」「重複」「回傳」以階層方式分離,處理的目的與手段很容易追。
5.2. 訂單核可流程
- 輸入範例:
example-order-approval-request.json - 輸出範例:
example-order-approval-response.json
即使是業務流程,也能用 fork 與 true/false 明確地表達分支的意圖。
6. 裡面在做什麼(HCP 圖表)
execute_request 的處理流程若以 HCP-DSL 表達,如下所示。
\module main
接收請求並確認前提
驗證輸入 JSON 的必要項目
剖析 DSL 並結構化
解讀模組與階層
收集 diagnostics
依診斷結果選擇回應路徑
\fork 是否存在 error
\true 是
回傳空的 SVG 系 payload
\false 否
決定要繪製的模組
\fork renderAllModules 是否為 true
\true 是
生成所有模組的 SVG
組出含 svgs 的回應 JSON
\false 否
生成單一模組的 SVG
組出含 svg 的回應 JSON
把結果回傳給呼叫端
把上述 DSL 實際渲染後的圖表如下。
7. 總結
HCP 圖表的強項不只是「作為圖表容易閱讀」,更在於 可以當成規格來管理。
搭配 MakingHCPChartSkill,就能在驗證 HCP-DSL 的同時一氣呵成地生成 SVG。
接下來若要嘗試,建議把平常的某一段處理規格用 HCP-DSL 寫一份,邊看 diagnostics 邊調整格式,比較容易感受到導入效果。
參考資料
相關文章
共用相同標籤的最新文章。能以相近的主題延伸理解。
多執行緒實務最佳實踐 Java 篇 ── 虛擬執行緒時代的定石
Java 的多執行緒開發,定石是不直接建立執行緒,而是交給 ExecutorService 與虛擬執行緒。本文整理 synchronized 與 ReentrantLock 的用法區分、透過中斷實現協調式停止、ConcurrentHashMap 的原子操作,以及 Swing...
多執行緒實務最佳實踐 C 語言篇 ── 以 Win32 API 的方式安全撰寫
C 語言 × Win32 的多執行緒有其定式:以 _beginthreadex 建立執行緒、SRW 鎖與條件變數、Interlocked、以停止事件 + WaitForMultipleObjects 設計停止流程。本文一併整理 TerminateThread 的危險性與 D...
多執行緒實務最佳實踐 C++ 篇 ── 以 RAII 與 jthread 從結構上消除事故
C++ 的多執行緒是資料競爭會變成未定義行為的世界。本文整理 std::thread 解構函式的陷阱、以 jthread 與 stop_token 設計停止機制、scoped_lock 的死鎖迴避、atomic 的正確定位,以及與 Win32 同步 API 的使用區分。
多執行緒的實務最佳實踐 .NET篇 ── 在增加執行緒之前先決定的事
針對 .NET/C# 整理能防止「建立執行緒後偶爾當機、卡死」的設計定石。內容涵蓋不自行建立執行緒而改用 Task、減少共享可變狀態、鎖的紀律、以 CancellationToken 設計停止機制,以及 UI 執行緒的處理方式。
不能直接使用QR Code的讀取值 ── 錯誤更正通過不代表值就正確
QR Code的錯誤更正機制,並不保證只要更正通過,讀取到的值就一定正確。本文根據樣本圖片與兩種解碼器的實測,說明髒污位置不同會被讀成另一個值的原因,以及業務系統端所需的驗證方式。
相關主題
與本文相近的主題頁面。以本文為起點,可進一步連到相關服務與其他文章。
Windows 技術主題
彙整 KomuraSoft LLC 關於 Windows 開發、故障調查與既有資產活用文章的主題中心。
常見問題
整理諮詢這個主題時常見的問題。
- HCP 圖表是什麼?
- HCP 圖表是一種以階層方式描述處理流程的表達方式。規則是左側寫「要達成什麼(目的)」,右側更深的縮排寫「如何達成(手段、細節)」,最頂層(level 0)寫上目的標籤。依照這些規則撰寫文本,可以讓設計意圖與實作細節之間的對應變得容易閱讀。它的強項不只是作為圖表容易閱讀,更在於可以當成規格來管理。
- MakingHCPChartSkill 能解決什麼問題?
- 若只以人工維護圖檔,常會遇到圖和規格文字對不上、分支或階層的限制變模糊、不容易做 diff 審查等問題。MakingHCPChartSkill 的流程是把 HCP-DSL 作為 JSON request 傳入,由 hcp_render_svg.py 進行驗證與繪製。相同輸入會得到相同輸出(決定性 SVG),因此圖檔可以很自然地納入 CI 或審查流程。
- 如何開始使用 MakingHCPChartSkill?
- 先從 GitHub clone MakingHCPChartSkill 儲存庫,把 hcp-chart-svg-v2 資料夾複製到本機的 Codex skills 目錄。接著用 Python 執行 hcp_render_svg.py,以 references 內的範例 JSON 作為輸入產生 SVG 回應,再從回應 JSON 取出 svg 欄位存檔即可。儲存庫也附有歐幾里得演算法(GCD)與訂單核可流程兩個範例可以參考。
- 使用 hcp_render_svg.py 有什麼輸入限制?
- 當 renderAllModules 設為 true 時,不能同時指定 module。此外,若診斷結果 diagnostics 中含有 error,回應的 svg 或 svgs 欄位會是空的。另外舊的 hcp_xml_to_svg.py 已標記為 deprecated,目前請改用 hcp_render_svg.py。