この記事は、Google Apps Script Advent Calendar 2016の14日目の記事です。
昨年のアドベントカレンダーに続き、2度目の参加です。
前回はGmailの添付ファイルをGoogleDriveへ自動保存!GoogleAppsScript活用法という記事を書きました。
さて、仕事でChatWork(チャットワーク)を使っている方も多いと思うのですが、ChatWork(チャットワーク)のタスク機能ってどうも個人的に使いづらいと感じています。
なので、Todoistなどのタスク管理アプリと連携させて、「タスク管理アプリにタスクを追加したら、ChatWork(チャットワーク)の特定グループにタスクが追加される」といった、一元管理ができないかを考えてみました。
そう、GoogleAppsScriptで。
今回は、タスク管理アプリTodoistとChatWork(チャットワーク)をタスク連携させるお話を書いてみたいと思います。
目次
- 1 ChatWork(チャットワーク)とTodoistのタスク連携のイメージ図
- 2 TodoistとChatWork(チャットワーク)のタスク連携に必要なものを確認する
- 3 IFTTT(イフト)でTodoistとGoogle Driveの連携をする
- 4 GoogleAppsScriptでチャットワークにタスク登録をするプログラムを用意する
- 5 GoogleAppsScriptでトリガーを設定する
- 6 無事に完成! GoogleAppsScriptでTodoistとChatwork(チャットワーク)のタスク連携
- 7 まとめ
- 8 Google Apps Scriptで仕事・作業の効率化! 実践レシピシリーズ一覧
ChatWork(チャットワーク)とTodoistのタスク連携のイメージ図
イメージとしてはこんな感じです。
今回は、アプリケーション同士を連携させるサービスの代表であるIFTTT(イフト)も使用していきます!!
IFTTT(イフト)って何? という方は、下記などを拝見していただくのかがいいかもしれません!
IFTTT(イフト)のユーザー登録をしないと、そもそも今回のお話は成り立たないので、ご注意くださいね!
現時点では、IFTTT(イフト)の場合、直接TodoistとChatWork(チャットワーク)の連携ができません。
ここで登場するのがGoogleAppsScriptです!
IFTTT(イフト)では、TodoistとGoogle Driveを連携させることは可能です。
そして、Google Apps Scriptを使えば、Google Driveとチャットワークの自動連携をさせることが可能になります。
つまり、TodoistとChatWork(チャットワーク)の間にGoogleAppsScriptを介することによって、今回やろうとしているタスク連携を実現していきます!
TodoistとChatWork(チャットワーク)のタスク連携に必要なものを確認する
それではまず、TodoistとChatWork(チャットワーク)のタスク連携に必要なものを並べてみたいと思います。
アプリケーションとして必要なのは、以下の通りです。
- ChatWork(チャットワーク)
- Todoist
- GoogleDrive(Googleアカウント)
- IFTTT(イフト)
ChatWork(チャットワーク)側で必要なもの
ChatWork(チャットワーク)側で必要なものとしては、以下があげられます。
- チャットワークのAPトークン
- チャットワークAPIドキュメント
ChatWork(チャットワーク)のAPトークンは、APIを利用するための許可証みたいなものです。
APIトークンががないと、GoogleAppsScriptから自動的にチャットワークに書き込みをすることができません。
いわば、書き込みを外部からしてもいいという、許可証ということですね!
ChatWork(チャットワーク)APIは現在プレビュー版での公開だそうなので、今後仕様が変わる可能性はあると思いますが、ひとまずトークンを使うための申し込みが必要になるため、上記に掲載したチャットワークの公式情報を参考に手続きをしてみるといいと思います!
(ちなみにAPIトークンが発行されるまで、数日かかります・・・)
今回の記事用のためにテスト用のChatWork(チャットワーク)グループを作成しました。
「チャットワークとTodoistの連携テスト用グループ」という名前のグループ名にしていますが、ChatWork(チャットワーク)グループの名前は、日本語でも英語でも特に問題ないようです!
ChatWork(チャットワーク)グループを作成すると上記のような感じで出来上がります。まっさらな状態で、グループなのに、入っているのは自分だけという状態です。。。笑
Todoist側で必要なもの
Todoist側では、今回のタスク連携のために使用する専用のプロジェクトを作成します。
今回は、ChatWork(チャットワーク)とTodoistの連携をするということで、「todoist-chatwork」という名前のプロジェクトを作成してみます。
Todoistでプロジェクトを作成すると上記のような感じになります。
ここで注意点なのですが、Todoistのプロジェクト名が日本語になっていると、今回実施しようとしているタスク連携がうまくいきません!
なので、Todoistのプロジェクト名は全て英語にしました!
今回のプログラムが完成すると、Todoistの「todoist-charwork」というプロジェクト内に追加されたタスクが、自動的にChatWork(チャットワーク)内の「チャットワークとTodoistの連携テスト用グループ」というグループ内のタスクとして、自動的に追加されるようになります。
IFTTT(イフト)でTodoistとGoogle Driveの連携をする
まずは、IFTTT(イフト)を使って、「TodoistとGoogleDriveの連携」をします。
具体的には、「Todoistにタスクを登録したら、Google Drive内のスプレッドシートに登録したタスクを記録する」というレシピを登録します。
せっかくなので、レシピの登録方法も解説します!
(IFTTT(イフト)へのユーザー登録はした状態でご覧になってくださいね!)
1、New Appletを選択
IFTTT(イフト)のログイン後の画面で、「New Applet」を選択します。
2、Todoistを「+ This」のアプリケーションとして選択し、必要な設定をする
画面が進むので、「+This」となっているところを選択します。
トリガー選択画面になったら「New task created」を選択します。
Todoistのプロジェクト選択画面になったので、今回作成した「todoist-chatwork」というプロジェクトを選択します。
3、Google Driveを「+that」のアプリケーションとして選択し、必要な設定をする
続いて、「+that」のアプリケーションとして、GoogleDriveを選択します。
アクション選択画面では「Add row to Spreadsheet」を選択します。
Add row to Spreadsheetの詳細設定、つまり「どのスプレッドシートに記録するのか」だったり、「タスク情報のうち何をスプレッドシートに記録するのか?(日付、タスク内容、優先度etc・・・)」を選択します。
注意点としては下記が挙げられます。
- SpreadsheetName → タスク保存先のスプレッドシートの名前を設定。英語で設定する。
- Formatted row →タスク情報の何をスプレッドシートに記録するかを設定。日付、タスク内容、優先度etc…
- Drive folder Path → スプレッドシートのGoogle Driveのどこのフォルダに設定するかを指定。
特に注意しなければならないのは、「Drive folder path」です。
この後、スプレッドシートを作って、そこからGoogleAppsScriptを立ち上げていくのですが、この後作成するスプレッドシートの場所と、Drive folder pathで指定する場所を一致させないと、今回ご紹介するプログラムではおかしなことになります。
今回は、冒頭のあたりでもお伝えしたように、GoogleDrive内に「chatwork-todoist」という名前のスプレッドシートを作るという条件でお話をしているので、Drive folder Pathには「todoist」とだけ入力します。
この時点で、「Todoistにタスクを登録すると、自動的にGoogle Drive内のスプレッドシートにタスクが書き込まれる」という部分が完成します。
具体的には上記のように、Todoistにタスクを追加していくと、Google Drive内の特定のスプレッドシートに、1行ずつタスクが書き込まれていくというものです。タスクを追加すれば追加するほどスプレッドシートの行は増えていきます。
ちなみに、IFTTT(イフト)のレシピの仕様上、2,000行を超えると、新しいスプレッドシートが生成されるようになっているようです。
GoogleAppsScriptでチャットワークにタスク登録をするプログラムを用意する
次に、Google Apps Scriptに定義した関数が実行されたら、チャットワークに自動的にタスクが登録されるというプログラムを書きます。
先ほどまでの作業で作成されている、GoogleDrive内の「chatwork-todoist」というスプレッドシートを立ち上げて、さらに「ツール→スクリプトエディタ」から、GoogleAppsScriptのエディタを開きます。
そしてエディタ内にGoogleAppsScriptを入力します。
具体的に書くスクリプトは、以下の通りです。
function addTestTask() {
//チャットワークのタスクの追加場所をAPIトークンとルームIDで設定
var token = 'ここにチャットワークAPIトークンを入れる'; //チャットワークAPIトークン
var room_id = "ここにチャットワークのルームIDを入れる"; //ルームIDを設定
//スプレッドシードの最終行のA列に書かれている値をタスクとして取得
var ss = SpreadsheetApp.getActiveSpreadsheet();
var lastrow = ss.getLastRow();
Logger.log(lastrow);
var task = ss.getRange("A"+lastrow).getValue();
//チャットワークに追加する時のタスク投稿内容を設定
var params = {
headers : {"X-ChatWorkToken": token}, //APIトークン
method : "post",
payload : {
body : task, //タスクの内容
to_ids : "ここにチャットワークの自分のアカウントIDを入れる"
}
};
//実際にチャットワークに投げてみる
var url = "https://api.chatwork.com/v1/rooms/" + room_id + "/tasks"; //チャットワークのエンドポイントを設定
UrlFetchApp.fetch(url,params); //チャットワークAPIによって実際にリクエストをする
}
チャットワーク関連で必要なIDがいくつかあるので、確認の上入力する必要があります。
基本的にはチャットワーク APIドキュメントを見れば、大概のことは書かれているので、各種IDの確認方法を知りたい方は、一度ドキュメントを読んでみることをお勧めします!
ここまでの時点で、「TodoistとGoogleDriveの連携」と「GoogleDriveとChatWork(チャットワーク)の連携のためのプログラムの用意」ができた形になります。
最後に、GoogleAppsScriptを実行するタイミングを調整するために、トリガーを設定して、完成にこぎつけていきます!
GoogleAppsScriptでトリガーを設定する
GoogleAppsScriptのプログラムを入力したら、次はトリガーの設定をします。
Google Apps Scriptにおけるトリガーとは、「特定の時間にプログラムを実行する」だったり「スプレッドシートの値が変更されたら、プログラムを実行する」といったように、GoogleAppsScriptのプログラムを自動的に動かす条件を設定することができるものです。
今回、トリガーは「スプレッドシートの値が変更されたら、プログラムを実行する」というものにしました。
上述したように、今回のプログラムが実行されると、スプレッドシートにタスクが1行ずつ追加されていくので、必ず「スプレッドシートの値の変更」が発生します。
なので、「スプレッドシートの値が変更されたら、プログラムを実行する」という条件をGoogleAppsScriptのトリガーに設定すれば、
- Todoistでタスクが追加されたら、IFTTT(イフト)での連携によって、スプレッドシートにタスクが自動的に書き込まれる
- スプレッドシートにタスクが書き込まれる = 値が変更されるということなので、仕込んでおいたGoogle Apps Scriptが自動的に実行される
- チャットワークのグループにタスクが自動追加される
という流れが出来上がります。
これで、今回のプログラムが完成になります!
無事に完成! GoogleAppsScriptでTodoistとChatwork(チャットワーク)のタスク連携
それでは、完成した今回のプログラム、どうなるかを見てみましょう!
まずはTodoistにタスクを追加します。
Google Drive内のスプレッドシートを見てみると、IFTTT(イフト)での連携によって、タスクが書き込まれているのがわかります。
ちなみにTodoistにタスクを追加してすぐにGoogle Drive内のスプレッドシートにタスクが書き込まれるわけではないようで、状況によって5分〜10分くらい時間がかかるみたいです・・・
そしてチャットワークを見てみると・・・
チャットワークのグループにもタスクが追加されているのがわかります!
無事に、完成することができました。
今回は単純にタスクの内容を自動連携させただけですが、期の設定されたタスクも自動連携させることはできるようなので、今後はその辺も実装してみたいとおもいます!
まとめ
ということで、半分ネタのつもりでやってみたら、思いの外長文になってしまいました・・・
Zapierなどを使えばGoogleAppsScriptを使わずに連携させることもできるかもしれませんが、今回はGoogleAppsScriptを使用するという縛りがあるので、今回のようなことを考えてみました。
何かの参考になれば・・・なるのだろうか・・・