syncfusion-javascript-scheduler について
syncfusion-javascript-schedulerは、Syncfusion EJ2 TypeScript Scheduleを実装するためのスキルです。スケジュール画面を開発する人向けに、データ、ビュー、予定編集、リソース、エクスポートなどの設定を扱います。
主な機能
- 01カレンダーとタイムラインのビュー設定
- 02ローカル・リモート予定データのバインド
- 03イベントの作成・更新・削除
- 04繰り返しイベントとリソースの管理
- 05Excel、CSV、iCalendarへのエクスポート
- 06タイムゾーンと編集テンプレートの設定
活用シーン
- 01TypeScriptで予約カレンダーを構築
- 02リソース別にスケジュールを表示
- 03繰り返し予定とタイムゾーンに対応
- 04共有用にカレンダーデータを出力
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ syncfusion/ javascript-ui-controls-skills --skill syncfusion-javascript-schedulerインストール後、Claude Code で/syncfusion-javascript-schedulerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/advanced-features.mdappointments.mdcell-header-customization.mdcrud-actions.mddata-binding.mdeditor-template.mdexporting.mdgetting-started.mdrecurrence-editor.mdresources.mdscheduler-styling.mdtimezone.mdviews.mdworking-days-timescale.md詳細
Syncfusion TypeScript Scheduler の実装
Syncfusion EJ2 TypeScript Schedule(Scheduler)コンポーネントを実装するための包括的なスキルです。複数のビュー、繰り返しイベント、リソースのグループ化、ドラッグ&ドロップ、インライン編集、データのエクスポートに対応した、充実した機能を備えるカレンダーおよび予定管理 UI です。
このスキルを使用する場面
- TypeScript プロジェクトで Scheduler をセットアップして初期化する
- カレンダービュー(Day、Week、WorkWeek、Month、Year、Agenda、Timeline の各種ビュー)を設定する
- Scheduler にローカルまたはリモートの予定データをバインドする
- イベントの CRUD(作成、読み取り、更新、削除)を実装する
- 繰り返しイベントと RecurrenceEditor を扱う
- 複数のリソースとグループ化されたビューを設定する
- イベントエディターのポップアップやクイック情報テンプレートをカスタマイズする
- Scheduler のデータを Excel、CSV、iCalendar(.ics)にエクスポートする
- グローバルなユーザーベース向けにタイムゾーンを扱う
- スタイル設定、テーマ設定、アクセシビリティ要件への準拠を行う
ドキュメントとナビゲーションガイド
はじめにとモジュールのインジェクション
📄 参照: references/getting-started.md
- パッケージの依存関係と npm のインストール
- CSS のインポートとテーマの設定
Schedule.Inject()によるモジュールのインジェクション- Scheduler の初期化と DOM への追加
eventSettings.dataSourceによる予定の設定selectedDateとcurrentViewの設定views配列によるビューごとの個別設定
ビューの設定
📄 参照: references/views.md
- 12 種類すべてのビュータイプと必要なモジュール
- ビューごとのオプション(startHour、endHour、timeScale、showWeekend など)
intervalとdisplayNameを使用した拡張ビュー- Timeline ビューの向きと Agenda ビューのオプション
予定と繰り返しイベント
📄 参照: references/appointments.md
- 通常、複数日にわたる、終日、繰り返しのイベントタイプ
- iCal
RecurrenceRule文字列の構文(FREQ、BYDAY、COUNT、UNTIL など) - 繰り返しの例外と、個々の発生または以降の発生の編集
- 組み込みイベントフィールドの参照表
eventSettings.fieldsによるカスタムフィールドのマッピングallowOverlapによる重複の防止と、sortComparerによるカスタム順序設定
データバインディング
📄 参照: references/data-binding.md
eventSettings.dataSourceによるローカル JSON 配列のバインドDataManagerとODataV4Adaptorによるリモートバインディングej2-base Ajaxを使用した AJAX 読み込みパターンincludeFiltersInQueryによるサーバー側の日付範囲フィルタリングeventSettings.queryによるクエリパラメーターの受け渡しdataBindingイベントによる Google Calendar API との統合
CRUD 操作
📄 参照: references/crud-actions.md
- エディター、クイックポップアップ、または
addEvent()メソッドによるイベントの作成 saveEvent()とdeleteEvent()による更新および削除UrlAdaptorとcrudUrlによるサーバー側の CRUDvalidationプロパティ(必須、正規表現)によるフィールド検証actionBegin/actionCompleteライフサイクルイベント- 読み取り専用モードの有効化
エディターテンプレートとクイック情報
📄 参照: references/editor-template.md
popupOpenによるデフォルトのエディターフィールドのカスタマイズeditorTemplateによるエディター全体の置き換えeditorHeaderTemplateとeditorFooterTemplatequickInfoTemplatesによるカスタムクイック情報ポップアップshowQuickInfoの切り替えとcloseEditor()メソッドtimezoneDataSourceによるカスタムタイムゾーンドロップダウン
リソースとグループ化
📄 参照: references/resources.md
resourcesプロパティとフィールドマッピングによるリソースの定義group.resourcesによる単一レベルおよび複数レベルのグループ化group.byDateによる日付ベースのグループ化allowMultipleによるイベントへの複数リソースの割り当て- リソースごとの稼働時間、色、CSS クラス
- Timeline ビューでの展開可能なリソース行
稼働日、稼働時間、タイムスケール
📄 参照: references/working-days-timescale.md
workDays、showWeekend、showWeekNumber、firstDayOfWeekworkHoursのハイライト、開始、終了の設定- 表示する時間範囲を設定する
startHour/endHour intervalとslotCountを指定するtimeScale- メジャー/マイナーのスロットテンプレート
- プログラムから時間をスクロールする
scrollTo()
セル、ヘッダー、ビューのカスタマイズ
📄 参照: references/cell-header-customization.md
elementType条件を指定するcellTemplate- 対象のセルを変更する
renderCellイベント - Month ビューの日付ヘッダー用
cellHeaderTemplate - ヘッダーバー:
showHeaderBar、toolbarItems、dateHeaderTemplate - Year/Month/Week/Date/Hour 行を指定する Timeline の
headerRowsプロパティ - 日付範囲を制限する
minDate/maxDate
エクスポートと印刷
📄 参照: references/exporting.md
ExportOptions(fileName、fields、customData など)を指定するexportToExcel()exportType: 'csv'による CSV エクスポート- エクスポート前にカスタマイズする
excelExportイベント .ics形式にエクスポートするexportToICalendar()- ファイルの Blob からインポートする
importICalendar() beforePrintイベントを備えたprint()メソッド
タイムゾーンの処理
📄 参照: references/timezone.md
timezoneプロパティ(IANA タイムゾーン文字列)- イベントごとの
StartTimezone/EndTimezoneフィールド offset()、convert()、add()、remove()を備えたTimezoneユーティリティクラスtimezoneDataによるタイムゾーンドロップダウンのカスタマイズ- グローバル/複数地域のチーム向け UTC モード
繰り返しエディター
📄 参照: references/recurrence-editor.md
- 単独で使用する
RecurrenceEditorコンポーネントのセットアップ frequenciesおよびendTypesプロパティの設定- 生成されたルール文字列を取得する
changeイベント setRecurrenceRule()およびgetRecurrenceDates()メソッド
スタイル設定とテーマ
📄 参照: references/scheduler-styling.md
- Scheduler の全要素に対応する CSS クラスセレクターの一覧
- ビューにスコープを限定したセレクター(
.e-vertical-view、.e-month-viewなど) - 選択されたセルや予定の状態クラス
- Timeline ビューのリソース行セレクター
- ブロックされた予定と読み取り専用の予定のスタイル
高度な機能
📄 参照: references/advanced-features.md
ContextMenuを使用したコンテキストメニューの統合- クリップボード:
allowClipboard、cut()、copy()、paste()、beforePasteイベント allowVirtualScrollingとenableLazyLoadingによる仮想スクロール- Timeline ビューと Month ビュー向けの
rowAutoHeight enablePersistenceによる状態の永続化calendarMode: 'Islamic'によるイスラム暦/ヒジュラ暦- Scheduler のサイズ:
heightとwidth - アクセシビリティ、WCAG 2.2、キーボードショートカット
クイックスタート
import { Schedule, Day, Week, WorkWeek, Month, Agenda } from '@syncfusion/ej2-schedule';
// Inject required view modules
Schedule.Inject(Day, Week, WorkWeek, Month, Agenda);
let scheduleObj: Schedule = new Schedule({
height: '550px',
selectedDate: new Date(2018, 1, 15),
currentView: 'Week',
eventSettings: {
dataSource: [
{
Id: 1,
Subject: 'Team Meeting',
StartTime: new Date(2018, 1, 15, 10, 0),
EndTime: new Date(2018, 1, 15, 12, 0)
}
]
}
});
scheduleObj.appendTo('#Schedule');
/* In styles.css */
@import '../../node_modules/@syncfusion/ej2-base/styles/fluent2.css';
@import '../../node_modules/@syncfusion/ej2-buttons/styles/fluent2.css';
@import '../../node_modules/@syncfusion/ej2-calendars/styles/fluent2.css';
@import '../../node_modules/@syncfusion/ej2-dropdowns/styles/fluent2.css';
@import '../../node_modules/@syncfusion/ej2-inputs/styles/fluent2.css';
@import '../../node_modules/@syncfusion/ej2-navigations/styles/fluent2.css';
@import '../../node_modules/@syncfusion/ej2-popups/styles/fluent2.css';
@import '../../node_modules/@syncfusion/ej2-schedule/styles/fluent2.css';
よくあるパターン
パターン 1:週末を非表示にして Month ビューに切り替える
import { Schedule, Month } from '@syncfusion/ej2-schedule';
Schedule.Inject(Month);
let scheduleObj: Schedule = new Schedule({
height: '550px',
currentView: 'Month',
showWeekend: false,
eventSettings: { dataSource: [...] }
});
scheduleObj.appendTo('#Schedule');
パターン 2:フィールド名をカスタマイズする
let scheduleObj: Schedule = new Schedule({
height: '550px',
eventSettings: {
dataSource: myData,
fields: {
id: 'EventId',
subject: { name: 'Title' },
startTime: { name: 'From' },
endTime: { name: 'To' },
isAllDay: { name: 'AllDay' }
}
}
});
scheduleObj.appendTo('#Schedule');
パターン 3:プログラムから予定を作成する
let eventData: Object = {
Id: 10,
Subject: 'New Event',
StartTime: new Date(2018, 1, 15, 14, 0),
EndTime: new Date(2018, 1, 15, 16, 0)
};
scheduleObj.addEvent(eventData);
パターン 4:リソース別にグループ化した Timeline
import { Schedule, TimelineViews } from '@syncfusion/ej2-schedule';
Schedule.Inject(TimelineViews);
let scheduleObj: Schedule = new Schedule({
height: '550px',
currentView: 'TimelineWeek',
group: { resources: ['Rooms'] },
resources: [{
field: 'RoomId',
title: 'Room',
name: 'Rooms',
dataSource: [
{ RoomText: 'Room 1', Id: 1, RoomColor: '#cb6bb2' },
{ RoomText: 'Room 2', Id: 2, RoomColor: '#56ca85' }
],
textField: 'RoomText',
idField: 'Id',
colorField: 'RoomColor'
}],
eventSettings: { dataSource: [...] }
});
scheduleObj.appendTo('#Schedule');
主要プロパティのリファレンス
| プロパティ | 型 | 説明 |
|---|---|---|
height | string | スケジューラーの高さ('550px'、'100%'、'auto') |
width | string | スケジューラーの幅 |
selectedDate | Date | 現在表示されている日付 |
currentView | string | アクティブなビュー名 |
views | ViewsModel[] | ビューごとの設定配列 |
eventSettings | EventSettingsModel | データソースとフィールドのマッピング |
group | GroupModel | リソースのグループ化設定 |
resources | ResourcesModel[] | リソースの定義 |
workDays | number[] | 表示する曜日(0=日~6=土) |
workHours | WorkHoursModel | 勤務時間の強調表示と範囲 |
showWeekend | boolean | 土曜日と日曜日の表示/非表示 |
timezone | string | 表示に使用するIANAタイムゾーン文字列 |
enablePersistence | boolean | localStorageに状態を永続化 |
readonly | boolean | すべてのCRUD操作を無効化 |
allowClipboard | boolean | イベントの切り取り/コピー/貼り付けを有効化 |