Quantcast
Channel: Google Developers Japan
Viewing all articles
Browse latest Browse all 2207

Firebase による、Apps Script アドオンでのリアルタイム通知

$
0
0

[この記事は Romain Vialard(Google Developers Expert、Google スプレッドシート アドオン Yet Another Mail Merge 開発者)による Google Apps Developers Blog の記事 "Real-time notifications in add-ons with Firebase" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

Yet Another Mail Mergeは、Gmail で下書きとして保存されたテンプレートと Google スプレッドシートのデータに基づいて、各受信者の個人名の書かれたメールを一斉送信することを可能にする Google スプレッドシート アドオンです。このアドオンは、数百のメールを送信できますが、この種の操作の完了には通常数分の時間を要するため、機能が長時間サーバー側で実行している間に、ユーザー インターフェースに何を表示するべきか、という問題が生じます。

アドオンでのリアルタイム通知

Firebaseは、リアルタイムに特化した機能を提供し、この問題を解決します。昨年 12 月、Apps Script チームは HtmlService の改良バージョンを発表しました。これにより制限事項が大幅に削減され、外部 JS ライブラリを使用できるようになりました。Firebase を使えば、リアルタイムで簡単にデータを格納および同期することが可能です。
これらを組み合わせることで、サーバー側で実行しているApps Script 機能により送信されるメールの数をリアルタイムでユーザーに通知することが可能となります。ユーザーがメールのマージを開始すると、メールを送信する Apps Script が呼び出され、同時に Firebase に接続されます。Apps Script が新しいメールの送信を完了するごとに、Firebase のカウンタがインクリメントされ、次の図に示すように UI がリアルタイムでアップデートされます。

実装

ループ内では、メールが送信されるごとに(つまり、メソッド GmailApp.sendEmail() を使用するごとに)、Apps Script UrlFetch サービスを使用し、Firebase にその REST API を使用して書き込みます。Firebase の機能により、これを簡単そして安全に行うことができ、またOAuth 認証フローを使わずFirebase app secretのみで実現することができます。以下は一例です。
function addNewUserToFirebase() {
var dbUrl = "https://test-apps-script.firebaseio.com";
var secret = PropertiesService.getScriptProperties().getProperty("fb-secret");
var path = "/users/";
var userData = {
romainvialard:{
firstName:"Romain",
lastName:"Vialard",
registrationDate: new Date()
}
};
var params = {
method: "PUT",
payload : JSON.stringify(userData)
}
UrlFetchApp.fetch(dbUrl + path + ".json?auth=" + secret, params);
}
クライアント側では、改善された Apps Script HtmlServiceにより、正式な JS クライアント ライブラリを使用して Firebase に接続し、以前に格納されたデータを取得できるようになりました。特に、このライブラリの on()メソッドは、データベース内の特定の場所におけるデータ変更の監視に使用できます。したがって、サーバー側で新しいタスクが完了する(つまり新しいメールが送信される)ごとに、Firebase に通知し、それに応じて UI が自動的にアップデートされます。
var fb = new Firebase("https://test-apps-script.firebaseio.com");
var ref = fb.child('users/' + UID + '/nbOfEmailsSent');
ref.on("value", function(data) {
if (data.val()) {
document.getElementById("nbOfEmailsSent").innerHTML = data.val();
}
});

アドオンでのその他の Firebase の使用法

上記の例に加え、Google Apps Script アドオンで Firebase を便利に使用する方法は他にもあります。
  • Yet Another Mail Merge は、支払いプランを提案することもでき、その場合顧客リストの保存を必要とします。Firebase はこういったケースにもまさにうってつけです。誰かがプランを購入するごとに、支払いツールが Apps Script ウェブ アプリを呼び出し、これが Firebase に支払いの詳細を書き込みます。したがって、購入の直後にユーザーが追加機能を開くと、サーバー側の機能が Firebase を呼び出し、該当プレミアム機能がこのユーザーに対して有効化されていることを確認できます。
  • もうひとつ便利な使用方法として、メール マージの最終段階で、Firebase を使用して開かれたメールのリアルタイム レポートをスプレッドシートのサイドバーに提供できます。
以上は、Apps Script とFirebase を使用して実現可能な機能のほんの数例に過ぎません。お気軽に自分で試したり、Yet Another Mail Mergeをインストールして、実際の例を確認してください。また、FirebaseAppと呼ばれる公開 Apps Script ライブラリがあり、これらは Firebase の使用を開始する際に役立ちます。その他の標準 Apps Script ライブラリと同様に使用してください。
たとえば、次の特定のパラメータを使用して、Firebase からデータを簡単にフェッチできます。
function getFrenchContacts() {
var firebaseUrl = "https://script-examples.firebaseio.com/";
var base = FirebaseApp.getDatabaseByUrl(firebaseUrl);
var queryParameters = {orderBy:"country", equalTo: "France"};
var data = base.getData("", queryParameters);
for(var i in data) {
Logger.log(data[i].firstName + ' ' + data[i].lastName
+ ' - ' + data[i].country);
}
}
Google Apps Script を使用して独自のアドオンを構築してみてください。さらに詳しく知りたい場合は、ドキュメント(developers.google.com/apps-script)を参照、またQuickstart プロジェクトをお試しください。皆さまのアドオンのお役に立てれば幸いです。


Posted by Ian Lewis - Developer Relations Team

Viewing all articles
Browse latest Browse all 2207

Trending Articles