実装
ループ内では、メールが送信されるごとに(つまり、メソッド 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
[この記事は 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