Sample Build 1.0.47

Bone Flow #054 週報サンプル 使い方ガイド

#024 Calendar + #048 Table + #054 Display Timeline を、JSON/CSVの業務データと結び付けて使うための初心者向け説明書です。

weekly-report-data.json + holiday.csv → #024 Calendar Manager → #048 Table → #054 表示設定 → LocalStorage / JSON保存

1. 最初にやること

Installerを実行
ZIPを展開して install.bat を実行します。標準の確認URLは http://localhost/boneflow/sample/054/weekly-report/ です。
まずそのまま表示
最初はHTML/JS/CSS/Dataを分解せず、配布状態のまま動作を確認します。
weekly-report-data.json を編集
初期Task・区分・表示設定はJSON、祝日は holiday.csv から読み込みます。以後のTask/区分/Event/祝日編集は#024 Calendar Managerで行います。
画面編集を保存
Calendar Managerのデータ変更と「表示設定」「#054タスク表示設定」はBrowser LocalStorageへ保存します。
重要: #024 / #048 / #054 のFrozen Runtime本体をこのサンプル都合で変更しません。カレンダーTask Icon、備考、時間集計などはConsumer側で連携しています。

2. JS / CSS / Data の設置方法

Installer後の基本配置は次です。すべて同じディレクトリに置くのが最も簡単です。

boneflow/
└─ sample/054/weekly-report/
   ├─ index.html
   ├─ boneflow-weekly-report.js
   ├─ boneflow-weekly-report.css
   ├─ weekly-report-data.json
   ├─ holiday.csv
   └─ weekly-report-guide.html

HTMLではCSSを <head>、JSを </body> の直前で読み込みます。

<link rel="stylesheet" href="./boneflow-weekly-report.css">
...
<script src="./boneflow-weekly-report.js"></script>

このJSはサンプルConsumerと必要なBundled Runtimeを含みます。#054側ではCalendarへ移したデータ編集UIを複製せず、#040/#118を必須依存にしません。#022は選択強調に利用できる場合だけ任意利用し、バージョン完全一致で起動を止めません。CDNやクエリ文字列によるキャッシュバスターは使いません。

HTML Functional Classの中心

<div id="bf-weekly-calendar" class="bf-calendar"></div>
<div id="bf-weekly-table" class="bf-table"></div>

Display Timelineは週報TableのCell Renderer 054 として入り、各行の中に bf-display-timeline が生成されます。

3. weekly-report-data.json の全体構造

{
  "schemaVersion": 12,
  "selectedDate": "2026-09-14",
  "dayRemarks": {},
  "settings": { ... },
  "types": [ ... ],
  "records": [ ... ]
}
キー役割
selectedDate初期選択日。Calendarと週報7日行の基準になります。
dayRemarks日付別の自由備考。例 {"2026-09-14":"現地直行"}
settingsTheme、表示時間、目盛step、snap、縦線、Calendar Iconサイズ、#118 Transition。
types勤務・休憩・会議などの種別マスタ。
recordsTask / カスタム休日 / 記念日などの日付データ。

表示設定の例

"settings": {
  "theme": "dark",
  "startTime": "00:00",
  "endTime": "23:59",
  "timeBarHeightPx": 58,
  "calendarIconSizePx": 14,
  "timelineStepMinutes": 180,
  "timelineSnapMinutes": 15,
  "timelineShowGrid": true,
  "colorPickerTransition": "teleport-up"
}

4. Taskデータの作り方

通常Taskは recordType: "schedule" です。

{
  "id": "mon-meeting",
  "recordType": "schedule",
  "date": "2026-09-14",
  "label": "週次ミーティング",
  "content": "週次進捗と課題を確認",
  "start": "10:00",
  "end": "10:30",
  "typeId": "meeting",
  "displayType": "shapeComment",
  "icon": "",
  "backgroundColor": "",
  "backgroundOpacity": null,
  "textColor": "",
  "showInRemarks": true,
  "commentOffsetX": 0,
  "commentOffsetY": 0,
  "commentWidth": 120
}
Property意味
typeIdtypes[].id を指定。空ではなく既存種別を使います。
displayTypebar = タイムバー、shapeComment = 図形コメント。
content項目名とは別の複数行内容。Task設定のtextareaで編集できます。
backgroundColor空欄なら種別背景色を継承。Gradientも正式#040の構造化値を保存できます。
backgroundOpacitynullなら種別透過率を継承。0〜100。
textColor空欄なら種別文字色を継承。
showInRemarkstrueなら右端の備考へIcon + Task名を表示。
commentWidth図形コメント幅。72〜240px。

種別マスタの例

{
  "id": "meeting",
  "label": "会議",
  "kind": "meeting",
  "icon": "●",
  "backgroundColor": "#B45309",
  "backgroundOpacity": 100,
  "textColor": "#FFF7CC",
  "textOpacity": 100,
  "showCalendarIcon": true
}

showCalendarIcon がtrueの種別だけ、Calendar日付セルへTask Iconを表示します。

5. 祝日データの使い方

国民の祝日は holiday.csv へ分離します。JSへ祝日をハードコードしません。

国民の祝日・休日月日,国民の祝日・休日名称
2026/9/21,敬老の日
2026/9/22,休日
2026/9/23,秋分の日

読込後、Calendarには 🎌 を使って表示し、週報Tableでは右端の備考へ 🎌 敬老の日 の形式で表示します。

画面から差し替える場合: 「祝日CSV読込」→ CSVを選択。内閣府CSVへのリンクは取得用で、Import操作とは分離されています。

6. #024 Calendar の設置・データ連携・表示

設置

<div id="bf-weekly-calendar"
     class="bf-calendar"
     data-week-start="monday"
     data-theme="dark"
     data-show-tasks="true"></div>

データとの関連

Calendarで日付選択 → store.selectedDate更新 → 選択日のTask一覧更新 → #048週報Tableをその週へ更新 → #054 Timelineも再描画

Calendarの祝日は holiday.csv、Taskは weekly-report-data.json.records の date で同じ日付に結び付きます。

Icon表示

7. #048 週報Table の考え方

週7行は#048 Tableが所有します。現在の列は次の順です。

曜日 / 日付 / 開始時間 / 終了時間 / 休憩時間 / 勤務時間 / Display Timeline / 備考

勤務集計は kind=work の業務区間から、kind=break と重なる休憩を差し引いて計算します。祝日・自由備考・「備考に表示」ONのTaskは一番右の備考へ集約します。

8. #054 Display Timeline の使用方法

このサンプルでは #048のCell Rendererとして #054を使います。主要設定は次です。

{
  start: "00:00",
  end: "23:59",
  step: 180,
  snap: 15,
  barHeight: 58,
  timeAxisMode: "group-first",
  groupIndex: 0,
  showGrid: true,
  editable: true,
  theme: "dark"
}

timeAxisMode="group-first" のため、時間軸ラベルは週7行の先頭行だけに表示します。各行の groupIndex は0〜6です。

直接Runtimeを使う最小例

const host = document.querySelector("#timeline");
const items = [
  {
    id: "work-1",
    label: "勤務",
    kind: "work",
    displayType: "bar",
    start: "09:00",
    end: "18:00",
    backgroundColor: "#245A91",
    textColor: "#FFFFFF"
  },
  {
    id: "meeting-1",
    label: "定例会議",
    kind: "meeting",
    displayType: "shapeComment",
    start: "14:00",
    end: "15:00",
    commentText: "進捗確認",
    commentWidth: 120,
    commentOffsetX: 0,
    commentOffsetY: 0
  }
];
BoneDisplayTimeline.create(host, {
  start: "00:00", end: "23:59", step: 60, snap: 15,
  timeAxisMode: "all", showGrid: true, editable: true,
  theme: "dark"
}, items);

編集

編集イベント bone-display-timeline:change をConsumerが受けて、Taskの開始/終了やコメント位置を保存します。

9. LocalStorage / JSON Download / Import

LocalStorage
画面編集後の状態を同じBrowserで保持します。再読込しても復元します。
JSON
「現在データJSON」で現在状態を書き出せます。「JSON読込」で別データへ差し替え可能です。

外部の weekly-report-data.json + holiday.csv に戻したい場合は「データファイル再読込」を使います。Browser保存内容は置き換わります。

10. 背景色・文字色・#118 Transition

背景色・文字色はConsumer独自Pickerではなく、正式 BoneColorPicker.attachCaller(...) を使用します。

禁止: native input[type=color]、独自Palette、#040 Overlay複製、#040内部DOM直接操作。

#118 Transitionはページ全体やTimelineへ掛けません。#040 ColorPicker OverlayのOPEN/CLOSEだけに使用します。

11. よく使うサンプル

勤務 + 休憩

{"recordType":"schedule","date":"2026-09-14","label":"勤務","start":"09:00","end":"18:00","typeId":"work","displayType":"bar"}
{"recordType":"schedule","date":"2026-09-14","label":"休憩","start":"12:00","end":"13:00","typeId":"break","displayType":"bar"}

この場合、週報列は開始09:00 / 終了18:00 / 休憩01:00 / 勤務08:00になります。

備考へ会議名を出す

{
  "recordType":"schedule",
  "date":"2026-09-14",
  "label":"顧客定例会議",
  "start":"14:00",
  "end":"15:00",
  "typeId":"meeting",
  "displayType":"shapeComment",
  "showInRemarks":true
}

日付だけの自由備考

"dayRemarks": {
  "2026-09-14": "現地直行 / 17:30 日報提出"
}

v1.0.47 データ責務の分離

#024 Calendarが所有: タスク区分 / タスク(日付・開始・終了・区分・名称・内容・メモ・備考表示) / イベント / 祝日Annotation。
#054 Sampleが所有: Timeline開始/終了、目盛step、snap、縦線、バー高さ、BODYテーマ、Calendar表示系設定、タスクごとの bar / shapeComment、図形コメント幅/X/Y。

同じTask/Typeデータを#054側にもう一つの入力フォームとして持たせません。Calendar Managerの変更イベントを受け、週報TableとDisplay Timelineへ同期します。

12. 困ったときの確認順

症状確認
画面が出ないlocalhostで開いているか、JS/CSSファイル名が boneflow-weekly-report.js / boneflow-weekly-report.css か、Console Errorがないか。
Dataが出ないweekly-report-data.json と holiday.csv が同じディレクトリにあるか。HTTP経由で開いているか。
Task IconがCalendarに出ない種別の「カレンダーへアイコン表示」がONか。Task/種別Iconが設定されているか。
祝日が出ないその週に祝日があるか。CSVの日付形式が YYYY/M/D か。
Timelineが動かせないeditable:true、snap設定、Taskがscheduleかを確認。
色Pickerが開かない#118 Runtime + Functional Class + #040 Runtimeが既存 /boneflow/js/ にあるか。
直接URL: http://localhost/boneflow/sample/054/weekly-report/weekly-report-guide.html
このガイドはオフライン配布ファイルです。外部ライブラリ/CDNは使用しません。