Google Apps Scriptのメルマガ配信リスト自動更新スクリプトを高速化する

★気に入ったらシェアをお願いします!


speeding-up

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Google Apps Scriptを使ってメルマガ配信システムを作成しています。

ここしばらくの連載では名刺管理サービスCAMCARDのデータをスプレッドシートに取り込んで、メルマガ配信システムの宛先リストを自動更新する処理を作る方法についてお伝えしています。

【GAS】名刺管理アプリの出力データを活用してメルマガ配信リストを自動更新する
Google Apps Scriptでメルマガ配信システムを作りました。今回はスプレッドシートにインポートした名刺管理アプリのデータを使ってメルマガ配信リストを自動更新する方法を紹介いていきます。

しかしながら、Google Apps Script…何も考えずにスプレッドシートの読み書きをガシガシ行うような組み方をすると、めっちゃ処理が遅くなるんです。

それを回避するために、前回はスプレッドシートを操作する際にAPIの呼び出し回数を抑えて、処理を格段に速くする方法についてお伝えしました。

Google Apps Scriptのスプレッドシート読み書きを格段に高速化をする方法
Google Apps Scriptでスプレッドシートの操作をしていて実行速度が遅い!と感じたことがあると思います。今回はスプレッドシートを操作する場合に処理速度を格段に速くする方法をお伝えします。

今回は上記処理速度を速くする方法を活用して、メルマガ配信リストの自動更新スクリプトの最適化を進めていきたいと思います。

おさらい:修正前のスクリプトとその実行速度

おさらいですが、以前作成したメルマガ配信リストの自動更新スクリプトはこちらです。

CAMCARDのデータが50行だった場合に実行してみますと、その実行速度は…

メルマガリスト更新のGoogle Apps Scriptの実行速度を測定

42秒…遅いっすね。

では、スクリプトを修正して解決していきましょう。

APIの呼び出し回数を減らして高速化する

上記のスクリプトですが、14行から始まるfor文内にそれはもうたくさんのAPI呼び出しがいますね…。

シートの読み書きはgetValuesやsetValuesを活用して範囲でまとめて配列に処理するようにして、セル単位での比較や計算は配列内のデータに対して行うようにします。

全体の流れとしては以下のようにしていきます。

  1. 配信リストシート・Contactsシートとその最終行の取得
  2. 配信リストシート・Contactsシートの全てのデータを配列に格納
  3. Cotntactsの配列データについて
    1. 配信リストにも同じメールアドレスが存在すればフラグを立てる
    2. フラグが立っていなければ配信リストの配列データに行を追加
    3. 追加した行に社名、苗字、名前、メールアドレスを追加
  4. 配信リストの配列データを配信リストシートにまとめて貼り付ける

という流れで組んでいきます。

処理速度を改善したメルマガ配信リスト更新スクリプト

スクリプトはこのようになりました。

追加すべきリストが見つかったら、配信リストのデータが格納された配列であるvarAddressに新たな行を追加します。

二次元配列のときは事前に”箱”の確保を

その際に注意点として36行の

が必要になります。

例えば、スクリプトを動作させる前のvarAddressは行方向の配列の数が3行だったとします。

その場合、varAddressには

とした場合と同様になるのですが、ここに新しい行として

と追加しようとするとエラーになります。

varAddress[3]を格納するためのエリアの割り当てができていないからです。

その場合には、データを格納しようとする前に

などとして、格納するための”箱”を事前に確保してあげればOKです。

実行結果

上記スクリプトを実行して、速度を測定してみましょう。

高速化したGoogle Apps Scriptの実行速度

0.267秒…!

その差158倍です。絶対にこちらの方法が良いですね。

まとめ

Google Apps Scriptのメルマガ配信リスト自動更新スクリプトの高速化をする方法についてお伝えしました。

APIの呼び出し回数を減らすことを考えるのは、もう必須と言っていいほど効果がありますね。

ぜひ、マスター頂ければと思います。

さて、Google Apps Scriptによるメールマガジン配信システム。ほぼ完成したのですが最後にスプレッドシートに作ったスクリプトを独自メニューとして追加する方法をお伝えします。

Google Apps Scriptでスプレッドシートに独自のメニューを追加する方法
Google Apps ScriptでonOpenイベントハンドラとSpreadsheetオブジェクトのaddMenuメソッドを使って、スプレッドシートに独自のメニューを追加する方法をお伝えします。

どうぞお楽しみに!

連載目次:Google Apps Scriptでメルマガシステムを作っちゃおう!

Google Apps ScriptでGmail、スプレッドシート、ドキュメントを連携させて操作することでメルマガシステムが簡単に実現できます。思ったより2割くらい簡単にできますよ。ちなみに無料です…さすがGoogle。
  1. 初心者でも簡単!Google Apps ScriptでGmailを操作してメールを送る方法
  2. 初心者でも簡単!Google Apps Scriptでドキュメントを取得して表示する方法
  3. Google Apps Scriptでスプレッドシートのリストをもとに宛名を差し込んだメール本文を作る
  4. たったの38行!Google Apps Scriptで超簡易メルマガ配信システム
  5. 名刺管理アプリCAMCARDの連絡先リストをスプレッドシートに取り込む
  6. 【GAS】名刺管理アプリの出力データを活用してメルマガ配信リストを自動更新する
  7. Google Apps Scriptのスプレッドシート読み書きを格段に高速化をする方法
  8. Google Apps Scriptのメルマガ配信リスト自動更新スクリプトを高速化する
  9. Google Apps Scriptでスプレッドシートに独自のメニューを追加する方法