| Googleを追いかけろ! |
| |
| . | ||
| home >> ユーザーガイド 3. スクリプトを書く | ||
参考:例えば http://www.w3schools.com/ などはビギナー向けの良い教材です。 |
![]() |
Script Editor を使う
スクリプトを書いて実行し、さらにはトリガーの設定や共有などの実現には Script Editor を使わなくてはなりません。
今開いているスプレッドシート、または新規のスプレッドシートで Tools > Scripts > Script editor と選択してください。
Script Editor の動作はそのシートがすでにスクリプトを持つか持たないかによって決まります。もしスクリプトが含まれているのなら
シートはスクリプトがロードされた状態で開かれます。
スクリプトのない状態の Script Editor を開くと下のようになっています。
ここには myFunction() 名づけられた関数の宣言に関する一部のコードが見られるだけです。そして初めと終わりに中括弧があるだけです。
しかし、これもコードなのです。ただし実行してもこの関数は何もしてくれませんが。
Script Editor にコードを打ち込むか、Script Gallery から既存のスクリプトをインストールすると、スクリプトが表示されたり、プログラムとは無関係の要素との区別を容易にするために一部の文字色が変わったりします。
* このサイトではコードは茶色、コメントは緑色の2色で分けてるだけです
Script Editor では次のことができます。
スクリプトのプランニング
コードを書こうとするとき、はじめは擬似コードが役に立つでしょう。擬似コードはスクリプトが必要とするところを正確で詳細に文章にしたものと思えば良いでしょう。
いくつの関数が必要になるかの決定に役立つはずです。たとえば、どこでループやカウンターや変数などが必要かとか、どこで様々な計算が必要になるかを教えてくれます。
Stock Price スクリプトの擬似コードを見てみましょう。
first function runs when Spreadsheet is opened / シートが開かれると最初の関数が実行される read the current Spreadsheet into a variable / カレントシートを変数に読み込む define menu entries / メニューエントリーを定義する define menu name / メニュー名を定義する second function does most of the work in the Spreadsheet / 2番目の関数がシート上のほとんどの仕事を受け持つ read the current Spreadsheet into a variable / カレントシートを変数に読み込む set the column labels / カラムラベルをセットする define a counter called row / カウンタと呼ばれる行を定義する start a while true loop / ループの開始 use an if loop to test whether there's a stock symbol in the current row first column / 株式銘柄が最初のカラムの現在行にあるかないかをifループで行う write data to the log / ログにデータを書き込む look up the stock symbol / 銘柄を検索 write the stock information in the correct column of each row that has a stock symbol / 銘柄名を持つ各行の適当なカラムに株式情報を書き込む write data to the log / ログを書き込む increment the counter / カウンターを増やす さらにスクリプトとスプレッドシートについて
Google Spreadsheet に関連付けられた特別なスクリプトがひとつあります。もしシートのコピーをするとスクリプトもコピーされますが、
これを確かめるには、オリジナルシートのスクリプトキーとコピーされたシートのキーを照合することです。
複合的なスクリプトを備えたシートもあります。onOpen event handler を複数のスクリプトに関連付けてシートを作成すると、
スプレッドシートを開いたときにすべてのスクリプトの実行が開始され、順序付けられたスクリプトが不定期に開始されてしまいます。
event handler は特別なイベントが生じたときに実行される関数です。詳しい情報は
Running Scripts in Response to an Event(イベントへの応答スクリプト)で確かめてください。
スクリプトが他のスクリプトにある関数を呼び出したり、新たなスクリプトを作成したりすることはできません。スプレッドシートのセルを変更することによって、その動作をシミュレートすることはできますが、
関数が実行環境の状態を変更することはできません。
スクリプトをはじめる
Script Editor を開いてもご覧のように、スクリプトそのものは何も書かれてはいません。
function myFunction() {
}
myFunction という関数名は取り敢えず一時的に割り当てられたものです。実際にコードを書けば任意の名前を付けることが可能です。
とはいえ、関数名はその内容の指し示す単語で作られることが一般的です。例えば getStockName() のようにです。
関数名は、従来から最初の単語の最初の文字は小文字とし、後続の各単語の最初の文字に大文字を与えるラクダ文字としていることが多いのです。
また、関数内の命令は括弧で囲む必要があります。
スクリプトには必要な関数を好きなだけいくつでも持たせることができます。スクリプトを書くときにはコードの主となるブロックごとに、目的や変数の提供するものが何か等のコメントを入れるようにしましょう。
コメントは後々スクリプトの動きを追ったり、メンテナンスをするときに大変助けになるのです。
関数名がアンダースコアーで終わる、例えば internalStuff_() となった場合は一般の関数とは違う特別扱いをしなければなりません。
Script Editor の実行フィールドでこの関数を目にすることはありません。Script Manager にも表れませせん。
アンダースコアーが使えるのはユーザーに関数を実行させないように明らかにするときと他の関数だけが利用できるようにしたい時だけです。
スクリプト実行の方法を選ぶ
スクリプトをいつどのように実行させるかはコントロールできます。下の方法から選んでください。
Google Apps Script APIsを使う
Google Apps Script APIs を使う手助けになるものとして、オブジェクト指向プログラミング言語とその働きについて少し解説する必要があります。
さて、 API documentation をどのように読むべきでしょうか。
Google Apps Script は JavaScript 言語を利用しています。Google Apps を特定した操作性は API documentation で書かれたオブジェクトやメソッドを利用することで実現されます。
API はアプリケーションプログラミングインターフェイスの略です。スクリプトやプログラムで達成させたい標準的なタスクのコードをパッケージ化したものです。
オブジェクトの青写真とはオブジェクト生成のテンプレートです。同じテンプレートから作られたオブジェクトはすべて attributes と呼ばれる固有の特性を共有しています。
たとえば Google Apps Script は MailApp と呼ぶオブジェクトを持っています。
メール作成や送信に利用するオブジェクトです。オブジェクト名は通常は大文字で、オブジェクト名の他の単語はすべて途中が大文で始まる単語を使用します。
Google Apps Script API documentation はクラスであるオブジェクトについて説明しているのです。
メソッドはオブジェクトの挙動を示し、そして関数はオブジェクトと密接な関係にあります。MailApp オブジェクトはたった一つのメソッドしか持っていません。sendEmail method です。
一般的にメソッド名は小文字では始まり、途中は大文字始まりで追加していく単語です。このスタイルは camelCase として知られています。
sendEmailメソッドにはたくさんの引数があります。それらはメソッドに正しい働きをさせるための正確に定義した値のことです。
sendEmail の場合、メールの内容に含まれる情報を引数が定義しています。同様に sendEmail はより高等な引数をとります。
どちらの引数も、受信者、件名、本文またはテキスト、返信先アドレス、それ以外の引数を含みます。
4人に指示メールを送った次の例をみましょう。 mikemike, lisa, janos, nikhil, の名前がカンマ区切りのリストと引用符で囲まれています。 Attachment Example(添付ファイルの例) という件名と Here is my document という本文もあります。括弧内の命令は、添付ファイルを定義します。
MailApp.sendEmail("mikemike@example.com,lisa@example.com,janos@example.com,nikhil@example.com", "Attachment example",
"Here is my document", {attachments: myFiles});
上の指示は class MailAppクラス の sendEmail メソッドを呼び出しているものです。一般的には下のようになります。
className.methodName(argument1, argument2, argument3....argumentn);
たとえば Hello, World を表示するメッセージボックスだったら、 Browserクラス の msgBoxメソッドで、msgBoxの場合は Hello, World
そのもののテキスト文が引数に当たります。
Browser.msgBox("Hello, World");
ここですこしGoogle Apps Scripts API documentation ページの構成を紹介しましょう。
左サイドバーにはすべてのサービスへのリンクとそれぞれのサービスに関連深いオブジェクトへのリンクがあります。DocsList link へのリンクを開けば
オブジェクトとそのすべてのメソッドのリストがあります。また、base class File へのリンクを見るとクラスメソッドについての説明が載っています。
表中のメソッド名をクリックすれば、そのメソッドの使用可能な引数のリストが分かり、どういうメソッドからの戻り値なのかを知ることができます。getName method メソッドはフィル名を文字列(テキスト)として
返すことが分かるでしょう。
データストレージとデータソース
Google Apps Script では異なる方法でいろいろなフォーマットのデータを回収したりアクセスすることができます。スクリプトにデータを提供する方法としては、スクリプトの保存されているシート
にデータを埋め込むのが最も簡単でしょう。自分で入力することもできますが、下記のフォーマットならいずれもスプレッドシートにインポートできます。
カスタム関数の利用
カスタム関数というのはスプレッドシート内のセルに直接 =myFunctionName() のような構文を入力してスクリプトを実行する方法です。
カスタム関数の返す値は構文を入力したセル以外のセルにはセットできません。 A1セル を利用したカスタム関数で A5セル の内容を変更することはできないのです。
もし関数がダブル配列を返すのなら、関数を含むセルはオーバーフローして関数を含むセルの下側と右側のセルも埋められてしまいます。
return [[1,2],[3,4]];のような例で試すことができるでしょう。
チュートリアル parsing XML data で取り上げられた Oracle of Bacon で使用しているカスタム関数では
Oracle of Bacon へのクエリの前に =kb("actor_name1", "actor_name2") として二人の俳優を選択しています。
セル内のカスタム関数から要求されたデータを提供する以外に、カスタム関数実行のためのアクションは必要としないのです。
カスタム関数には他の関数とは共有できない制限事項があります。
既存のスプレッドシートの数式との相互作用
すでにスクリプトを書いたり挿入したりしたシートはなんらかの数式を持っています。スクリプト内のそれらの公式や関数をどのように実行させ
結び付けていくかの知識です。
スクリプトの共有
スクリプトを共有したいとき、スクリプトが保存されているスプレッドシートを共有することで実現できます。Googleアカウントを持っているのならば、Script Gallery に公開することです。
公開されたスクリプトは Google Docsユーザーならば誰でも利用できます。
スプレッドシートの公開とスクリプトの実行や編集を可能にするために
失敗したら
スクリプトの構文にミスがあると、保存や実行のときにエラーメッセージが出ます。
例;Cannot find method addMenu(string,Undefined). (#3)
メッセージにはエラー箇所のスクリプト内の行番号やどの時点で停止したかの情報があります。Script Editor を開いて点検してください。
この件については Troubleshooting and Debugging Scripts(トラブルシュートとデバッグ) に詳しく書かれています。
-- ユーザーガイド 3. スクリプトを書く : end -- 2011/10/30
|