Google公式の勝手翻訳


スクリプトエディタを使う

スクリプトを書いて実行したり、トリガーをセットしたり、また他のアクション、例えばスクリプトを共有するためにスクリプトエディタを使う。

スクリプトエディタをを始めるには既存のスプレッドシートまたはサイトを開くか、新規作成する。

スプレッドシートからスクリプトエディタを開始するには、ツール>スクリプトエディタ


グーグルサイトからGoogle Apps Scriptにアクセルするには、サイト所有者か共有者でなければならない。

グーグルサイトからスクリプトエディタを開始するには
  1. サイトに移動
  2. その他>サイトの管理を選択
  3. 左側のApps スクリプトメニューをクリック
  4. 新しいスクリプトを追加をクリック
 
スクリプトエディタの振る舞いは、スクリプトがすでにサイトもしくはスプレッドシート内にあるかどうかで違う。もしスクリプトがサイトかスプレッドシートに存在するなら、スクリプトエディタはそのスクリプトを開く。

もしスプレッドシートまたはサイトにスクリプトがないなら、スクリプトエディタはこのように開く。
(画像略)
 


スクリプトエディタについて

中括弧と一緒に関数myFunction()が宣言されてるのが見て取れるだろう。しかしながら、これは単なるコードである。この関数は実行しようとしない限り、処理が開始されることはない。

コードをスクリプトエディタにタイプまたはコピーするか、既存のスクリプトをスクリプトギャラリーからインストールすると、スクリプトエディタはわかりやすいようにカラーで表示する。

  • varfunctionのような要素や while 、 ifのようなプログラム構文はマルーンで表示
  • 変数名は明るいブルー
  • メソッドの定数引数はグリーン
  • メソッドの変数引数は淡い青
  • メソッドが操作する変数名は淡い青
  • メソッドと関数名は黒
  • 定数文字は赤、コメント
  • アウトされてるコードも含めて
  • コメントは明るいブラウン
スクリプトエディタで次のことが可能
  • ファイルマネージメント 開く、削除、名前の変更、保存
  • テキストの切り取り、コピー、貼付け
  • 検索と置換え
  • スクリプトのタイムゾーンの設定 時間トリガーがあなたが意図したように動くのを保証するための設定 タイムゾーンの設定はファイル>プロジェクトのプロパティ
  • スクリプトギャラリーからスクリプトを開くなら、 File > Insert from gallery 
  • スクリプトのプロパティを調べる スクリプトの名前、詳細、更新された日時、スクリプトキー スクリプトキーはそれぞれのスクリプトに一意の識別子
  • 関数の実行 どんな関数もスクリプトエディタから直接呼び出すことができる 例外はアンダースコアで終わる名前のスクリプトでそれは他の関数からのみ呼び出すことができる
  • ログメッセージと処理の写しを見る
  • あなたのスクリプトの更新履歴を見る



スクリプトを計画する

あなたがスクリプトを計画しているとき、擬似コードを先に書くと助けになることに気付こことだろう。擬似コードは、スクリプトが何をする必要があるかを詳細かつ正確に叙述する。いくつの関数がスクリプトに必要なのか、どこにループとカウンターが必要なのか、変数がどこに必要か、どこで異なった計算をするのかを記載するのに擬似コードを使うことができる。ここにストックプライススクリプトの擬似コードを示してみる。

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
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
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

擬似コードに詳細を書けば書くほど、スクリプトを書くことが容易になることだろう。


更にスクリプトとスプレッドシートについて

ある固有のスクリプトはただ唯一一つのグーグルスプレッドシートと連携する。もしスプレッドシートのコピーをあなたが作ったなら、スクリプトもコピーされる。
それはスプレッドシートとそのコピー内のスクリプトのスクリプトキーを調べることで確認することができる。

ある固有のスプレッドシートは複数の連携するスクリプトを持つことができる。もし onOpen イベントハンドラーをあるスプレッドシートと連携する一つ以上のスクリプトのなかで使ったら、全てのスクリプトはスプレッドシートを開いた時に処理を始めるが、どの順番でスクリプトが実行されるかは不明瞭である。イベントハンドラーは何かしらのイベントが起こった時に起動される関数である。イベントハンドラーについての完全な情報はRunning Scripts in Response to an Eventを見ること。

スクリプトは今のところ他のスクリプトを生成したり呼び出せないし他のスクリプトの関数を呼び出すこともできない。関数は実行環境のいかなる状態も変えることができない。ではあるがスプレッドシートのセルを改良することによってその振る舞いをシミュレートすることができる。それは関数が実行された後、全ての関数やオブジェクトに蓄えられたデータは消される。もし関数の結果を保持したいなら、スプレッドシートのセルにコピーしなければならない。


更にスクリプトとサイトについて

Appsスクリプトイベントをグーグルサイトに埋め込まれたリンクから引き起こすことができる。どうやってやるかはここを見る Using Apps Script in Your Site. サイトにガジェットとして挿入することもできる。更に知りたいならここを見る Embedding Apps Script in Google Sites

スクリプトの開始

スプレッドシートかサイトからスクリプトエディタを開くと以下のようになる。

function myFunction() {
 
}​

myFunctionという名前の関数は、あなたが名前をつけるまでの一時的な代用になっている。あなたがスクリプトを書いたら、任意の名前でスクリプト内に関数を割り当てることができる。関数名は、関数が何をするかを示す単語で構成されるのが慣例で、例えばgetStockName みたいな感じになる。関数名は慣例的にキャメルケースでつけられる。最初の単語は小文字で次に続く単語の最初の文字は大文字となる。関数の命令は中括弧で閉じられなければならない。

スクリプトは必要なだけ関数を持つことができる。関数をスクリプトに書くと同時に変数の目的やコードのブロックが何をするのかコメントを含めていく。コメントはスクリプトが何をするのか追いかけたり、将来スクリプトを維持するのを簡単にする。

アンダースコアで終わる関数、例えばinternalStuff_()は他の関数とは違く扱われる。スクリプトエディタの実行フィールドにこれらの関数を見ることはないし、スプレッドシートのスクリプトマネージャにも現れない。アンダースコアはその関数を実行すべきでないとユーザーに示すとともにそれは他の関数へのみ利用可能であることを示すのに使える。


スクリプトをどう実行するかの選択

いつどうやってスクリプトが実行されるのかはあなたがコントロールする。スクリプトを書いたとき、以下の方法からスクリプトの実行方法を選ぶ。

  • イベントハンドラーの使用 イベントハンドラーはあなたのスクリプトがスプレッドシートを開いた時、インストールされた時、編集された時、あなたが選んだタイミングで実行される。全ての情報を見るには Running Scripts in Response to an Event
  • カスタムメニューアイテムの使用 例えば Stock Price scriptはユーザーがメニューを選択することで実行される。
  • 描画またはスプレッドシートにはめ込まれたボタンの使用 ユーザーが描画ボタンをクリックすると、付随したスクリプトが実行される 更なる情報は Creating a button to run the code   このチュートリアルからReading Spreadsheet Data Using JavaScript Objects
  • スプレッドシート関数と呼ばれるカスタム関数の使用 更なる情報は Using Custom Functions.
  • スクリプトエディタの実行ボタンをクリック
  • スクリプトマネジャの実行ボタンをクリック
スクリプトがどういう状況下で実行されるかは、スクリプトがどう起動されるかによる。全ての情報はここでUnderstanding Permissions and Script Execution.



Google Apps Script API の使用


あなたがGoogle AppsスクリプトAPIを使うのを手助けするために、すこしばかりオブジェクト指向プログラミング言語とそれの働く仕組みについて話そう。それからAPIドキュメントの読み方について話そう。


Google Apps スクリプトはJavaScript 言語を使用してる。Google Appsスクリプトの命令はAPIドキュメントに書かれてるオブジェクトとメソッドによって成し遂げられる。APIとはアプリケーション プログラミング インターフェイスの略である。APIは前もってパッケージされたコードで、あなたがスクリプトやプログラムで達成する必要がある一般的なタスクを供給する。

Google AppsスクリプトAPIはメールを送ったり、カレンダーエントリを作成したり、マップを作成したり、ユーザーインターフェースを作成したり、文章を翻訳したりするようなタスクを達成するためのオブジェクトを含んでる。メソッドはオブジェクトの振る舞いを記述しそしてオブジェクトに付随する関数である。

例えば、Google AppsスクリプトはMailAppというメールを作成し送るという オブジェクトがある。MailAppには二つのメソッドがある。sendEmailと getRemainingDailyQuotaである。メールを送るにはsendEmailメソッドを呼び出しそのメソッドの引数に値を与える。Google Appsスクリプトには引数とアドバンス引数がある。引数はメソッドを動かすのに必要である。アドバンス引数はオプションでメソッドの振る舞いを定義するのに更なる柔軟性をあなたに与える。

sendEmailメソッド場合、引数はメールに送られる情報を特定する。sendEmailメソッドはアドバンス引数も取ることができる。引数とアドバンス引数は、受信者、メールの用件、あなたが送った本文、返信アドレス、あとそれ以外の引数で構成される。例えば次の命令文は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});


上の命令文はMailAppクラスのsendEmailメソッドと呼ぶ。文法は次のようになる

  ClassName.methodName(argument1, argument2, argument3....argumentn);

例えば、メッセージボックスrにHello,Worldとポップアップさせるには、BrowserクラスのmsgBoxメソッドを呼び、Hello,Worldを引数として引き渡す。

Browser.msgBox("Hello, World");

Browser.msgBox() は現在Google サイトで利用できないので、代わりにメールで送ることが出来る。

MailApp.sendEmail("you@email.com", "Hello world!", "Sent from Apps Script")

またはログにメッセージを追加する。

Logger.log("Hello world!")

The Google Apps Scripts API ドキュメントは ここ。左側のスライドバーは全てのサービスと特定のサービスに同伴するオブジェクトのリンクになっている。もしDocsList linkをクリックしたら、オブジェクトとそのメソッドのリストページへ飛ぶ。もしbase class Fileのリンクをクリックしたならそのクラスのメソッドの詳細ページへ飛ぶ。もしテーブルのメソッド名をクリックしたら、メソッドの引数とメソッドから返される値のリストへ飛ぶ。例えば getNamemethod はファイル名を文字列として返す。


データストレージとデータソース

Google Apps スクリプトは様々な方法で、色々なフォーマットのデータを引き出したりアクセスすることができる。

スクリプトに値を与える一番簡単な方法はスクリプトが置いてあるサイトもしくはスプレッドシートにデータを入れることである。データをタイプすることが出来る。また以下のフォーマットでスプレッドシートにデータをインポート出来る。

  • .xls
  • .xlsx
  • .ods
  • .csv
  • .txt
もし他のフォーマットでデータを所有しているならば、上のどれかのフォーマットでエキスポートしてから、Google スプレッドシートにインポート可能かもしれない。

Google Apps スクリプトはXMLデータを扱うことができる。もしXMLのデータ構造を知る必要があるならこちらAPIs for handling XML documents 、tutorial for parsing XML documents


カスタム関数の使用

カスタム関数とはスプレッドシートのセルから =myFunctionName()構文を使って直接呼び出す関数のことである。カスタム関数は値を返す。しかしそのセルの外側から値を入れることは出来ない。ほとんどの場合、セルA1のカスタム関数はセルA5の値を変えることは出来ない。しかしながら、もしカスタム関数が二次元配列を返すなら、その結果はセルから溢れ出して下か右のセルを埋める。 return [[1,2],[3,4]];を含むカスタム関数でテストできる。


tutorial on parsing XML dataで解説されているThe Oracle of Bacon スクリプトは二人の俳優名を集める為のカスタム関数を使用している。=kb("actor_name1", "actor_name2") カスタム関数に必要とされてるのはそのセルにデータを与えることだけである。

カスタム関数は他の関数をは共有していない制限がある。

  • カスタム関数はメールを送れない
  • カスタム関数はグーグルサイトでは動かない
  • カスタム関数はユーザー認証が必要な場合は実行できない。例えば、カスタム関数は他のユーザーのカレンダーにカレンダーイベントを置くことができない。
  • カスタム関数はユーザー情報が必要なあらゆる仕事を実行できない。


既存のスプレッドシートの公式群との連携

あなたがスクリプトを書いたかインストールしたスプレッドシートにはすでに公式が存在してるかもしれない。公式と関数がどうやって実行され相互作用するのかここに示す


  • もし onInstall 関数がスプレッドシートに存在するなら、スプレッドシートをインストールした時に実行される
  • もし onOpen 関数がスプレッドシートに存在するなら、スプレッドシートを開いた時に実行される
  • カスタム関数と公式は、スプレッドシートが評価されたか、関数または公式のセルのデータが変わった時にいつでも実行される
  • その他の関数は手動又は、リンクをクリックするか、関数が付加された描画をクリックすることで実行される



あなたのスクリプトの共有

スクリプトを共有するにはいくつかの選択がある。

  • あなたは特定の友人や同僚とスクリプトを共有したいと思っているかもしれない。そうするには、スクリプトを組み込んであるスプレッドシートを明示的に共有すればいい
  • もしかして外の世界に向けてスクリプトを共有したいとあなたは思っているのかもしれない。もしグーグルアカウントを持っているならスクリプトギャラリーで公開することができる。スクリプトギャラリーに送れば、そのスクリプトは他のグーグルドキュメントユーザーが使えるようになる。
  • あなたがスプレッドシートにあるスクリプトと一緒にスプレッドシートを共有したいと考えてるのかもしれない。これはスプレッドシートのフォーマットに強くスクリプトが依存しているときに一番適切な方法だ。スプレッドシートのテンプレートにはスクリプトとその特別なフォーマットがある。
スプレッドシートを共有して他の人にもスクリプトを実行や編集可能にする


  1. スプレッドシートの共有ボタンを使って招待する
  2. スプレッドシートの編集権をもつコラボレーターを他のユーザーからつくる
  3. スクリプトを他のユーザーが編集できるようにするには、スクリプトエディタで、共有をクリックして  Allow document collaborators to edit projectチェックを入れる
スクリプトギャラリーにスクリプトを公開する


  1. スクリプトエディタで公開をクリック
  2. スクリプト名を記入
  3. 簡単な説明を書く どうやって実行するのか、どんなデーターが必要なのか、その他ユーザーの助けになる情報を含める
  4. ドロップダウンリストからカテゴリーを選択
  5. ヘルプページの場所を入力
  6. スクリプトを公開することについての説明文を読む
  7. グーグルドキュメントの注意事項を読む
  8. Publishをクリック グーグルがスクリプトを査定してスクリプトギャラリーに置いた後、スクリプトが公開された由のメールが送られてくる
スプレッドシートのテンプレートを投稿するには 


  1. ドキュメントのリストを開く
  2. スプレッドシートを選ぶ
  3. More Actions をクリック
  4. テンプレートギャラリーに投稿をクリック
  5. 簡単な説明とカテゴリーと言語を選択
  6. テンプレートをsubmitをクリック
さらなるテンプレートの投稿に関する情報は Submitting a Templateを読むこと






もし間違いを犯したなら

あなたのスクリプトにいくらかエラーを見つけることができると思う。


もしコードをタイプしてタイプエラーをしてしまったら、その行のカラーコードは正しくならないままである。例えば次の株価スクリプトのコードの行は正しい。

sheet.getRange(row, 2).setValue(stockInfo.name);

スクリプトエディタに正しくこれを入力したら、コードは次のようになる

Graphic showing correct  code in the Script Editor

もし間違えてsetValuesetValとタイプしたら、stockInfo.nameを囲んでる括弧は黒の代わりに緑になる

Graphic showing incorrect code with changed colors in Script Editor

間違った構文やその他のエラーを含むスクリプトは実行されない。もし構文エラーがある場合、セーブした時か実行した時にエラーメッセージが表示される。

例えば

Cannot find method addMenu(string,Undefined). (#3)

エラーメッセージは常にスクリプトが実行をストップした行を含む。スクリプトを調べるにはスクリプトエディタでスクリプトを開く。

さらなるエラーメッセージに関する情報やトラブルシューティングは、Troubleshooting and Debugging Scripts




Debuggerの使用

スクリプトエディタにはdebuggerも含まれる。debuggerはスクリプト実行中に現在の変数やオブジェクトの状態を見ることができるようにしてくれる。一行一行照査実行していくか、又はブレイクポイントを設定してその時点での値を見ることができる。

debuggerは何百何千の行の複雑で長いコードに主に使われる意図で存在する。短いスクリプトなら単にスクリプトを見ていけば変数の値をスキャンして同定できるが、コードや計算が複雑なら短いコードに置いても、debuggerが有効であるかもしれない。

debuggerはカスタム関数はには使えない。onEdit関数、イベントトリガーやサービスとして実行されるスクリプトにも。

debuggerをスタートするには

  1. スクリプトがあるスプレッドシートを開く
  2. ツール>スクリプトエディタをクリック
  3. Debuggerアイコンをクリック、Debuggerアイコンはちっちゃな虫みたいなのがそれである。 debuggerはスクリプトエディタの下の方に表示される。
スクリプトエディタとdebuggerはこんな感じである

構文エラーはAppsスクリプトによって、入力段階か最初に実行する際に捉えられる。debuggerを使うのは構文は正しくてもうまく意図したように働かないという場合のエラーを見つけるためである。構文エラーがあってもdebuggerを開始することはできる。上にあったようにsetValを間違えてタイプした場合、TypeError: Cannot find function setVal in object Rangeとスクリプトエディタのスクリプトの上に表示される。

debuggerを使って見つけることができるエラーの例をここで挙げる。間違った場所で変数を加算したり、加算する量を間違えるかもしれない。そうすると変数の値は正しくないことになる。間違った値を計算で使うとなると、結果は間違ったものになる。そこであなたはをスクリプトのいくつかの地点で変数の値を観察するのにdebuggerをつかうことだろう。これによって、どこで間違った値が変数に代入されたのか見つけることができることだろう。

ログメッセージをを使ってもこれはできるかもしれない、ここに書かれているようにCreating Log Messages and Viewing Logs  けどdebuggerを使うほうが更に効率的である。ログを行ったりきたりするようなことなく値をリアルタイムで見ることができる。


ブレイクポイントの設定

ブレイクポイントはdebuggerでの値を見るためにコードが処理を行うのを止めたい時に設定するポイントである。ブレイクポイントを設定するには、スクリプトエディタで行番号をクリックするか、debuggerという語句をコードの行に挿入する。ブレイクポイントを削除したい時は行番号を再びクリックするか、debuggerの語句を削除すればいい。ブレイクポイントはdebugger が見える見えないに関わらず設定できる。


ブレイクポイントは好きなだけ設定できる。debuggerを挿入して設定したブレイクポイントはスクリプトと一緒に保存される。行番号をクリックして設定したブレイクポイントは保存されない。

debuggerは条件付きのブレイクポイントは持っていないが、条件付きブレイクポイントの振る舞いに似せたコードを書くことはできる。例えば、debuggerをif else構文に挿入することもできる。この場合は条件が合致した場合のみブレイクポイントが呼び出される。

var x=1
while (true) {
if (x < 10)  
 
{
     
debugger
   
}
   
else
   
{
   
exit
   
}

 x
=x+1
 
}

もしdebuggerでほぼ全ての行を止めたいようなとき、一行一行確認していくのはなく、の場合は次のセクションを参考に

Debuggerの実行とあなたが見ることの翻訳

ブレイクポイントを設定した後、関数の実行を選択し、虫みたいなボタンをクリックしてdebuggerからスクリプトを起動する。

debuggerがまだ表示されていないなら、スクリプトエディタの底に現れる。そして設定した最初のブレイクポイントでストップする。

続けてスクリプトを実行するには、debuggerのプレイボタンをクリックする。


株価スクリプトで試してみよう

  1. ストックシンボル以外のデータを消す
  2. ツール>スクリプトエディタをクリック
  3. ドロップダウンリストからgetStockを選択
  4. 行17と26を選択
  5. debuggerボタンをクリック。debuggerは17行目で止まる。行をハイライトする。debuggerでgetStock[17]を見ることができるが、それはdebuggerが17行目で止まったことを示している。thisからスクリプト全てが左から右に一行になって表示される。thisの下は以下のようになる。オブジェクトrowは数字2に設定される(debuggerに表示されているように)
  6. プレイボタンをクリック debuggerは26行めで止まる。変数stockInfoの値が現れる。ストックシンボルにより取ってきた値である。
  7. ふただびプレイボタンをっクリック。そうしたらスプレッドシートにデータが表示されるのが分かると思う。
  8. プレイボタンを全てのシンボルがスプレッドシートに書きこまれるまでクリックし続ける。これをする度、debuggerの値が変わることがわかる
thisの隣の+サインをクリックすると追加の情報を見ることができる。それはAppsスクリプトのdebuggerからみえる全てのサービスと全ての使用中のオブジェクトである。たとえば株価スクリプトをデバグしている時stockInfoを見ると、stockInfoが呼ぶことができる全ての情報を見ることができる。スクリプトがなんにも表示しないとしても。


コードをステップで実行するには3つの選択がある

  • ステップインボタンをクリックして一行一行ステップ
  • ステップアウトボタンをクリックして現在の関数の最後までスクリプトを実行して、何がその関数を読んだとしてもそのあとの行で止める。
  • ステップオーバーボタンをクリックして次の行までスクリプトを実行

一時停止はポーズボタンをクリックする。スクリプトが実行されている間だけ可能

ビューフィルターの使用

debuggerはビューフィルターの機能も持っている。継承の表示全てのデータを表示である。それぞれのボタンをクリックすることで呼び出す。

継承の表示フィルターを理解するには、JavaScriptのオブジェクトとメソッドについてすこし知る必要がある。新たなオブジェクトタイプを作り出すとき、既存の例えばJavaScriptの基礎タイプを土台にして作る。そうすると、新たなオブジェクトはメソッドとプロパティをそれから継承するが、その上でユニークなメソッドとプロパティを追加する。例えば全てのStringオブジェクトはStringからメソッドとプロパティを継承してる。

継承の表示をクリックすると現在のオブジェクトと全てのオブジェクト階層の継承関係を表示する。普通はそんなにオブジェクトについて情報を必要とすることはない。

全ての情報を表示をクリックすると、JavaScript バーチャルマシンで利用可能な全てのスタンダードオブジェクトとメソッドが表示される。