警告
Moment.jsはメンテナンスモードになり、
日付処理できる代替ライブラリへの移行
が推奨されています。
代替ライブラリのひとつ
Luxon
については、
kintoneカスタマイズでの導入方法の紹介記事
があります。
はじめに
営業はOutlookの予定表をメインに使っているけど、他の部署はGaroonスケジュールを使っている。
違う部署のメンバーとの打ち合わせをするときは、GaroonとOutlookそれぞれにログインしてにらめっこ…。
そんな問題をGaroonカスタマイズで解決しませんか?
この記事で紹介するカスタマイズでは、Garoon上で次のことを行えます。
- GaroonとOutlookの両方の予定を参照して予定を登録する。
- Garoon上で予定を登録・変更・削除したときに、Outlook予定表へ自動で同期する。
このカスタマイズでは、Outlookに登録された予定のGaroonへの同期はできません。
必要なもの
- Garoonクラウド版
- Microsoft Office365アカウント
完成イメージ
予定の登録・変更
-
Garoonの「予定の登録」「予定の変更」画面に[空き時間照会]ボタンが追加されます。
-
[空き時間照会]ボタンをクリックすると、参加者のGaroonに登録された予定と、Outlook予定表に登録された予定を同時に確認できます。
-
Garoon予定を登録すると、Outlook予定表にも予定が登録されます。
予定のタイトルのほか、「メモ」の内容も予定に反映されます。
予定の削除
「予定の詳細」画面で、[Outlookスケジュールの削除]ボタンをクリックすると、Outlookの予定表から予定が削除されます。
Garoonのスケジュールから予定を削除する場合は、[削除する]リンクで予定を削除する必要があります。
Outlook予定表の設定で、共有先の編集を許可している場合のみ可能です。
システム構成
このカスタマイズのシステム構成としくみは次のとおりです。
- GaroonからOAuth認証を用いてEntra ID V2 Endpointへサインインします。
Microsoft Authentication Library for JavaScript (MSAL.js)を利用することで、OAuthを使った認可フローを実現します。
- Azureからアクセストークンを取得します。
- ユーザーを取得するAPI を実行します。
- cybozu.comのユーザー情報から、参加者のOffice365のログインIDを取得します。
- アクセストークンを使って、Microsoft Graph APIを実行します。
Microsoft Graph API(以降、Graph API)は、Microsoft 365サービスの情報を利用するAPIです。 - Outlook予定表を取得します。
- Garoon REST APIを実行して、参加者の予定を取得します。
- アクセストークンを使って、ユーザーの操作(予定の登録・変更・削除)に応じたGraph APIを実行します。
注意事項
このカスタマイズには、クラウド版Garoonの環境が必要です。
Microsoft Entra IDの設定
アプリケーションの作成
Garoonから
Graph API
を利用するため、Microsoft Entra IDにアプリケーションを登録します。
この設定は、管理者のみ行う作業です。利用者が個々に設定する必要はありません。
Azureポータル
で、Microsoft Entra IDにアプリケーションを登録します。
手順は次のページを参照してください。
GaroonポータルでOutlookの未読メール数をチェックしよう:アプリケーションの作成
- この記事では、作成するアプリケーション名を「garoon-outlook-schedule」としています。
- アプリケーション作成後、作成したアプリケーションの詳細画面が表示されます。
「Application (client) ID (アプリケーション(クライアント)ID)」の値をメモしてください。
Garoonカスタマイズファイルで利用します。
詳細画面は、Azureポータル >[Microsoft Entra ID]>[App registrations]の手順でも開くことができます。
アプリケーションの設定
手順1. リダイレクトURLの設定
-
作成したアプリケーションの詳細画面の左サイドメニューから、[Authentication]([認証])を選択します。
-
[Add a Platform](プラットフォームを追加)ボタンをクリックします。
-
[Single-page application](シングルページアプリケーション)を選択します。
-
次の内容を入力します。入力後、[Configure](構成)ボタンをクリックします。
項目 値 備考 Redirect URIs
(リダイレクトURL)次のURLを入力します。
https://sample.cybozu.com/g/schedule/add.csp
Type(種類)は、「Web」を選択します。sampleの部分は、利用環境に合わせてください -
「Add URL」(URLの追加)をクリックし、「Redirect URIs」(リダイレクトURL)に次の内容を入力します。入力後、[Save](保存)ボタンをクリックします。
- https://sample.cybozu.com/g/schedule/modify.csp
- https://sample.cybozu.com/g/schedule/view.csp
sampleの部分は、利用環境に合わせてください。
手順2. OAuth認証スコープの設定
-
作成したアプリケーションの詳細画面の左サイドメニューから、[API permissions]([APIのアクセス許可])を選択します。
-
[Add a permission]([アクセス許可の追加])ボタンをクリックします。
-
Microsoft Graph APIを利用可能に設定します[Add permission]([追加])ボタンをクリックし、[Microsoft Graph]を選択します。
-
[Delegated permissions]([委任されたアクセス許可])を選択します。
- Calendars.ReadWrite
- Calendars.ReadWrite.Shared
- User.Read.All
デフォルトで設定されているUser.Readはチェックを外してください。
-
次の権限が、Configured permissions(構成されたアクセス許可)画面の一覧に表示されていればOKです。
- Microsoft Graph
- Calendars.ReadWrite
- Calendars.ReadWrite.Shared
- User.Read.All
- Microsoft Graph
-
Configured permissions(構成されたアクセス許可)画面で、[Grant admin consent for xxx]([xxxに管理者の同意を与えます])をクリックし、処理を実行します。
xxxはEntra IDのディレクトリ名です。
Outlookの設定
-
Outlook
にログインします。
-
カレンダーアイコンをクリックして、予定表を開きます。
-
「個人用の予定表」「予定表」の[…]をクリックし、[共有とアクセス許可]をクリックします。
-
組織内の連絡先、または共有したいユーザを入力し、以下のいずれかの権限に設定します。
- すべての詳細を表示可能:
- 編集が可能:他の人のOutlookスケジュールを予定を登録する場合は、「編集が可能」を選択してください。
-
ユーザーに共有した場合は、共有先に設定したメールアドレス宛へ「予定表へのアクセス権が追加されました」というメールが届きます[承諾]ボタンをクリックして、相手のOutlook予定表から予定が見えるようにします。
Garoonの設定
Garoonでは、以下を設定します。
- Graph APIを利用するためのプロキシAPI設定を追加
- cybozu.com共通管理でユーザーのカスタマイズ項目を追加
- スケジュールアプリにカスタマイズファイルを適用
なお、このカスタマイズでは、次の外部ライブラリを利用しています。
- Microsoft Authentication Library for JavaScript(MSAL)v2.12.1,
ドキュメント
- jQuery v3.3.1,
ドキュメント
- https://js.cybozu.com/jquery/3.3.1/jquery.min.js
- Moment.js v2.24.0,
ドキュメント
- https://js.cybozu.com/momentjs/2.24.0/moment-with-locales.min.js
- SweetAlert2 v8.2.1,
ドキュメント
- https://js.cybozu.com/sweetalert2/v8.2.1/sweetalert2.min.js
- https://js.cybozu.com/sweetalert2/v8.2.1/sweetalert2.min.css
- FullCalendar v4.0.1,
ドキュメント
- ES6-Promise v4.2.5,
ドキュメント
- https://js.cybozu.com/es6-promise/v4.2.5/es6-promise.auto.min.js
手順1.プロキシAPI設定
手順の詳細は「
プロキシAPIの設定を追加する
」を参照してください。
-
「Garoonシステム管理」画面を開きます。
-
「基本システムの管理」タブをクリックし、[API]を選択します。
-
[プロキシAPIの設定]をクリックします。
-
[追加する]をクリックします。
-
以下の内容を入力します。入力が終わったら、[追加する]ボタンをクリックして、設定を追加します。
項目 値 ステータス 「有効」を選択します。 プロキシコード GET_GAROON_OUTLOOK メソッド 「GET」を選択します。 URL https://graph.microsoft.com/ -
4.〜の手順と同様に、POST用およびDELETE用のプロキシAPIを設定します。
-
POST
項目 値 ステータス 「有効」を選択します。 プロキシコード POST_GAROON_OUTLOOK メソッド 「POST」を選択します。 URL https://graph.microsoft.com/ -
DELETE
項目 値 ステータス 「有効」を選択します。 プロキシコード DELETE_GAROON_OUTLOOK メソッド 「DELETE」を選択します。 URL https://graph.microsoft.com/ -
PATCH
項目 値 ステータス 「有効」を選択します。 プロキシコード PATCH_GAROON_OUTLOOK メソッド 「PATCH」を選択します。 URL https://graph.microsoft.com/
-
手順2. ユーザーのカスタマイズ項目
cybozu.com共通管理で、Office365ログインIDを設定するユーザのカスタマイズ項目を作成します。
手順の詳細は「
ユーザー情報の項目を追加する(カスタマイズ項目)
」を参照してください。
-
「cybozu.com共通管理」画面を開きます。
-
「ユーザー管理」の[組織/ユーザー]を選択します。
-
[プロフィール項目の設定]ボタンをクリックします。
-
「カスタマイズ項目の設定」の[追加]ボタンをクリックします。
-
次の内容を入力します。入力が終わったら[保存]ボタンをクリックし、保存します。
項目 値 項目名 Office365ログインID 項目コード office365_loginId タイプ 「文字列(1行)」を選択します。 公開/非公開 「公開する」を選択します。 ユーザーによる変更 任意でチェックを入れてください。 -
設定が完了したら、「cybozu.com共通管理」からユーザー情報を編集します。
Outlook予定表を利用しているユーザーアカウントの「Office365ログインID」を設定してください(参考: ユーザー情報を編集する)
手順3.カスタマイズファイルの適用
カスタマイズグループを作成し、スケジュールのカスタマイズファイルを適用します。
手順の詳細は
スケジュールのカスタマイズ設定
を参照してください。
- Garoonメニュー右の歯車アイコンをクリックし、[Garoonシステム管理]を選択します。
- [各アプリケーションの管理]タブを選択し、[スケジュール]を選択します。
- [JavaScript/CSSによるカスタマイズ]を選択します。
- [カスタマイズグループを追加する]をクリックします。
- 次の内容を入力します。入力が終わったら、[追加する]ボタンをクリックします。
項目名 設定値 カスタマイズ 「適用する」を選択します。 カスタマイズグループ名 任意の値を入力します。
今回は「Outlook予定表連携」とします。適用対象 カスタマイズを適用するユーザー・グループを選択します。 JavaScriptカスタマイズ 以下の順で、URLおよびファイルを指定します。
「fullcalendar」で始まるファイルの入手方法は FullCalendarライブラリの入手方法 を参照してください。- https://alcdn.msauth.net/browser/2.12.1/js/msal-browser.min.js
- https://js.cybozu.com/jquery/3.3.1/jquery.min.js
- https://js.cybozu.com/momentjs/2.24.0/moment-with-locales.min.js
- https://js.cybozu.com/sweetalert2/v8.2.1/sweetalert2.min.js
- fullcalendar-core-main.min.js
- fullcalendar-daygrid-main.min.js
- fullcalendar-timegrid-main.min.js
- fullcalendar-core-locales_all.min.js
- https://js.cybozu.com/es6-promise/v4.2.5/es6-promise.auto.min.js
- カスタマイズファイル(scheduleGaroonoutlook.js)
詳細は、後述の サンプルコード(scheduleGaroonoutlook.js) を参照してください。
CSSカスタマイズ 以下の順で、URLおよびファイルを指定します。
「fullcalendar」で始まるファイルの入手方法は FullCalendarライブラリの入手方法 を参照してください。- https://js.cybozu.com/sweetalert2/v8.2.1/sweetalert2.min.css
- fullcalendar-core-main.min.css
- fullcalendar-daygrid-main.min.css
- fullcalendar-timegrid-main.min.css
- カスタマイズファイル(scheduleGaroonoutlook.css)
詳細は、後述の サンプルコード(scheduleGaroonoutlook.css) を参照してください。
FullCalendarライブラリの入手方法
- lib_fullcalendar-4.0.1.zip からファイルをダウンロードします。
- ダウンロードしたzipファイルを解凍します。
- 解凍したファイルの「js」「css」フォルダー以下にあるファイルを利用します。
動作確認
予定の登録
事前にOutlook予定表へ予定を登録しておいてください。
-
Garoonで、スケジュールの「予定の登録」画面を開きます。
-
Microsoftアカウントのログイン画面が表示されます。Microsoftアカウントでログインします。
-
登録したい予定の日付を入力し、「参加者」にユーザーを追加します。
-
[空き時間照会]ボタンをクリックします。
-
モーダルが表示されます。
入力した日付の「参加者」に追加しているユーザーのGaroonおよびOutlookの予定タイトルが同時に表示されます。予定タイトル冒頭の
[Gr][OI]は、次の意味です。
[Gr]:Garoonスケジュールに登録された予定
[OI]:Outlook予定表に登録された予定 -
任意の時間を入力し、予定を登録します。
-
Garoonに予定が登録されます。
Outlookの設定 で、共有先の権限に「編集が可能」を設定しているユーザーの場合、Outlook予定表に予定が追加されます。
予定の変更
変更時も同様に、[空き時間照会]ボタンから、「参加者」に追加しているユーザーのGaroonとOutlookの予定を同時に確認できます。
共有先の権限に「編集が可能」を設定しているユーザーの場合、変更した内容がOutlookの予定表にも反映されます。
予定の削除
- 削除したい予定の詳細画面を開きます。
- [Outlookスケジュールの登録]ボタンをクリックします。
- 「Outlookスケジュールを削除します」ダイアログが表示されます[はい]ボタンをクリックすると、Outlook予定表から予定が削除されます。
- [OK]ボタンをクリックし、ダイアログを閉じます。
- Garoonのスケジュールから予定を削除したい場合は、[削除する]リンクをクリックします。
サンプルコード
scheduleGaroonoutlook.js
以下の項目の値を利用環境に合わせて変更してください。
- 12行目 CLIENT_ID: Microsoft Entra IDの設定 - アプリケーションの作成 でメモしたアプリケーション(クライアントID)
- 14行目 HOST_NAME:利用しているcybozu.com環境のホスト名(xxx.cybozu.comのxxx部分)
- 20行目 CUSTOMIZE_NAME:Schedule Datastoreのカスタム項目名( カスタム項目(Schedule datastore) の命名規則 をもとに、「X.Y.Z」を変更してください)
|
|
scheduleGaroonoutlook.css
|
|
おわりに
この記事では、Garoonスケジュール上で、予定の参加者のOutlook予定表に登録された予定を確認したり、登録・変更・削除した予定を同期するカスタマイズを紹介しました。
他にも、
GaroonとOffice365などの外部サービスと連携したカスタマイズ
があるので、ぜひご参考ください。
サンプルコードで使用しているAPI
このカスタマイズでは、次のAPIを利用しています。
お使いのGaroonで使用できるAPIかどうかは、各APIのドキュメントを参照してください。
- Garoon JavaScript API
- Garoon REST API
- User API
- Microsoft Graph API(外部サイト)
このカスタマイズは、サイボウズ オフィシャルSIパートナー クロス・ヘッド株式会社による有償サポートの対象カスタマイズです。
詳細は
サイボウズ製品API開発サポート
を参照してください。
変更履歴
- 2021年8月19日v1.1
- スケジュールの付加情報の保存先を、カスタム項目(additionalItems)からカスタム項目(Schedule datastore)に変更しました。
