作ったツールをこの記事で紹介しようと思います。
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.json
と calendar_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
最後に
どんなフィードバックでも大歓迎です!
また、便利だと思ったら、スターいただけたら嬉しいです ☆