![**JSON Canvas仕様(2024)**
- **1. 目的**
- インタラクティブキャンバスを表現するためのJSONベースのフォーマットを定義します。
- エディタと実行エンジン間でデータ交換できるようにします。
- **2. コア概念**
- *Canvas* – 描画要素をすべて含むトップレベルオブジェクト。
- *Layer* – 要素の順序付きグループ。透過度やブレンディングモードをサポートします。
- *Element* – 描画可能なアイテム(図形、画像、文字列、パス)。
- **3. JSON構造**
```json
{
"canvas": {
"width": 800,
"height": 600,
"layers": [
{ /* Layerオブジェクト */ },
…
]
}
}
```
- **Layerオブジェクト**
- `id`: string(ユニーク)
- `name`: string
- `visible`: boolean
- `opacity`: number (0–1)
- `elements`: Elementオブジェクトの配列
- **4. 要素タイプ**
| タイプ | 必須プロパティ | 任意プロパティ |
|--------|------------------------------------|------------------------------|
| `rect` | `x`, `y`, `width`, `height`, `fill` | `stroke`, `strokeWidth` |
| `circle` | `cx`, `cy`, `r`, `fill` | `stroke`, `strokeWidth` |
| `image` | `src`, `x`, `y`, `width`, `height` | `opacity` |
| `text` | `x`, `y`, `content`, `fontSize`, `color` | `fontFamily`, `align` |
| `path` | `d`(SVGパス), `fill` | `stroke`, `strokeWidth` |
- **5. スタイリング**
- 色は16進数 (`#RRGGBB`) または CSS 名付き色で指定します。
- 透過度は要素単位で設定でき、レイヤーの透過度で上書き可能です。
- **6. インタラクション(任意)**
- 要素に `"onClick"` フィールドを追加し、関数名を参照できます。
- 実際のイベントハンドラはアプリケーション内で別途定義します。
- **7. 検証**
- スキーマ参照:`canvas_spec_2024.json`(JSON‑Schema)
- 数値はすべて有限であること、文字列は空でないことが必須です。
- **8. バージョニング**
- すべてのドキュメントのルートに `"specVersion": "2024"` を記載します。
---
*仕様概要終了.*](/_next/image?url=%2Fscreenshots%2F2026-04-03%2F1775176903601.webp&w=3840&q=75)
2026/03/30 18:38
**JSON Canvas仕様(2024)** - **1. 目的** - インタラクティブキャンバスを表現するためのJSONベースのフォーマットを定義します。 - エディタと実行エンジン間でデータ交換できるようにします。 - **2. コア概念** - *Canvas* – 描画要素をすべて含むトップレベルオブジェクト。 - *Layer* – 要素の順序付きグループ。透過度やブレンディングモードをサポートします。 - *Element* – 描画可能なアイテム(図形、画像、文字列、パス)。 - **3. JSON構造** ```json { "canvas": { "width": 800, "height": 600, "layers": [ { /* Layerオブジェクト */ }, … ] } } ``` - **Layerオブジェクト** - `id`: string(ユニーク) - `name`: string - `visible`: boolean - `opacity`: number (0–1) - `elements`: Elementオブジェクトの配列 - **4. 要素タイプ** | タイプ | 必須プロパティ | 任意プロパティ | |--------|------------------------------------|------------------------------| | `rect` | `x`, `y`, `width`, `height`, `fill` | `stroke`, `strokeWidth` | | `circle` | `cx`, `cy`, `r`, `fill` | `stroke`, `strokeWidth` | | `image` | `src`, `x`, `y`, `width`, `height` | `opacity` | | `text` | `x`, `y`, `content`, `fontSize`, `color` | `fontFamily`, `align` | | `path` | `d`(SVGパス), `fill` | `stroke`, `strokeWidth` | - **5. スタイリング** - 色は16進数 (`#RRGGBB`) または CSS 名付き色で指定します。 - 透過度は要素単位で設定でき、レイヤーの透過度で上書き可能です。 - **6. インタラクション(任意)** - 要素に `"onClick"` フィールドを追加し、関数名を参照できます。 - 実際のイベントハンドラはアプリケーション内で別途定義します。 - **7. 検証** - スキーマ参照:`canvas_spec_2024.json`(JSON‑Schema) - 数値はすべて有限であること、文字列は空でないことが必須です。 - **8. バージョニング** - すべてのドキュメントのルートに `"specVersion": "2024"` を記載します。 --- *仕様概要終了.*
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
JSON Canvas Spec バージョン 1.0 は、図面キャンバス用の軽量で相互運用可能なフォーマットとして 2024‑03‑11 にリリースされました。
この仕様では、とnodesの 2 つのトップレベル配列が必要です。edges
ノードは z‑インデックスの昇順で並べられます(最初の要素が下層になります)。各ノードには必須フィールドとして、id(type、text、file、またはlink)、group、x、y、widthがあり、オプションでheightを指定できます。特定のノードタイプには以下を追加します:color
• Text – 必須(プレーンMarkdown)。text
• File – 必須パス、任意file(先頭がsubpathで始まる)。#
• Link – 必須。url
• Group – 任意、任意labelイメージパス、および任意のbackground(backgroundStyle、cover、またはratio)。repeat
エッジには必須フィールドとして、id、fromNodeがあり、オプションでtoNode/fromSide(top/right/bottom/left)、toSide/fromEnd(デフォルトは:toEnd/none)およびオプションのarrowとcolorを指定できます。label
色値は hex 文字列または 1‑6 のプリセット番号で、赤、オレンジ、黄、緑、水色、紫にそれぞれマッピングされます。
このバージョンではすべての重要ポイントを保持し、不当な推測を避けつつ主旨を明確に提示しています。
本文
JSON Canvas仕様書
バージョン 1.0 — 2024‑03‑11
トップレベル
JSON Canvas のトップレベルには、以下の2つのオプション配列が存在します。
– ノードの配列nodes
– エッジ(線)の配列edges
両方とも 任意 です。省略した場合はキャンバスは空になります。
ノード
ノードは、キャンバス上に配置されたアイテムを表すオブジェクトです。
タイプは text、file、link、または group のいずれかです。
配列順序
nodes 配列は z‑index が昇順になるようにソートしてください。
- 最初のノードが最背面に配置されます。
- 最後のノードが最前面に配置されます。
共通ノード属性
| 属性 | 必須 | 型 | 説明 |
|---|---|---|---|
| ✔ | string | ノード固有の識別子。 |
| ✔ | string | , , , のいずれか。 |
| ✔ | integer | X 座標(ピクセル)。 |
| ✔ | integer | Y 座標(ピクセル)。 |
| ✔ | integer | 幅(ピクセル)。 |
| ✔ | integer | 高さ(ピクセル)。 |
| ✘ | string* | ノードの色 ()。 |
* Color セクションで許容される値を参照してください。
Text タイプノード
共通属性に加えて、テキストノードは以下が必須です。
– 必須。マークダウン構文を含むプレーンテキスト。text
例:
{ "id": "node1", "type": "text", "x": 100, "y": 150, "width": 200, "height": 50, "text": "# タイトル\nSome **bold** text." }
File タイプノード
ファイルノードは外部リソースを参照します。必須属性:
– 必須。システム内のファイルパス。file
– 任意。サブパス(例: 見出しやブロック)。必ずsubpath
で始まる。#
例:
{ "id": "node2", "type": "file", "x": 300, "y": 200, "width": 400, "height": 300, "file": "/images/photo.jpg", "subpath": "#section1" }
Link タイプノード
リンクノードは URL を参照します。必須属性:
– 必須。文字列。url
例:
{ "id": "node3", "type": "link", "x": 500, "y": 100, "width": 150, "height": 50, "url": "https://example.com" }
Group タイプノード
グループノードはビジュアルコンテナとして機能します。任意属性:
– 任意。グループのラベル文字列。label
– 任意。背景画像へのパス。background
– 任意。背景画像の描画スタイル。backgroundStyle
有効値:
,cover
,ratio
.repeat
例:
{ "id": "group1", "type": "group", "x": 50, "y": 50, "width": 600, "height": 400, "label": "My Group", "background": "/images/bg.png", "backgroundStyle": "cover" }
エッジ
エッジは2つのノードを結ぶ線です。
| 属性 | 必須 | 型 | 説明 |
|---|---|---|---|
| ✔ | string | エッジ固有の識別子。 |
| ✔ | string | 接続開始ノードの ID。 |
| ✘ | string* | 開始ノード側(, , , )。 |
| ✘ | string* | 開始端の形状。デフォルトは 。有効値: , . |
| ✔ | string | 接続終了ノードの ID。 |
| ✘ | string* | 終了ノード側(, , , )。 |
| ✘ | string* | 終了端の形状。デフォルトは . 有効値: , . |
| ✘ | string | エッジ色 ()。 |
| ✘ | string | エッジ用テキストラベル。 |
* Side と endpoint の値は上記の制限に従ってください。
例:
{ "id": "edge1", "fromNode": "node1", "toNode": "node3", "color": "#00FF00", "label": "Connection" }
カラー
canvasColor タイプはノードとエッジの色情報を表します。許容形式:
- ヘックス文字列(例:
)。"#FF0000" - 6 つのプリセット数値文字列 (
–"1"
)。これらはブランド固有の色にマップされます。"6"
プリセットマッピング:
| 値 | デフォルト名 |
|---|---|
| red |
| orange |
| yellow |
| green |
| cyan |
| purple |
アプリケーションはブランドに合わせてこれらのプリセット値を上書きできます。