chatwork apiとGmail apiをマッシュアップしてchatopsでメール送信をする – 前編・Gmail apiの設定

2015.01.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、せーのです。昨日より仕事始め、ということで仕事に使えそうなchatopsを組んでみたいと思います。長くなりそうなので何回かに分けて書きたいと思います。

どうしてこうなった

弊社はリモートワーク(会社内以外で仕事を行うこと)がとても盛んです。リモートワークは東京組のように北海道人からすれば圧殺目的としか思えないような異常な通勤に朝早くから肉体と精神を疲労させる事がなかったりするだけではなく、朝型の人間にとってすれば通勤によって朝イチ特有の集中力を途切らす事なく仕事に没頭でき、かつ朝イチから仕事をしているので早く仕事を終えることが出来るという、クリエイターにとっては素晴らしい制度です。 ところで、弊社でリモートワークを行うには

  • チャットワークの専用部屋でリモートワークする旨を告知し
  • 管理部宛にリモートワークする旨のメールを出し
  • 社内用のカレンダーにリモートワークする旨を書き込む

ことでリモートワークが認可されます。 どうでしょう。何かめんどくさいです。実際に私もチャットワークに書き込んだことで安心してしまい、メールするのを忘れたりする等しょっちゅうあり、管理部の方にご迷惑をお掛けすることが多々あるわけです。そこで、まずはチャットワークの書き込みとメールの送信をchatopsで一遍に済ませてしまおう、というのが目的です。 もちろん使い方はこれだけには留まらず、応用次第によっては今後Gmailの画面は一切開かずに全てチャットへの書き込みのみで済ませてしまうことも可能になるでしょう。

どうやるの?

使用するAPIは

の2つです。Gmail APIは去年の夏くらいに満を持して登場したGmailを外から操作できるAPIです。それまではSpreadSheetを使用してGAS(Google App Script)からメールを操作するしかありませんでしたが、これでようやくGmailが外から思う存分使えるようになりました。 Chatwork APIはChatworkの操作には欠かせないAPIですが、今までなぜか[指定した部屋の最新書き込みを取得する]というGET操作だけ出来ませんでした。chatopsには欠かせないコマンドのため実装を首を長くして待っていましたがこの度、ようやくこのAPIが実装されました。Chatworkさん、あざす!

ということで設計としては

  • Chatwork APIで特定の部屋を監視
  • 自分のアカウントIDの書き込みがあったら内容を取得する
  • Gmail APIを使用して1行目を件名、2行目以降を本文として特定のアドレスにメールを送信する

となります。

Gmail APIの登録

ではまずはGmail APIを使えるようにしましょう。Google Developer Consoleを開いて新たなプロジェクトを作成します。

developerproject00

出来たプロジェクトをクリックするとダッシュボードが表示されます。

developerproject01

[API]をクリックし下のテキストボックスからGmail APIを検索して有効化します。

developerproject02

次に認証です。認証は「OAuth 2.0」を使用して個別に認証する方法と「公開APIキー」を作成してそのAPIキーをIP制限する方法があります。 ですがGmail APIはドキュメントにあるように

Requests to the Gmail API must be authorized using OAuth 2.0 credentials. You should use server-side flow when your application needs to access Google APIs on behalf of the user, for example when the user is offline. This approach requires passing a one-time authorization code from your client to your server; this code is used to acquire an access token and refresh tokens for your server.

OAuth 2.0のみ使用できます。ということでOAuthのクライアントIDを取得します。[認証情報]からOAuthの[新しいクライアントIDを作成]をクリックします。

developerproject04

今回はサーバーから直接Gmail APIを操作するので「サービスアカウント」を選択します。

developerproject05

秘密鍵がダウンロードされ、パスワードが表示されます。Googleでの鍵ファイルはp12という拡張子のファイルになります。

developerproject06

[認証情報]にクライアントID、メールアドレスが表示されます。これらの情報と先程のp12ファイルを使用してログインすることになります。 ログインには各言語でライブラリがありますのでこちらを利用するのが良いかと思います。 私は全国3000万人のペチパーの末端にいる人間なのでPHPを使いたいと思います。ライブラリのインストールはComposerを使用したいと思います。

composer.json

{
    "require": {
        "google/apiclient": "1.0.*@beta"
    }
}
[ec2-user@ip-172-31-27-131 ~]$ mkdir gmailapi
[ec2-user@ip-172-31-27-131 ~]$ cd gmailapi/
[ec2-user@ip-172-31-27-131 gmailapi]$ curl -s http://getcomposer.org/installer | php
#!/usr/bin/env php
All settings correct for using Composer
Downloading...

Composer successfully installed to: /home/ec2-user/gmailapi/composer.phar
Use it: php composer.phar
[ec2-user@ip-172-31-27-131 gmailapi]$ vi composer.json
[ec2-user@ip-172-31-27-131 gmailapi]$ php composer.phar install
Loading composer repositories with package information
Installing dependencies (including require-dev)
  - Installing google/apiclient (1.0.6-beta)
    Downloading: 100%

Writing lock file
Generating autoload files
[ec2-user@ip-172-31-27-131 gmailapi]$

exampleフォルダにあるservice-account.phpを参考に認証をすることになります。

まとめ

いかがでしたでしょうか。p12ファイルはsshでいうpemファイルの代わりですね。なかなかややこしそうなところをライブラリに丸投げしてしまうことで何とかサクサク作れそうです。 本日はここまでにしたいと思います。次回はChatwork APIのテストとGmail APIのテスト、そして両者の連携の様子をご紹介したいと思います。お楽しみに。

参考資料