Meaning · Connect · Express · Validate

Bone Flow #001 - Bone Core Guide

Bone Flow全体の概念と、すべてのComponentが共有するCoreの意味を理解するための入口です。

1. まず最初に:Bone Flowとは何か

Bone Flowは、UIを「画面部品の集まり」としてだけ扱うのではなく、意味 → 接続 → 表現 → 検証という流れとして扱うための基盤です。

最初に覚える1行: Boneは「意味」を持ち、Jointが「意味をつなぎ」、UIが「見た目に変換」し、Validationが「正しく動ける状態か」を確認します。
#001 Bone Core意味の最小単位
id / type / value
→
#002 JointBone同士を接続
Port / Compatibility / State / Delivery
→
UI ComponentsText / Icon / Image / Shape / Input ...
意味を人が見える形へ表現
Validation構造・値・接続・状態を確認し、壊れた理由を分類する
EditorBoneや接続、各Component設定を作成・編集する

2. なぜこの分離が必要なのか

一般的なUI実装では、データ・イベント・DOM・CSS・接続・エラー処理が1つのComponentへ入り込みやすく、見た目を直しただけでデータ処理が壊れる、接続異常の原因が見えない、別画面へ再利用しにくい、といった問題が起きます。

01 意味を定義何を扱うかをBoneとして定義。
02 接続するJointが意味を次へつなぐ。
03 見た目に変換UI Componentが表示・操作へ変換。
04 検証するSmoke / Validationで状態を確認。

この分離により、同じ意味をTextにもIconにも別の画面にも流せるようにし、見た目の変更と意味の変更を切り離します。

3. #001 Bone Coreは何をするComponentか

#001はBone Flowの中で最初に読み込まれる中核Runtimeです。後続UIの見た目を描くComponentではなく、Bone Flowが扱う「意味の単位」とそのライフサイクルを定義します。

#001が担当する#001が担当しない
✓ id / type / value の検証と保持× Jointの線・Port・接続状態
✓ create / clone / update / replace× Text / Icon / Image等の描画
✓ normalize / serialize / deserialize× Property Editor
✓ destroy / isDestroyed× Animation / Transition
✓ Coreエラーと非破壊性× Joint WAIT / FIFO / BLOCKED

4. Boneの最小構造

{
  "id": "customer-name",
  "type": "text",
  "value": "山田 太郎"
}
Property意味Coreでの扱い
idBoneを識別するID必須。文字列。未指定・空文字・型不正を拒否。
typeそのBoneが何を意味するかを示す型必須。文字列。未指定・空文字・型不正を拒否。
value実際に運ぶ値必須。null / primitive / array / objectを扱える。循環参照等は拒否。

Bone自身は色・フォント・線・アニメーション・DOMを持ちません。それらは表現層の責務です。

5. #001から#002 Jointへどうつながるか

#001がBoneを作っただけでは、まだ他Componentへ情報は流れません。#002 JointがSource/TargetのEndpointとPortを接続し、互換性・状態・配送を扱います。

重要: #001のGuideにJoint図を置くのは「概念を理解するため」です。#001がJoint機能を実装しているという意味ではありません。
const bone = BoneCore.create({
  id: "title",
  type: "text",
  value: "こんにちは"
});

// このBoneをJointが次のComponentへ配送し、
// Text等のUIが value を見た目として表現する。

6. 単体QAと「000 Development Order 累積回帰テスト」の違い

Bone Flowでは、Component自身を確認するテストと、統合されたboneflow.js / boneflow.cssを確認する累積回帰テストを分けています。

確認対象目的
Smoke Test#001 Bone Core単体主要APIと基本動作が短時間で正常に動くかを確認。
Validation Report#001 Bone Core単体異常入力、エラー分類、非破壊性、仕様条件まで詳細確認。
000 Development Order 累積回帰テスト統合されたBone Flow全体#002以降を追加してboneflow.js / boneflow.cssを再生成しても、#001など過去Componentが壊れていないか確認。
開発の流れ: Component単体QA → srcへ正式追加 → boneflow.js / boneflow.css再生成 → 000累積回帰テスト、の順で確認します。

7. BoneCore Public API

BoneCore.create()入力から新しいBoneを生成。
BoneCore.clone()Boneを独立コピー。
BoneCore.update()指定項目を部分更新。
BoneCore.replace()Bone全体を置換。
BoneCore.normalize()入力をCore正式構造へ正規化。
BoneCore.serialize()BoneをJSON文字列へ変換。
BoneCore.deserialize()JSON文字列からBoneへ復元。
BoneCore.destroy()Boneを破棄状態へ移行。
BoneCore.isDestroyed()破棄済みか確認。

基本例

const bone = BoneCore.create({ id:"message", type:"text", value:"Hello" });
const cloned = BoneCore.clone(bone);
const updated = BoneCore.update(bone, { value:"Hello Bone Flow" });
const json = BoneCore.serialize(updated);
const restored = BoneCore.deserialize(json);

8. 非破壊性とライフサイクル

#001では、元入力や元Boneを予期せず書き換えないことが重要です。clone/update/replace/serialize/deserializeを跨いでも「どのBoneが現在の値なのか」を追えるようにします。

9. Core Error / Validation

Coreは不正データを黙って補正して進めるのではなく、原因を分類できるエラーコードを持ちます。

BONE_INPUT_UNDEFINEDBONE_INPUT_NULLBONE_INPUT_NOT_OBJECTBONE_ID_REQUIREDBONE_ID_TYPEBONE_ID_EMPTYBONE_TYPE_REQUIREDBONE_TYPE_TYPEBONE_TYPE_EMPTYBONE_VALUE_REQUIREDBONE_VALUE_CIRCULARBONE_DESTROYEDBONE_UPDATE_DESTROYEDBONE_SERIALIZE_DESTROYEDBONE_JSON_BROKEN

Test画面では、正常系をSmoke Test、異常入力や拒否条件をValidationとして分けて実行します。両方PASSするまでは完了操作を有効にしません。

10. boneflow.js / boneflow.css は何か

最終利用者がBone Flowを利用するときの共通配布物が boneflow.js と boneflow.css です。

File役割
boneflow.js#001から順に、確認済みComponent Runtime / HTML Functional Class等を規定順で束ねる最終JS。
boneflow.css確認済みComponentのCSSを束ねる最終CSS。Component固有CSSは他Componentへ漏れないようスコープする。

原則: 最終bundleを直接手編集しません。編集元は src/、bundleはbuildで再生成します。

11. 新しいBone Flowのソース構成

public/ ├─ index.html ← http://localhost/ の全体INDEX └─ boneflow/ ├─ boneflow.js ← 最終JS bundle ├─ boneflow.css ← 最終CSS bundle ├─ src/ │ ├─ js/001-core/ ← #001 JS正本ソース │ └─ css/001-core/ ← #001 CSS正本ソース ├─ tools/ │ ├─ BUNDLE-JS.txt ← JS結合順 │ ├─ BUNDLE-CSS.txt ← CSS結合順 │ └─ build-boneflow.ps1/bat ← bundle生成 ├─ test/bone-core.html └─ docs/001-Bone-Core.html

後続Componentは、正本確認・Smoke/Validation・ブラウザ確認を行ったものだけを src に追加し、bundleへ積み上げます。

12. CSSテーマ:Light / Dark / Neon

Bone Flowのテーマは Light / Dark / Neon の3系統です。Light/Darkは一般的な表示テーマ、Neonは従来のBone Flow UIで使ってきた濃紺・シアンを中心とする固有イメージです。

Neonは「全部を発光させる」デザインではありません。暗いベースの中で、接続・状態・選択・重要箇所をネオン色で識別します。

13. Smoke Test / Validation / Completion

Bone FlowではRuntimeが読み込めただけで完成とはしません。#001 Test画面では、正常系Smoke、異常系Validation、レポート、Runtime Console、Completionを独立して確認します。

  1. Smoke Testを実行。
  2. Validationを実行。
  3. 総テスト数 / PASS / FAIL / 経過時間 / Versionを確認。
  4. 必要ならJSON / MDレポートを保存。
  5. 両方PASSした場合だけローカル完了操作を許可。
  6. ユーザーlocalhost確認前は正式Completed / Specification Frozenとしない。

14. #001を理解したあとに見る順番

#001で「意味」を理解したら、次は#002 Jointで「接続」を理解します。その後、Text / Icon / Image / Shapeなどの表現Componentを見ると、Bone Flow全体の責務分離がつながります。

理解の順番: #001 Core → #002 Joint → 表現Component → 入力Component → Editor / Validation → Motion系Component

15. #001の位置づけ

#001 Bone Coreは「最初の小さな部品」ではなく、Bone Flowという仕組み全体の意味モデルを定義する基礎です。後続Componentを追加しても、Coreの責務をUI側へ移したり、UI都合でBone構造を勝手に変えたりしません。

Bone Flowを理解する = まず#001で「意味を小さく保つ」考え方を理解することです。