投稿者:関
Power Apps(モデル駆動型アプリ)を使った業務アプリ開発では、Dataverseにデータを蓄積しながら、ビューやフォームで日々の業務を回していくケースが多いと思います。
ただ、実際の現場ではこんな声をよく聞きます。
・「誰がいつ空いているかを、一覧で見たい」
・「担当者別に予定を俯瞰したい」
・「会議や外出が重なっている日がすぐ分かるようにしたい」
しかし標準のビューでは “担当者 × 日付” のようなグループカレンダー形式の表現が難しく、
結局 Excel や外部カレンダーに頼ってしまい、Dataverseに集約したメリットが薄れてしまう…ということもあります。
そこで今回、Power Apps の PCF(Power Apps Component Framework)を使って、
モデル駆動型アプリのビュー上で動作する「グループカレンダー表示」を作成してみました。
Power Apps component frameworkの概要(Microsoft Learn)
完成イメージ(グループカレンダー表示)
グループカレンダーPCFをビューに設定すると、以下のように担当者別の週カレンダーを表示できます。
・左側に担当者(行)
・上側に日付(列)
・予定はカード形式で表示
①標準カレンダービュー(週表示)

標準の週表示では「予定は見えるが、担当者ごとの比較がしづらい」という課題がありました。
②グループカレンダーPCF適用後

今回のデータ:Dataverseの「日報」テーブルをカレンダー表示する
今回の予定データは、Dataverseの「日報」テーブルを利用しています。
・テーブル名:new_negotiation_history
・種類:Activity
・マネージド:いいえ
・カスタマイズ:可能
日報というと「1日1件」のイメージがあるかもしれませんが、業務の記録を “活動” として扱っている場合、
「いつ(開始・終了)」「誰が(担当)」「何をした(件名・説明)」「種別(活動タイプ)」のような情報を持たせられるため、カレンダー表示と相性が良いです。
ビューの抽出条件で件数を絞る(パフォーマンス対策)
PCFでカレンダー表示を行う場合、データ件数が多すぎると
「表示が重い」「スクロールがカクつく」「クリックの反応が遅い」といったUX劣化につながりやすくなります。
そこで今回は、ビューの抽出条件で表示対象を絞り込み、PCFが扱うデータ件数をコントロールしています。
■ビューの抽出条件(例)
・担当者:データを含む
・開始日:過去 1 か月間 または 今後 3 か月間

グループカレンダーPCFのデータ取得方式:ビューに表示されるレコードのみ取得
今回のPCFでは、PCF側で独自にDataverseへクエリを投げるのではなく、ビューに表示されるレコードだけを取得して描画する方式にしています。
この方式のメリットは以下の通りです。
① 運用チューニングが「ビュー編集だけ」で完結する
② 権限と表示範囲が自然に一致する
③ 実装がシンプルになり、保守性が上がる
PCFパラメータ(ビュー側で柔軟に列を割り当て)
グループカレンダーPCFはテーブル構造を固定せず、ビュー側で「どの列を担当/件名/開始日として扱うか」をパラメータで設定できる設計にしています。
そのため、テーブル設計が異なる環境でも、パラメータを差し替えるだけで流用しやすいのが特徴です。
※グループカレンダーPCFは列名を固定せず、ビュー側のパラメータで割り当てます
| 内容 | PCFパラメータ | 設定例(列名) |
|---|---|---|
| 担当 | PersonField | new_person |
| 件名 | SubjectField | subject |
| 開始日 | StartField | actualstart |
| 終了日 | EndField | actualend |
| 活動タイプ | ActivityTypeField | new_activity_type |
| 活動タイプ色 | ColorField | new_new_color |
| 説明・詳細 | DescriptionField | description |
| 週の開始曜日 | WeekStartField | 1:月曜始まり/0:日曜始まり |
| 新規-担当 | Create Person Field | new_person |
| 新規-開始日 | Create Start Field | actualstart |
| 新規-終了日 | Create End Field | actualend |
| 開始時間初期値 | Default Start Time | 10:00 |
| 終了時間初期値 | Default End Time | 16:00 |

UXの工夫:週の開始曜日を切り替え可能にする
グループカレンダーPCFでは、パラメータ WeekStartField により週の開始曜日を切り替えられるようにしています。
・1:月曜始まり
・0:日曜始まり
案件や利用部門によって表示ルールを変えられるため、地味に便利です。
予定カードをクリックするとレコード画面を開く(モデル駆動型らしい導線)
予定カードをクリックしたときの動作を「対象の日報レコード画面を開く」という導線にしました。
・カレンダー:俯瞰・比較・調整
・レコード画面:詳細確認・編集・関連参照
という役割分担が明確になり、モデル駆動型アプリの標準UXに自然に乗せられます。
また、詳細編集や関連情報の参照は標準フォームに任せることで、カレンダー側は一覧性に集中できます。
使ってみた感想(効果)
・担当者別の稼働状況が一目で分かる
・予定が詰まっている日/空いている日が直感的に把握できる
・調整のための会話(確認作業)が減る
・“ビューで把握 → クリックで詳細” の流れが速い
標準ビューはデータを一覧で見るには便利ですが、予定や稼働を扱う場合は、カレンダーUIの方が圧倒的に分かりやすいと感じました。
