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

  • 19
    Like
  • 0
    Comment

作ったツールをこの記事で紹介しようと思います。
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

最後に

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

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