Google Apps Scriptでコンソールに印刷しますか?


89

私はプログラミングに非常に慣れていません(CodecademyのJSコースのいくつかを受講しました)。ポーカーゲームの結果を含むスプレッドシートが与えられた場合、誰が誰に支払うべきかを決定するための簡単なスクリプトを作成しようとしています。Google Apps Scriptを開いて、開始するために次のように記述しました。

function addplayerstoArray(numplayers) {

  var playerArray = [];

  for (i=0; i<numplayers; i++) {
    playerArray.push(i);
  }
}  

addplayerstoArray(7);

console.log(playerArray[3])

アイデアは、プレーヤーの総数を含む配列を作成することです。コードを実行すると、コンソールに「3」が出力されると思いました。しかし、何も起こりませんでした。と言いました

「ReferenceError:「コンソール」が定義されていません。」

A)コードが希望どおりに機能しているかどうかを確認できるように、印刷に関してGoogle Apps Scriptコンソールがどのように機能するかについて理解できないことは何ですか?

B)コードに問題がありますか?

回答:


144

コードがブラウザではなくクラウドで実行されているため、コンソールは使用できません。代わりに、GASが提供するLoggerクラスを使用してください。

Logger.log(playerArray[3])

次に、IDEの[表示]> [ログ...]で結果を表示します。

GASを使用したロギングに関するドキュメントを次に示します。

編集:2017-07-20AppsスクリプトはStackdriverLoggingも提供するようになりました。スクリプトエディタの[表示]-[コンソールログ]でこれらのログを表示します。


28
スプレッドシートの関数を作成する場合、これはどのように行われますか?ロギング出力がどこに行くのかわからないようです。
TechplexEngineer 2013年

4
とても役に立ちました。ありがとうございました!これで、ログのみがライブ更新され、迅速なテストのために邪魔にならない場所にある場合。
kevincoleman 2014

1
HTMLテンプレートではどうですか?
トレバー2014年

1
スプレッドシートでは、出力をMsgBoxを使用してポップアップに配置するか、サイドバーを使用してサイドバーに配置できます。シートの邪魔にならない場所に置くこともできます。
vinnief 2014

スプレッドシートの場合、ここでのロギングはBetterLogライブラリに
Igor Savinkin 2015

17

上記のvinniefのハッキーなソリューションを構築するために、次のようにMsgBoxを使用します。

Browser.msgBox('BorderoToMatriz', Browser.Buttons.OK_CANCEL);

ブレークポイントのように機能し、スクリプトを停止して、必要な文字列をポップアップボックスに出力します。特に、Logger.logで問題が発生するSheetsで、これはほとんどの場合適切な回避策を提供します。


12

にもかかわらず、Logger.log()技術的には、コンソールに出力何かに正しい方法ですが、それはいくつかの厄介があります。

  1. 出力は構造化されていない混乱であり、すぐに消化するのが難しい場合があります。
  2. 最初にスクリプトを実行してから、[表示/ログ]をクリックする必要があります。これは2回の追加クリックです(1回はCtrl + Enterキーボードショートカットを覚えている場合)。
  3. を挿入する必要がLogger.log(playerArray)あり、デバッグ後に削除する必要がありますLogger.log(playerArray)あります。ため、さらに1〜2ステップ追加します。
  4. オーバーレイを閉じるには、[OK]をクリックする必要があります(さらにクリックします)。

代わりに、何かをデバッグしたいときはいつでも、ブレークポイントを追加し(行番号をクリック)、[デバッグ]ボタン(バグアイコン)を押します。ブレークポイントは、変数に何かを割り当てる場合はうまく機能しますが、変数を開始して後でその内部を覗き見したい場合はうまく機能しません。これは、opが実行しようとしていることと似ています。この場合、「x」(xはスポットをマークします!)を入力してブレーク条件を強制し、実行時エラーをスローします。

ここに画像の説明を入力してください

ログの表示と比較してください。

ここに画像の説明を入力してください

デバッグコンソールにはより多くの情報が含まれており、ログオーバーレイよりもはるかに読みやすくなっています。この方法の小さな利点の1つは、クリーンなコードを維持することが重要な場合に、大量のロギングコマンドでコードを汚染することを心配する必要がないことです。「x」を入力した場合でも、デバッグプロセスの一部として削除することを忘れないでください。そうしないと、コードが実行されません(組み込みのクリーンアップ対策です)。


1
追加xは追加と同じ機能になりますdebugger;
JSDBroughton 2017

完全に同意する。Logger.logは、デバッグと比較して役に立ちません。
スティーブゴン

10

OPの質問に答える

A)コードが希望どおりに機能しているかどうかを確認できるように、印刷に関してGoogle Apps Scriptコンソールがどのように機能するかについて理解できないことは何ですか?

Google Apps Scriptプロジェクトの.gsファイルのコードは、ウェブブラウザではなくサーバーで実行されます。メッセージをログに記録する方法は、クラスロガーを使用することでした。

B)コードに問題がありますか?

エラーメッセージが言ったように、問題はconsole定義されていないことでしたが、最近は同じコードが他のエラーをスローします:

ReferenceError:「playerArray」が定義されていません。(12行目、ファイル「コード」)

これは、playerArrayがローカル変数として定義されているためです。関数の外に行を移動すると、これが解決されます。

var playerArray = [];

function addplayerstoArray(numplayers) {
  for (i=0; i<numplayers; i++) {
    playerArray.push(i);
  }
}  

addplayerstoArray(7);

console.log(playerArray[3])

エラーをスローせずにコードが実行されるようになったので、代わりにブラウザコンソールを確認するために、StackdriverLoggingを確認する必要があります。Google Apps ScriptエディターのUIから、[表示]> [Stackdriverログ]をクリックします

補遺

2017年、GoogleはすべてのスクリプトにStackdriver Loggingをリリースし、クラスコンソールを追加したため、のようなものを含めてもconsole.log('Hello world!')エラーはスローされませんが、ログはブラウザコンソールではなくGoogle Cloud Platform Stackdriver LoggingServiceに記録されます。

Google Appsのスクリプトリリースノート2017

2017年6月23日

StackdriverLoggingは早期アクセスから移動されました。すべてのスクリプトがStackdriverログにアクセスできるようになりました。

ロギングから> Stackdriverロギング

次の例は、コンソールサービスを使用してStackdriverに情報を記録する方法を示しています。

function measuringExecutionTime() {
  // A simple INFO log message, using sprintf() formatting.
  console.info('Timing the %s function (%d arguments)', 'myFunction', 1);

  // Log a JSON object at a DEBUG level. The log is labeled
  // with the message string in the log viewer, and the JSON content
  // is displayed in the expanded log structure under "structPayload".
  var parameters = {
      isValid: true,
      content: 'some string',
      timestamp: new Date()
  };
  console.log({message: 'Function Input', initialData: parameters});

  var label = 'myFunction() time';  // Labels the timing log entry.
  console.time(label);              // Starts the timer.
  try {
    myFunction(parameters);         // Function to time.
  } catch (e) {
    // Logs an ERROR message.
    console.error('myFunction() yielded an error: ' + e);
  }
  console.timeEnd(label);      // Stops the timer, logs execution duration.
}

6

Google Scriptプロジェクトでは、htmlファイル(例:index.html)またはgsファイル(例:code.gs)を作成できます。.gsファイルはサーバー上で実行され、@ PeterHerrmanが説明するようにLogger.logを使用できます。ただし、関数が.htmlファイルで作成されている場合は、ユーザーのブラウザーで実行されており、console.logを使用できます。Chromeブラウザコンソールは、Windows / Linuxの場合はCtrlShift J、Macの場合はCmd OptJで表示できます。

htmlファイルでLogger.logを使用する場合は、スクリプトレットを使用して、htmlファイルからLogger.log関数を呼び出すことができます。これを行うには、<?を挿入します。Logger.log(something)?>何かをログに記録したいものに置き換えます。構文<?を使用する標準スクリプトレット ...?>、コンテンツをページに明示的に出力せずにコードを実行します。


2

2020年に更新

2020年2月、Googleは組み込みのGoogle Apps Script IDEのメジャーアップグレードを発表し、console.log()をサポートするようになりました。したがって、両方を使用できるようになりました。

  1. Logger.log()
  2. console.log()

ハッピーコーディング!


console.log(参照呼ばアップグレードよりも前に、サポートされていた私の答えを
ルベン・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.