16
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

カレンダー登録方法について比較してみた(ICS/Google/Outlook/Yahoo)

Last updated at Posted at 2022-05-11

もっぱらGoogleカレンダー派な私。
仕事の予定からゴミの日まで全ての予定を管理しています。
そんな私にとってイベントページなどでたまに見かける「カレンダーに登録」機能の存在はとても有難いのです。
今回はそんな「カレンダーに登録」機能について、推しカレ('推しカレンダー'の意)であるGoogleカレンダー以外の手段も含めて調べてみました。

カレンダー登録方法のあれこれ

カレンダーの登録方法としては

  • iCalendarデータ形式(ICSファイル)
  • URLリンク

によるものの2種類があります。

以下に特徴やメリット・デメリットについてまとめてみました。
(メリット・デメリットについては個人の主観が含まれます。)

iCalendarデータ形式(ICS)

  • 予定の件名や日時、場所などの情報を収めたファイルをiCalendarファイルあるいはICSファイル(以下、ICSファイル)という
    • ICSファイルの実態は、予定の件名や日時などが決められたルールで書かれたテキストファイルで、その拡張子を.icsとしたもの
    • 文字コードはUTF-8
  • カレンダーアプリや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)
スクリーンショット 2022-05-10 19.52.42.png
例えばこのアイコンをダブルクリックすると、以下のように(有無を言わさず)登録されます。
ics登録.png
ガンバレ日本代表。


上記例の各プロパティ等の内容については以下のとおりです。
ics仕様.png
上記の例以外にも様々なプロパティが用意されています。
詳しくは以下を参考にしてください。
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 2445RFC 5545の2種類の仕様を見かけるかと思います。
2022/5/10現在の最新の仕様はRFC 5545となりRFC 2445は廃止されています。
RFC 5545RFC 2445の違いは以下(RFC 5545の仕様書の付録)をご覧いただきたいのですが、大きくは変更されていない印象です。ですので、RFC 2445の仕様を基にした記事等であっても仕様の違いに少し気をつけておけば大いに参考になるかと思います。
RFC 5545 - Internet Calendaring and Scheduling Core Object Specification (iCalendar)

URLリンク

(前提知識)URLパラメータとは?

この後ご紹介するURLリンクはいずれもURLパラメータを利用した機能になります。

パラメータ名パラメータ値のセットを展開したページに渡すことで様々な動的な処理に利用できます。(いわずもがな、ページ側でパラメータに対応した処理を実装しておく必要があります。対応していないパラメータが渡された場合はスルーされます。)

URLパラメータは、URLの後ろに?(半角のクエスチョンマーク)を付け、その後に[パラメータ名]=[パラメータ値]と記述します。
渡したいパラメータが複数ある場合は、[パラメータ名]=[パラメータ値][パラメータ名]=[パラメータ値]の間に&(半角アンパサンド)で区切ることで複数の指定が可能です。
なお、複数のパラメータを記述する際、その順序は処理には影響しません。

Googleカレンダー

上述のURLパラメータを含めたURLリンクを作成します。
例えば以下のようなもの。

Googleカレンダーに登録

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 カレンダー に登録

// 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ファイルなのかもしれません。

スクリーンショット_2022-05-11_0_12_25.png

その他にも紹介していないパラメータがあるので詳しくはこちらなどをご確認ください。

参考 (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!版カレンダーに登録

// yahoo.com
https://calendar.yahoo.com/?v=60&TITLE=キリンチャレンジカップ2022 SAMURAI BLUE(日本代表) 対 ブラジル代表&ST=20220606T192000&ET=20220606T212000&DESC=日本テレビ系にて全国生中継&in_loc=国立競技場

Yahoo!Japan版カレンダーに登録

// 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!版カレンダーへのリンクです。
スクリーンショット_2022-05-11_0_12_25.png

主な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サイトに設置するには | びびび備忘録

16
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?