JavaScript
Node.js
GoogleCalendar
tool
command-line

コマンドラインで簡単にGoogle Calendarのイベントを管理する

More than 1 year has passed since last update.

作ったツールをこの記事で紹介しようと思います。

GitHub: gcal-cli

このツールでコマンドライン経由で簡単にGoogle Calendarのイベントを管理できる。



  • イベントリスト

  • イベントインサート

  • Bulkイベントインサート

  • 自然言語処理を利用可能

  • Customizable 設定

  • OAuth2認証



使い方

gcal [-C <file>] [cmd] [--debug]

OPTIONS
-C, --config <file>
--debug


イベントリスト

デフォルトで今日のイベントが表示される。

$ gcal list

下記のようなレスポンスが返ってくる。

   Upcoming events (2017-09-07T00:00:00+09:00 ~ 2017-09-07T23:59:59+09:00)

2017-09-07 20:00 - 好きな番組
2017-09-07 22:30 - 明日のMTGの準備

自然言語も利用可能。

$ gcal list yesterday

$ gcal list 'from tomorrow to the day after tomorrow'

ISO日付でも利用可能。

$ gcal list -f 2017-03-23 -t 2017-03-27


イベントインサート

インサートの際に文言を入れると自然言語処理される。

$ gcal insert 'Party tomorrow from 3pm to 5pm'

下記のようなレスポンスが返ってくる。

Party: 2017-09-14T15:00:00+09:00 ~ 2017-09-14T17:00:00+09:00

https://www.google.com/calendar/event?eid=N2EycWI0ZWJjaWlpcWp2Y3NnY2U5czVvdjggdG9rYWdlcm9oQG0

オプション経由ならこんな感じで利用可能。

$ gcal insert -s 'パーティ' -d 2017-03-23 -t 15:00 -D 2h

-D <duration>指定しないと、デフォルトで1時間のイベントがインサートされる。

$ gcal insert -s '予定' -d 2017-03-24 -t 11:00

-t <time>も任意。指定しないと終日イベントになる。

$ gcal insert -s '旅行' -d 2017-03-25


Bulkイベントインサート

.js、もしくは .jsonファイルでBulkでインサート可能。

events.json

[{

"calendarId": "primary",
"resource": {
"summary": "億泰と遊ぶ",
"location": "杜王町",
"description": "その辺でもウロウロしようぜ",
"start": {
"dateTime": "2017-09-08T09:00:00"
},
"end": {
"dateTime": "2017-09-08T10:00:00"
}
}
}, {
"calendarId": "primary",
"resource": {
"summary": "DIOを倒す",
"location": "カイロ、エジプト",
"description": "DIOめ。やれやれだぜ。",
"start": {
"date": "1987-06-01"
},
"end": {
"date": "1987-06-12"
}
}
}]

$ gcal bulk -e ./events.json

.jsファイルを使うと、relative time等を指定できる。

events.js

const today = new Date();

today.setHours('17', '00', '00');
const tomorrow = new Date(today.getTime()+1000*60*60*24);
module.exports = [{
"calendarId": "primary",
"resource": {
"summary": `Release`,
"start": {
"dateTime": today.toISOString()
},
"end": {
"dateTime": today.toISOString()
}
}
}, {
"calendarId": "primary",
"resource": {
"summary": "Release",
"start": {
"dateTime": tomorrow.toISOString()
},
"end": {
"dateTime": tomorrow.toISOString()
}
}
}];

$ gcal bulk -e ./events.js

使えるプロパティはこちら


ヘルプ

ヘルプコマンドでAPIが表示される。

$ gcal help


認証について

認証はOAuth2経由で行う。2分ぐらいで済む!英語の説明はこちら


1) プロジェクトクレデンシャルを取得

client ID, client secret and redirect URIが必要になる。Developer Consoleから取得できる


  • プロジェクトを選択する


  • 認証情報へ移動する


  • 認証情報を作成OAuth クライアント ID

  • JSONファイルをダウンロードする


2) 同意画面URLを作成

デフォルトでアプリはホームディレクトリにclient_secret.jsonというクレデンシャルファイルを探す。

$ gcal generateUrl


3) トークンを取得

同意画面に出てきたコードでトークンを作成できる。

$ gcal storeToken <code>

トークンはデフォルトでホームディレクトリに calendar_api_token.jsonという名で保存される。

これで完了!これから client_secret.jsoncalendar_api_token.jsonが必要なので、消さないでね✩


デフォルト設定を上書きする

オプション -C <file>を使って、デフォルト設定を上書きできる。

ファイルは .jsもしくは .jsonを利用可能。

設定は ./conf.jsにあります。

他にカスタマイズしたいものがあれば、是非イシューでも切ってください✩

例:

クレデンシャルとトークンのデフォルトパスを変更する。

/somepath/config.json

{

"CRED_PATH": "/my/secret/path/credentials.json",
"TOKEN_PATH": "/my/secret/path/token.json"
}

$ gcal -C /somepath/config.json generateUrl


ユースケース

過去のプロジェクトでリリースする度に手動でカレンダーにイベントを入れてましたので、こういうツールあれば便利だなーと思って、作りました。

様々な使い方:


  • ターミナルから出たくない場合

  • オートメーション・スクリプティング

  • 継続的インテグレーションでの利用(CI、Jenkins、等)

  • AlexaのSkills


最後に

どんなフィードバックでも大歓迎です!

また、便利だと思ったら、スターいただけたら嬉しいです ☆