Googleカレンダー、カレンダーアプリにイベントを登録する JXA（JavaScript for Automation）

## きっかけ
　今、予定の登録は、バックアップを兼ねて iCloud のカレンダーと、Googleカレンダーの両方に記載していて、どちらかに先に書いて、コピペしていたけど、面倒なので両方に登録するスクリプトを書こうと思い立った。
　まず、慣れている AppleScript でと思って、AppleScript で Googleカレンダーに書く方法を検索してみたら、なんということでしょう。自分が過去に公開しているページが先頭に表示された。（すっかり忘れていました ^.^;;）
#### Googleカレンダー、カレンダーアプリにイベントを登録する AppleScript
　https://qiita.com/ynomura/items/2468ab782500938548e7

　ともあれ、これのおかげで AppleScript で動作するものが作れました。Qiitaは備忘録ですね。
そうこうして、スクリプトエディタを使っていて気がついたのが、このエディタは JavaScript にも対応しているということ。忘れている AppleScript の文法を検索すると、そのページには JavaScript の記法も書いてある。

#### 湧き上がる好奇心
　気づいてしまうと、同じ機能を JavaScript でも書いてみたくなったというわけです。

## つまづきの連続
　大概の所はなんとかなったのですが、やはり簡単にはいかなかった。
* displayDialog （返り値の取得方法が文法のページに無かったので試行錯誤）
* 指定のURLをブラウザーで開く方法　（window.open()などダメで試行錯誤）
* date 関数は new Date（）　を使う
* AppleのカレンダーアプリにEventを追加する　（[このサイト](https://developer.apple.com/library/archive/documentation/AppleApplications/Conceptual/CalendarScriptingGuide/Calendar-CreateanEvent.html)が参考になりました。）

## スクリプトの説明
　私は、予定のところ（イベント名）に＠を付けて場所も記載するようにしているので、location には何も入れるようになっていません。「イベント名@場所」と記載
　Googleと iCloud それぞれ登録するカレンダー名（ID）は冒頭に変数に直接セットしています。（自分の環境に合わせて直して使ってください）
　年も2020と固定値です。
月と日にちは一緒に「mmdd」と4桁で入力するようにしています。（時刻と分も同様に「hhmm」と）

## JavaScript のソース

```javascript:event2cal_javaScript.scpt
// イベントを Google カレンダーと、Appleのカレンダーアプリに登録する
// イベント名の後に@と場所を書く習慣があるので、カレンダーの「場所」には登録していない

var app = Application.currentApplication()
app.includeStandardAdditions = true

var GcalName = "＜＜登録するカレンダーI D＞＞@group.calendar.google.com"
var iCalName = "登録するカレンダー名"  // Apple のカレンダー名
var nen = "2020"		// 年は毎回入力が面倒なので、固定値にしている

var Summ = (app.displayDialog("イベント名@場所", {defaultAnswer: ""})).textReturned
var sYY = nen
var ans = (app.displayDialog("開始月日？（mmdd）", {defaultAnswer: ""})).textReturned
var sMM = ans.substr(0,2)
var sDD = ans.substr(2,2)
ans = (app.displayDialog("開始時分？（hhmm）", {defaultAnswer: ""})).textReturned
var sHH = ans.substr(0,2)
var sMin = ans.substr(2,2)
// 終了予定の年月日は開始予定と同じものを使うことにした
var eYY = sYY
var eMM = sMM
var eDD = sDD
ans = (app.displayDialog("終了時分？（hhmm）", {defaultAnswer: ""})).textReturned
var eHH = ans.substr(0,2)
var eMin = ans.substr(2,2)

// Googleカレンダーにイベントを登録する

var escSumm = encodeURIComponent(Summ)
var sDateTime = sYY + sMM + sDD + "T" + sHH + sMin + "00"
var eDateTime = eYY + eMM + eDD + "T" + eHH + eMin + "00"
var DateTime = sDateTime + "/" + eDateTime
ans = app.displayDialog(("Googleのカレンダーに「" + Summ + "」" + DateTime + "を登録しますか？"), {
	buttons: ["しない", "する"],
	defaultButton: "する"
	})
if (ans.buttonReturned == "する") {
	var calURL =  "http://www.google.com/calendar/event?action=TEMPLATE&src=" + GcalName
	calURL = calURL + "&text=" + escSumm + "&dates=" + DateTime
	app.openLocation(calURL)
}

// iCalカレンダーにイベントを登録する
var sDate = new Date(sYY + "/" + sMM + "/" + sDD + " " + sHH + ":" + sMin + ":00")
var eDate = new Date(eYY + "/" + eMM + "/" + eDD + " " + eHH + ":" + eMin + ":00")
ans = app.displayDialog(("iCalのカレンダーに「" + Summ + "」" + DateTime + "を登録しますか？"), {
	buttons: ["しない", "する"],
	defaultButton: "する"
	})
if (ans.buttonReturned == "する") {
	var iCal = Application("Calendar")
	iCal.activate()
	var Calendars = iCal.calendars.whose({name: iCalName})
	var Calendar = Calendars[0]
	var event = iCal.Event({summary: Summ, startDate: sDate, endDate: eDate})
	Calendar.events.push(event)
}
```

ご指導、コメント歓迎します。