FullCalendar のリソースタイムラインとリソース列は Premium の機能で、商用アプリでは有料のライセンスキーが必要です。ライセンスページには、無料で使える場合として、アプリ全体が AGPL の場合と、登録済みの非営利団体の場合が挙げられています。Needless UI のスケジューラーは、そのどちらも MIT ライセンスで提供し、繰り返しの予定と iCalendar ファイルにも対応しています。このガイドでは、Angular アプリを FullCalendar から Needless UI へ移行します。そのまま移せるもの、移せないもの、変換が必要なデータを順に見ていきます。

FullCalendar 7 の名前を使い、バージョン 6 で名前が異なる場合は角かっこで併記します。FullCalendar の Angular コネクターは Angular 16 から 22 に対応していますが、Needless UI には Angular 22 が必要です。

機能の比較

FullCalendar と Needless UI のスケジューラー
機能FullCalendarNeedless UI
リソースタイムライン:会議室や人ごとに1行Premium対応:1日、1週間、1か月
日表示と週表示でリソースを列に並べるPremium対応
月、週、日の各ビュー無料対応
ドラッグで移動、リサイズ無料(別のリソースへの移動は Premium)対応。別のリソースへも移動できる。リサイズは終端だけで、始端からはできない。
時間を選択して予定を作成無料対応:ポインター、長押し、キーボードで選択
重複禁止などのルール無料:overlap と constraint のオプション対応:変更のたびに確認する allow 関数1つ
キーボードで予定を移動、リサイズアクセシビリティのドキュメントに記載なし(扱うのは ARIA ラベルと Tab キーでのフォーカス)対応:スクリーンリーダーで読み上げ
繰り返しの予定無料(rrule のプラグインとライブラリを使用)標準で対応:RFC 5545 のルール(EXRULE、RDATE、時間単位のルールは除く)
iCalendar(.ics)無料:フィードの読み込み.ics ファイルの読み込みと書き出し
リスト表示と年表示無料今後数日の予定リスト(年表示はなし)
タイムゾーン無料:ローカル、UTC、名前付きのタイムゾーン非対応:受け取った時刻をそのまま表示
グループ化、入れ子、複数列のリソースPremium非対応:テンプレートで描画する1列のみ
外部からのドラッグ&ドロップ、背景イベント無料非対応
印刷、仮想レンダリングPremium非対応
フレームワークAngular 16〜22、React、Vue、素の JavaScript などAngular 22 と React 19

対応関係

FullCalendar のオプションと、Needless UI での対応
FullCalendarNeedless UI のスケジューラー
<full-calendar [options]>、plugins、schedulerLicenseKey<nui-scheduler>(オプションごとに入力があり、プラグインもキーも不要)
initialView: 'resourceTimelineDay'view="timeline"(1週間や1か月なら timelineSpan も指定)
initialView: 'timeGridWeek'view="week"([(view)] で双方向バインディング)
resources、events[resources]、[events]
resourceId、extendedPropsresource、data
editable、selectableeditable、selectable
select(slotSelect):{ start, end, allDay, resource }
eventDrop、eventResize(eventChange):events を更新するまで何も動かない
eventClick(eventClick)
eventOverlap、selectOverlap、eventAllow[allow]:移動、リサイズ、選択を1つの関数で判定
slotDuration、snapDurationslotMinutes、snapMinutes(分単位)
slotMinTime、slotMaxTime、scrollTimedayStart、dayEnd、scrollHour(時間単位)
businessHours[businessHours]:曜日は 1(月曜日)から 7 まで
datesSet(rangeChange)
eventContent、resourceCellContent [resourceLabelContent]nuiSchedulerEvent と nuiSchedulerResource のテンプレート
locale、firstDaylocale(任意の BCP 47 タグ)、1〜7 の firstDay、文言を指定する labels

会議室予約のタイムラインを両方で作る

会議室はリソース、予約は予定です。会議室の行に沿ってドラッグすると予約でき、予約をドラッグすると移動できます。1つの会議室に同時に入る予約は1件だけです。FullCalendar 7 と、その Premium のリソースタイムラインでは次のようになります。

Needless UI のスケジューラーでは次のようになります。

動作が異なる点は2つあります。FullCalendar は予約を自ら移動し、アプリがその変更を写し取ります。Needless UI のスケジューラーは変更を通知するだけで、events を更新して初めて変更が反映されるため、アプリのデータが唯一の情報源であり続けます。また、allow はただのコードで、ポインターでもキーボードでも変更のたびに呼ばれるため、ルールを自分でテストできます。このアプリは、会議室予約カレンダーのガイドで順を追って作っています。

データの変換

FullCalendar のデータと、スケジューラーが求める形式
FullCalendarNeedless UI
終日の予定の end は予定の翌日終日の予定の end は最終日なので、1日引く
時刻の末尾に Z や、+02:00 などのオフセットが付くことがあるオフセットなしの時刻(例:2026-11-02T09:30)
曜日は 0(日曜日)から 6。businessHours と firstDay で使う曜日は 1(月曜日)から 7(日曜日)
期間は '00:30' のような文字列数値:分または時間
リソースは id 順、次にタイトル順に並ぶリソースは配列の順に並ぶ
rrule はオブジェクト、exrule も使うFREQ=WEEKLY;BYDAY=MO,FR のような RFC 5545 の文字列と、exdate
America/New_York のようなタイムゾーン先に時刻を変換する。nuiSchedulerFromIcs(text, { timeZone }) は .ics ファイルを読み込みながら変換する。

足りない機能が必要なら

アプリがタイムゾーン、グループ化したリソース、外部からのドラッグ&ドロップ、印刷に頼っている場合、スケジューラーはまだ FullCalendar の代わりになりません。必要な機能は Issue を作成してお知らせください。それ以外については、スケジューラーのページにすべての入力、出力、例が載っています。