knowledging

スケジュールは予定のみを扱うものではない ~スケジュールドメインについて~

サマリー

背景

スケジュール≒予定を扱う、という現実

Google カレンダーでも Outlook でも何でもいいので、皆さんのカレンダーを見てみてください。あるいはチームメンバーのスケジュールを見てみましょう。

カレンダーは便利ですが、見づらくて使いづらいものでもあります。できれば一切触りたくないでしょうが、そうも行きません。マネージャーに限らず、現場のエンジニアでさえも例外ではなく、おそらくあなたも日々自分のカレンダーのメンテナンスをしつつ、メンバーのカレンダーを眺めては調整に苦労しているはず。

なぜカレンダーはこんなにも面倒くさいのでしょうか?

答えは単純で、スケジュールという概念を、予定 のみ を扱うものであると認識しているからです。しかし実際には 予定以外の事柄もあります

予定以外の事柄

では、予定以外にどんな事柄があるでしょうか。

たとえば「勤務時間」です。グループスケジューラーでは設定画面から設定できるようになっています。9:00~17:30 に設定すると、この時間帯が勤務時間となり、この範囲外はグレーアウトされて勤務外であることが伝わります。

もし、この「勤務時間」という概念が「予定」とは区別されなかったとしたら、どうなるでしょうか。おそらく 毎日開催する定期予定として 勤務時間内を示す予定を一つ、あるいは勤務時間外を示す予定を二つつくることになります。メンテナンスも面倒ですし、表示上も鬱陶しいですよね。

このように「予定」以外の事柄として抽出し、別の扱い方をすることで、このような問題を回避できます。

スケジュールはクラス、予定や勤務時間はインスタンス

より抽象化すると、スケジュールという概念をどう実装するかは複数存在するということです。すでに「予定」と「勤務時間」を示しましたが、他にもあります。

オブジェクト指向でたとえると、スケジュールはクラスで、予定や勤務時間はインスタンスのようなものです。

さて、本記事では、この捉え方に基づいて、予定や勤務時間の事柄が存在すること、またこれら事柄をどのように統一的に扱えばいいかを論じます。

スケジュールドメイン

用語を定義します

まず スケジュール とは、1日24時間という時間枠のどこに何を埋めるかを定義したデータ構造を指します。

次に、スケジュールドメイン または単に ドメイン とは、スケジュールに書き込むデータの種類を指します。

こうするとスケジュールの運用をきめ細かく行えるようになります。

ドメインの例

次にドメインの例を見ていきましょう。

予定と勤務時間についてはすでに解説しました。

モード とは、過ごし方を意味します。典型的には次の 5 つがあるでしょう。

タスク とは、個人のタスクを指します。チーム内で合意したタスクではなく、自分自身がどう解釈したかというものです。または単に個人的な用事を指します。他人には見せられないのが特徴です。以下に例を挙げます。

スケジュールは 1 ドメイン 1 枚で扱う

ここから本題です。

スケジュールを上手く扱うためには 1 ドメイン 1 枚で扱う ようにします。

つまり、上記の 4 つのドメインを例にすると、次のように 4 枚で扱うようにします。

これにより、私達は以下のメリットを得ます。

スケジュールドメインを運用する

残念ながら、スケジュールドメインの考え方を採用したカレンダーまたはグループスケジューラーはまだありません。この概念はおそらく私が開発した、新しい概念だからです。

個人用途であれば、Google カレンダーなら「1ドメイン1枚」程度なら可能です。

しかし、スケジュールドメインの本質はスケジュール間の連携にあります。やはり専用のスケジュールソフトウェアを自製しなければならないでしょう。