どうも。ケニー(tsujikenzo)です。このシリーズでは「[Asana API]スプレッドシート連携でタスク登録をしよう」をお届けしています。
今日は最終回で、10回目です。
前回のおさらい
前回は、「カスタムAsanaクラス」をお届けしました。
最後は、アクセストークンなどを格納するグローバルの書き方と、カスタムメニューとmain(エントリーポイント)を実装して終わりたいと思います。
今回は、「グローバルとカスタムメニューとmain」です。
今日のアジェンダ
- グローバルエリアについて
- カスタムメニュー
- main(エントリーポイント)
グローバルエリアについて
どこからでも呼び出せる、グローバルエリア(領域)。
GASでは、プロパティストアを使って、アクセストークンなどの機密情報を格納することは、ご存知だと思います。
global.gsのような命名で、スクリプトファイルを作成しましょう。
function setPropertyStore() {
//プロパティストアの選択
const properties = PropertiesService.getScriptProperties();
const ASANA_ACCESSTOKEN = "あなたのアクセストークン";
properties.setProperty('ASANA_ACCESSTOKEN', ASANA_ACCESSTOKEN);
const WORKSPACE_GID = "あなたのワークスペースID";
properties.setProperty('WORKSPACE_GID', WORKSPACE_GID);
const SPREADSHEET_ID = "あなたのスプレッドシートID";
properties.setProperty('SPREADSHEET_ID', SPREADSHEET_ID);
}
クラス側で呼び出す際は、このように記述します。
/** クラスCustomAsana */
class CustomAsana {
/** コンストラクタ */
constructor() {
this.accessToken = PropertiesService.getScriptProperties().getProperty("ASANA_ACCESSTOKEN");
this.workspaceId = PropertiesService.getScriptProperties().getProperty("WORKSPACE_GID");
}
/** タスクを登録する */
createTask(task) {
//省略
}
}
/** Postシートクラス */
class PostSheet {
/** コンストラクタ */
constructor() {
this.sheetName = 'post';
this.SPREADSHEET_ID = PropertiesService.getScriptProperties().getProperty('SPREADSHEET_ID');
this.sheet = SpreadsheetApp.openById(this.SPREADSHEET_ID).getSheetByName(this.sheetName);
}
/** すべてのRecordsをオブジェクトレコーズで取得するメソッド
* @return{Array} objArray
*/
getPostSheetRecords() {
//省略
}
}
カスタムメニュー
カスタムメニューに表示して欲しい項目は、以下です。
- postシートに転記する
- Asanaにタスクを登録する
- Asanaのタスクを更新する(未実装)
以下のような、onOpen.gsになるでしょう。
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('🍉カスタムメニュー')
.addItem('🚀postシートに転記する', 'transferTasoToPostSheet') //function-main.gs
.addItem('🚀Asanaにタスクを登録する', 'createTaskToAsana')//function-main.gs
.addItem('🚀Asanaのタスクを更新する(未実装)', 'putTaskToAsana')//function-main.gs
.addToUi();
}
スプレッドシートでは、このような表示になります。絵文字などは積極的に使うようにしています。かわいいでしょ。
main(エントリーポイント)
main(エントリーポイント)となるfunctionは、新規スクリプトファイルに記述します。
ファイル名は「🚀function-main.gs」のような感じです。
以下のようなコードになります。
function main() {
//Javaの名残でmain関数を記述していますが意味はありません。
}
//以下、onOpenのカスタムメニュー構造に対応しています
/**
* 🚀postシートに転記する関数
*/
function transferTasoToPostSheet() {
//Postシートのインスタンス化
const p = new PostSheet();
// starの付いていないレコードを取得し、postシートに貼り付ける
console.log(p.setRecordWithoutStar());
}
/**
* 🚀Asanaにタスクを登録する関数
*/
function createTaskToAsana() {
//Postシートのインスタンス化
const p = new PostSheet();
// Asanaにタスクを登録する(未実装)
console.log(p.postTaskToAsana());
}
/**
* 🚀Asanaのタスクを更新する関数(未実装)
*/
function putTaskToAsana() {
// Asanaにタスクを登録する
// console.log(p.postTaskToAsana());
}
onOpenから、それぞれのfunctionを実行して、動作を確認しましょう。
GitHubリポジトリ
このブログで作成したGASはこちらです。
GID取得系のGASは、別の機会にでも。
まとめ
以上で、「グローバルとカスタムメニューとmain」をお送りしました。
この先、まだまだ実装しなければならない処理がありますが、いったん区切りとさせていただきます。
Asanaはタスクをこなすだけでなく、「なぜそのタスクが必要なのか」という問いまで与えてくれます。
いや、与えてくれるようになるまで、目標やKGI/KPIやMBOや仮説思考といった、組織マネジメントや課題解決方法も学び続けなければなりません。
これからも頑張っていこうと思います。
最後まで読んでいただき、ありがとうございました。