もっぱらGoogleカレンダー派な私。
仕事の予定からゴミの日まで全ての予定を管理しています。
そんな私にとってイベントページなどでたまに見かける「カレンダーに登録」機能の存在はとても有難いのです。
今回はそんな「カレンダーに登録」機能について、推しカレ('推しカレンダー'の意)であるGoogleカレンダー以外の手段も含めて調べてみました。
カレンダー登録方法のあれこれ
カレンダーの登録方法としては
- iCalendarデータ形式(ICSファイル)
- URLリンク
によるものの2種類があります。
以下に特徴やメリット・デメリットについてまとめてみました。
(メリット・デメリットについては個人の主観が含まれます。)
iCalendarデータ形式(ICS)
- 予定の件名や日時、場所などの情報を収めたファイルをiCalendarファイルあるいはICSファイル(以下、ICSファイル)という
- ICSファイルの実態は、予定の件名や日時などが決められたルールで書かれたテキストファイルで、その拡張子を
.ics
としたもの - 文字コードはUTF-8
- ICSファイルの実態は、予定の件名や日時などが決められたルールで書かれたテキストファイルで、その拡張子を
- カレンダーアプリやGoogleカレンダー等のWebサービスにICSファイルをインポートすることでスケジュールが登録できたり、逆にICSファイルにエクスポートして他者と共有することが可能
- 上述インポート/エクスポートに対応しているアプリ・サービスが多数あり、汎用性が高い
- ファイルのやりとりが必要であり、スマホユーザーやICSファイルの扱いに不慣れなユーザーにとっては利用しづらい(主にビジネスユーザーの利用に向いていると思われる)
URLリンク
- Googleカレンダー等のURLに予定の件名や日時、場所などの情報をURLパラメータとして含めアクセスすることで、当該カレンダーの登録画面に必要事項が入力された状態で表示される(つまりあとは登録するだけの状態)
- ファイルのやりとりが要らずリンクを選択すればよいだけなので、スマホユーザーやライトユーザーでも利用しやすい(...はずなのですが、Outlookはスマホでは上手く動きませんでした(後述))
- テキストなのでQRコードで印刷するなど利用用途は多数ありそう
- URLリンクに対応したサービス(Google,Outlookなど)のユーザーでなければ利用できない
各種仕様
iCalendarデータ形式(ICS)
以下のテキストファイルを作成し、上述の通り拡張子を.ics
にして保存します。
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//ktl/s_kosaka//calendar v1.0//JP
BEGIN:VEVENT
DTSTART;TZID=Asia/Tokyo:20220606T192000
DTEND;TZID=Asia/Tokyo:20220606T212000
SUMMARY:キリンチャレンジカップ2022 SAMURAI BLUE(日本代表) 対 ブラジル代表
DESCRIPTION:日本テレビ系にて全国生中継
LOCATION:国立競技場
END:VEVENT
END:VCALENDAR
こんな感じで。(Mac)
例えばこのアイコンをダブルクリックすると、以下のように(有無を言わさず)登録されます。
ガンバレ日本代表。
上記例の各プロパティ等の内容については以下のとおりです。
上記の例以外にも様々なプロパティが用意されています。
詳しくは以下を参考にしてください。
RFC 5545 - Internet Calendaring and Scheduling Core Object Specification (iCalendar)
RFC 5545 - Internet Calendaring and Scheduling Core Object Specification (iCalendar) 日本語訳
カレンダーに使われるiCalendar形式について part1 - Qiita
例では触れていませんが、RRULE
プロパティで「毎週日曜日」「毎月第四土曜日」といったような繰り返しの設定ができるほか、工夫することで以下のように「毎月月末」といった設定も可能です。
iCaldendar RFC-5545: 毎月の末日をRRULEで求める - Qiita
なお、ICSファイルの仕様を調べるとRFC 2445
とRFC 5545
の2種類の仕様を見かけるかと思います。
2022/5/10現在の最新の仕様はRFC 5545
となりRFC 2445
は廃止されています。
RFC 5545
とRFC 2445
の違いは以下(RFC 5545
の仕様書の付録)をご覧いただきたいのですが、大きくは変更されていない印象です。ですので、RFC 2445
の仕様を基にした記事等であっても仕様の違いに少し気をつけておけば大いに参考になるかと思います。
RFC 5545 - Internet Calendaring and Scheduling Core Object Specification (iCalendar)
URLリンク
(前提知識)URLパラメータとは?
この後ご紹介するURLリンクはいずれもURLパラメータを利用した機能になります。
パラメータ名
とパラメータ値
のセットを展開したページに渡すことで様々な動的な処理に利用できます。(いわずもがな、ページ側でパラメータに対応した処理を実装しておく必要があります。対応していないパラメータが渡された場合はスルーされます。)
URLパラメータは、URLの後ろに?
(半角のクエスチョンマーク)を付け、その後に[パラメータ名]=[パラメータ値]
と記述します。
渡したいパラメータが複数ある場合は、[パラメータ名]=[パラメータ値]
と[パラメータ名]=[パラメータ値]
の間に&
(半角アンパサンド)で区切ることで複数の指定が可能です。
なお、複数のパラメータを記述する際、その順序は処理には影響しません。
Googleカレンダー
上述のURLパラメータを含めたURLリンクを作成します。
例えば以下のようなもの。
https://www.google.com/calendar/render?action=TEMPLATE&text=キリンチャレンジカップ2022 SAMURAI BLUE(日本代表) 対 ブラジル代表&dates=20220606T192000/20220606T212000Z&location=国立競技場&details=日本テレビ系にて全国生中継&add=test@test.com
URLパラメータを除いたURL部分(固定部分)は以下のとおりです。
このURLにアクセスすると通常のカレンダー画面が開きます。(こんな感じ)
https://www.google.com/calendar/render
後述しますが、上記URLに必須のパラメータである?action=TEMPLATE
のみを加えることで全ての項目が空欄の新規追加画面が表示されます。(こんな感じ)
https://www.google.com/calendar/render?action=TEMPLATE
蛇足ですが、スマートフォンの場合は上記URLをブラウザのURLバーに直接貼り付けるとブラウザ上にPC版のGoogleカレンダーの画面が表示され、HTMLで記述したリンク(<a href=" https://www.google.com/calendar/render">
)からアクセスした場合はGoogleカレンダーアプリがインストールされている場合はアプリに遷移するようです。
主なURLパラメータ
パラメーター | 必須/オプション | 説明 |
---|---|---|
action | 必須 | action=TEMPLATEと書く(決まりごと) |
text | 必須 | 件名 |
dates | オプション | 予定の日時 開始と終了を指定できる。なお、時間を省略した場合は終日扱いになる。 時間指定の場合は、時間の最後には大文字の「Z」を付ける。 例) dates=20220606T192000/20220606T212000(2022/6/6 19:20〜2022/6/6 21:20) |
location | オプション | 場所 |
details | オプション | 内容 |
add | オプション | 招待者のメールアドレス |
recur | オプション | 繰り返しの設定 ※後述 |
recur(繰り返し)の使い方
結論から言うと以下のように書きます。
recur=RRULE:FREQ=DAILY;COUNT=10
上記の書き方で毎日10回繰り返す
という登録内容となります。
このRRULE:FREQ=DAILY;COUNT=10
の部分ですが、これは上述のICSファイルの仕様(RFC 5545)で繰り返しの設定に使うRRULE
プロパティの記述方法に準じたものです。
以下仕様書に様々なRRULE
の書き方が紹介されています。
iCalendar spec: 4.8.5.4 Recurrence Rule
それらのRRULE:〜
の手前にrecur=
を置いた文字列(recur=RRULE:〜
)をURLパラメータに加えます。
bodyの改行
内容欄での改行は、検証したところ<br>
か%0D%0A
で対応できそうです。
\n
は効きませんでした。
その他にも紹介していないパラメータがあるので詳しくはこちらなどをご確認ください。
参考 (Googleカレンダー関連)
add-event-to-calendar-docs | GitHub
Googleカレンダーの予定を追加するURLリンク | Qiita
How to Send Google and Outlook Calendar Invite Links in Email Templates | Douglas C. Ayers
Googleカレンダーに追加するURLリンクを自動生成してくれるツール | Typewriter
↑サクッとURLが作成できて便利でした。
Outlook
Googleカレンダー同様、URLパラメータを含めたURLリンクを作成します。
ただし、同じ「Outlook」でも、Microsoft Office 365 カレンダー と、Outlook カレンダー の2つのサービスがあり、それぞれURLが異なるので注意が必要です。
登録URLは以下のとおり。
Microsoft Office 365 カレンダー に登録
// Microsoft Office 365 カレンダー
https://outlook.office.com/calendar/action/compose?subject=キリンチャレンジカップ2022 SAMURAI BLUE(日本代表) 対 ブラジル代表&body=日本テレビ系にて全国生中継&location=国立競技場&startdt=2022-06-06T19:20:00:00&enddt=2022-06-06T21:20:00:00&to=test@test.com
// Outlook カレンダー
https://outlook.live.com/calendar/action/compose?subject=キリンチャレンジカップ2022 SAMURAI BLUE(日本代表) 対 ブラジル代表&body=日本テレビ系にて全国生中継&location=国立競技場&startdt=2022-06-06T19:20:00+09:00&enddt=2022-06-06T21:20:00+09:00&to=test@test.com
Microsoft Office 365 カレンダーと、Outlook カレンダーの違いはURL部分(?より手前)だけで、パラメータについては同じルールで記述します。
なお、以下のURLにアクセスすると全ての項目が空欄の新規追加画面が表示されます。
// Microsoft Office 365 カレンダー
https://outlook.office.com/calendar/action/compose
// Outlook カレンダー
https://outlook.live.com/calendar/action/compose
スマホでの挙動
上記の各サンプルのURLを私のスマホ(iPhone)でアクセスしたところ、どのブラウザでも以下のように動作しました。
- ログイン前の状態でアクセスするとログイン画面が表示される
→ ログインすると画面が真っ白になる(ページ名には「予定表 - (ユーザー名)」と表示されている) - ログイン中の状態でアクセスすると上述同様の真っ白なページとなる
私の端末だけの挙動なのかもしれませんが、もし導入を検討される場合は十分に検証されることをお勧めします。
主なURLパラメータ
先述のとおりパラメータのルールは共通になっています。
パラメータ | 必須/オプション | 説明 |
---|---|---|
subject | 必須 | 件名 |
body | オプション | 内容 |
location | オプション | 場所 |
startdt | オプション | 開始日時 ※詳細欄外 |
enddt | オプション | 終了日時 ※詳細欄外 |
to | オプション | 招待者のメールアドレス |
allday | オプション | 終日 値は「true」or「false」 |
uid | オプション | 一意の識別子 |
startdt/enddtのフォーマット
サンプルのとおり、日本のタイムゾーンで登録する際のフォーマットはYYYY-MM-DDTHH:mm:SS+09:00
です。
他のフォーマットもあるようですが、私の環境ではこれでないと上手くいきませんでした。(おま環?)
bodyの改行
内容欄での改行は、検証したところ<br>
で対応できそうです。
%0D%0A
や\n
は効きませんでした。
なお、bodyはスペースや日本語がデコードされなかったりと挙動が不安定であるとのこと。
動作検証により上手くいかない場合はICSファイルの利用を検討した方がいいかもしれません。
繰り返しのパラメータ
ICSファイルやGoogleカレンダーにある「繰り返し」のパラメータがないようです。
だからZoomのOutlookへの登録はURLリンクではなくICSファイルなのかもしれません。
その他にも紹介していないパラメータがあるので詳しくはこちらなどをご確認ください。
参考 (Outlook関連)
add-event-to-calendar-docs - Outlook | GitHub
Office 365 カレンダーに予定を追加するURLリンクを作る | 物理の駅 by 現役研究者
Outlookカレンダーの予定を追加するURLリンク | Qiita
Yahoo!カレンダー
調べてみたところ、以下のようなドキュメントを見つけました。
add-event-to-calendar-docs - Yahoo | GitHub
こちらで書かれている内容はYahoo!(米国?)が展開されているYahoo!カレンダーについて書かれているのですが(https://calendar.yahoo.com/)、Yahoo!Japanではそれとは別に国内向けのYahoo!カレンダー(https://calendar.yahoo.co.jp/)を展開しています。
ですが、パラメータは共通のようで、URL部分を変えるだけでそれぞれのカレンダーに対し登録が可能でした。
// yahoo.com
https://calendar.yahoo.com/?v=60&TITLE=キリンチャレンジカップ2022 SAMURAI BLUE(日本代表) 対 ブラジル代表&ST=20220606T192000&ET=20220606T212000&DESC=日本テレビ系にて全国生中継&in_loc=国立競技場
// yahoo.co.jp
https://calendar.yahoo.co.jp/?v=60&TITLE=キリンチャレンジカップ2022 SAMURAI BLUE(日本代表) 対 ブラジル代表&ST=20220606T192000&ET=20220606T212000&DESC=日本テレビ系にて全国生中継&in_loc=国立競技場
なお、スマホにYahoo!カレンダーアプリをインストールした状態でYahoo!Japan版のリンクにアクセスしましたが、アプリには遷移しませんでした。(iPhone)
なお、Zoomに掲載されているYahoo!への登録用のリンクはYahoo!版カレンダーへのリンクです。
主なURLパラメータ
先述のとおりパラメータのルールは共通になっています。
パラメータ | 必須/オプション | 説明 |
---|---|---|
v | 必須 | v=60と書く(決まりごと) |
TITLE | 必須 | 件名 |
ST | 必須 | 開始日時 ※後述 |
ET | 必須 | 終了日時 ※後述 |
DESC | オプション | 内容 |
in_loc | オプション | 場所 |
RPAT | オプション | 繰り返しの設定 ※後述 |
REND | オプション | 繰り返しの終了日 ※RPATを設定している前提 |
inv_list | オプション | 招待者のメールアドレス |
※一部紹介していないパラメータもありますので、詳しくは上記GitHubのドキュメント(こちら)をご覧ください。
ST/ETのタイムゾーン
YYYYMMDDTHHmmSSZ
でUTC時間に、YYYYMMDDTHHmmSS
でローカルタイムゾーンに合わせて設定されます。
また、YYYYMMDD
で終日の設定になります。
DESKの改行
内容欄での改行は、検証したところ%0D%0A
で対応できそうです。
<br>
や\n
は効きませんでした。
繰り返しの設定について
上述の通りRPAT
というパラメータが用意されているのですが、先にご紹介したGitHubのドキュメントによれば2021年8月に非推奨になったとの記載があるのでいつまで使えるのかわかりません。
(REND
の方には何も書かれていないのですが..)
なお、パラメータ値としては以下のとおりです。
パターン | 書き方 |
---|---|
1日おき | 01Dy |
1週間おき | 01Wk |
1ヶ月おき | 01Mh |
1年おき | 01Yr |
毎週 月・水・金 | 01WkMoWeFr |
毎週 火・木 | 01WkTuTh |
毎週 平日 | 01WkMoTuWeThFr |
毎週 土日 | 01WkSuSa |
毎月第二火曜 | 01Mh2Tu |
参考 (Yahoo!カレンダー関連)
add-event-to-calendar-docs - Yahoo | GitHub
カレンダーアプリに予定を追加するボタンをWebサイトに設置するには | びびび備忘録