スクリプトからEmailを送るカスタムメニューとポップアップメッセージの制作スプレッドシートにカスタムメニューを追加して、スクリプトの特定の関数へリンクするように、メニューアイテムを加えるのは難しいことではない。メニューバーにSurpreisesというメニューを追加する。その内のどちらか一つを選ぶと、それによって関数はメッセージボックスを表示する。Surprise!")}普通は、スプレッドシートが開かれると同時に、カスタムメニューが表示されるようにしたいと思うだろう。それをするには、onOpen関数をスクリプトに含めればいい。これらの関数はスプレッドシートが開かれると同時に実行される。ユーザーがすぐ見られるようにメニューとデーターでスプレッドシートを最初から埋めるのに便利だ。スクリプト例では、メニューエントリは次のコードのように定義されている。];変数menuEntriesはオブジェクトの配列をとる。それぞれのオブジェクトは、名前と関数名キーを一セットで持っている。配列は要素の集合でスプレッドシートのような感じで働くものである。それぞれの配列要素は配列の位置、インデックスポイントと呼ばれる、で識別される。Appsスクリプトはゼロが起点となる。最初の要素は1じゃなくて0ということである。3x2の配列なら、最初の場所は0,0となる。配列は、プログラムやスクリプト内でデータを操作するのに便利な方法である。メニューアイテムは配列内にあるといえる。メニュー名と関数が角括弧っでかこまれてるから。それぞれのメニューアイテムは中括弧に置かれ、この構文はそれぞれの名前-関数ペアをオブジェクトとして定義している。menuEntries);メニューラベルはSurprisesで、menuEntriesはaddMenuメソッドの引数となり、メニューアイテム名とリンクする関数名を定義する配列による値をパスする。menuEntries);}次のコードは新たなメニューのメニューアイテムを選択した時にメッセージボックスを表示させる。Browser.msgBox("message_to_display");menuEntries配列で使う名前を関数に与える。BrowserクラスのmsgBoxメソッドを呼び出し、表示させたいメッセージを引数としてとる。良いパフォーマンスのためのスクリプトの最適化ただ二つの基本原則を理解するだけで、スクリプトから最大限のパフォーマンスを引き出すことができる他のサービスの呼び出しを最小化するパッチ処理をできるだけ使う次の二つの章でこの原則の詳細を見てみよう。他サービス呼び出しの最小化JavaScriptの処理は他のサービスと通信するよりかなり早い。Appsスクリプト内での処理はスプレッドシートやドキュメントやサイトや翻訳などなどを呼び出すよりずっと速い。これらの他サービス呼び出しの最小化の方法を見つけられれば、スクリプトはずっと速く動く。バッチ処理の使用スクリプトはスプレッドシートからデータを読み、計算をし、結果を書き込む必要がある。Appsスクリプトは先読みを使って最適化する機能をすでに持っている。キャッシュを使って、読み込み書き込みを最小化する最適化機能を最大限に生かしてスクリプトを書く事ができる。読み書きコマンドは遅い。スクリプトをスピードアップするために、配列に一回の命令で全てのデータを読み込み、配列のデータを使って様々な処理を行い、再び一回の命令でデータを書き込む。これは使うべきでない悪い例。マスすべてに背景色をセットするために次のゴードを使ってる。このコードは使用してはならない。遅くて、非効率なコードの例である。SpreadsheetApp.flush();}このスクリプトは非効率的である。100行、100列のループを繰り返し、10000セルに絶え間なく書き込む。このときAppsスクリプトのライトバックキャッシュが働き,全てのラインの最後でデータをフラッシュする。キャッシュのお陰で、100回だけスプレッドシートを呼び出すだけですんでいる。コードは呼び出しをまとめることでもっと効率的になる。上を書きなおして、colorsという配列にセル範囲を読み込み、背景色処理は配列内のデータで行い、配列の値はスプレッドシートに書き込まれる。100).setBackgroundColors(colors);非効率的なコードは70秒ほどかかるのに対して、効率的なコードは一秒しかかからない。フラクタルアートスクリプトをもし見てるなら、我々がちょっとばかりの変更を、例をわかりやすくするためにくわえてることに注意していただきたい。実際に公開されてるスクリプトは、setBackgroundRGBコールを使っていて、上記のようにsetBackgroundColorは使っていない。getColor_関数は次のように変更されている。appsのリファレンスの勝手翻訳が主なコンテンツです。